IyBDb3B5cmlnaHQgKEMpIDE5ODgsIDE5ODkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIE1ha2UuCiMKIyBWTVMgZXh0ZW5zaW9ucyBmcm9tIEdOVSBNYWtlIDMuNjAgaW1wb3J0ZWQgYnkKIyAgS2xhdXMgS+RtcGYgKGtrYWVtcGZAZGlkeW11cy5ybWkuZGUpCiMKIyBHTlUgTWFrZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAxLCBvciAoYXQgeW91ciBvcHRpb24pCiMgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBHTlUgTWFrZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIEdOVSBNYWtlOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KCkNDID0gY2Mvd2FybgpDUCA9IGNvcHkKCiUub2JqOiAlLmMKCSQoQ0MpICQoQ0ZMQUdTKS9vYmo9JEAgJDwKIwojCU1ha2VmaWxlIGZvciBHTlUgTWFrZQojCgpDRkxBR1MgPSAkKGRlZmluZXMpIC9kZWJ1Zy9ub29wdC9pbmNsdWRlPShbXSxbLmdsb2JdKQojTERGTEFHUyA9IC9kZWIKTERGTEFHUyA9IAoKZGVmaW5lcyA9IC9kZWZpbmU9KCJ1bmxpbms9cmVtb3ZlIiwiSEFWRV9DT05GSUdfSCIsIlZNUyIsIk5PX0FSQ0hJVkVTIiwiYWxsb2NhdGVkX3ZhcmlhYmxlX2V4cGFuZF9mb3JfZmlsZT1hbGxvY192YXJfZXhwYW5kX2Zvcl9maWxlIikKCkxPQURfQVZHID0gL2RlZmluZT0iTk9fTERBViIKCiMgSWYgeW91IGRvbid0IHdhbnQgYXJjaGl2ZSBzdXBwb3J0LCBjb21tZW50IHRoZXNlIG91dC4KI0FSQ0hJVkVTID0gLGFyLm9iaixhcnNjYW4ub2JqCiNBUkNISVZFU19TUkMgPSBhci5jIGFyc2Nhbi5jCgojIElmIHlvdXIgc3lzdGVtIG5lZWRzIGV4dHJhIGxpYnJhcmllcyBsb2FkZWQgaW4sIGRlZmluZSB0aGVtIGhlcmUuCiMgU3lzdGVtIFYgcHJvYmFibHkgbmVlZCAtbFBXIGZvciBhbGxvY2EuCiMgaWYgb24gdmF4LCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lCiNMT0FETElCRVMgPSAsYy5vcHQvb3B0CkxPQURMSUJFUyA9CgojIElmIHlvdXIgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBhbGxvY2EsIG9yIHRoZSBvbmUgcHJvdmlkZWQgaXMgYmFkLAojIGdldCBpdCBmcm9tIHRoZSBFbWFjcyBkaXN0cmlidXRpb24gYW5kIGRlZmluZSB0aGVzZS4KQUxMT0NBID0gLGFsbG9jYS5vYmoKQUxMT0NBU1JDID0gYWxsb2NhLmMKCiMgSWYgdGhlcmUgYXJlIHJlbW90ZSBleGVjdXRpb24gZmFjaWxpdGllcyBkZWZpbmVkLAojIGVuYWJsZSB0aGVtIHdpdGggc3dpdGNoZXMgaGVyZSAoc2VlIHJlbW90ZS0qLmMpLgpSRU1PVEUgPQoKIyBBbnkgZXh0cmEgb2JqZWN0IGZpbGVzIHlvdXIgc3lzdGVtIG5lZWRzLgpleHRyYXMgPSAsc2lnbmFtZS5vYmoscmVtb3RlLXN0dWIub2JqLHZtc2Z1bmN0aW9ucy5vYmosdm1zaWZ5Lm9iagojLGRpcmVjdG9yeS5vYmoKIyBhcyBhbiBhbHRlcm5hdGl2ZTogCmdsb2IgPSAsWy5nbG9iXWdsb2Iub2JqLFsuZ2xvYl1mbm1hdGNoLm9iagpnZXRvcHQgPSAsZ2V0b3B0Lm9iaixnZXRvcHQxLm9iagojIERpcmVjdG9yeSB0byBpbnN0YWxsIGBtYWtlJyBpbi4KYmluZGlyID0gW10KIyBEaXJlY3RvcnkgdG8gaW5zdGFsbCB0aGUgbWFuIHBhZ2UgaW4uCm1hbmRpciA9IFtdCiMgTnVtYmVyIHRvIHB1dCBvbiB0aGUgbWFuIHBhZ2UgZmlsZW5hbWUuCm1hbmV4dCA9IDEKCm9ianMgPSBjb21tYW5kcy5vYmosam9iLm9iaixkaXIub2JqLGZpbGUub2JqLG1pc2Mub2JqLFwKICAgICAgIG1haW4ub2JqLHJlYWQub2JqLHJlbWFrZS5vYmoscnVsZS5vYmosaW1wbGljaXQub2JqLFwKICAgICAgIGRlZmF1bHQub2JqLHZhcmlhYmxlLm9iaixleHBhbmQub2JqLGZ1bmN0aW9uLm9iaixcCiAgICAgICB2cGF0aC5vYmosdmVyc2lvbi5vYmokKEFSQ0hJVkVTKSQoQUxMT0NBKSQoZXh0cmFzKSQoZ2V0b3B0KSQoZ2xvYikKc3JjcyA9IGNvbW1hbmRzLmMgam9iLmMgZGlyLmMgZmlsZS5jIG1pc2MuYyBcCgltYWluLmMgcmVhZC5jIHJlbWFrZS5jIHJ1bGUuYyBpbXBsaWNpdC5jIFwKCWRlZmF1bHQuYyB2YXJpYWJsZS5jIGV4cGFuZC5jIGZ1bmN0aW9uLmMgXAoJdnBhdGguYyB2ZXJzaW9uLmMgdm1zZnVuY3Rpb25zLmMgdm1zaWZ5LmMgJChBUkNISVZFU19TUkMpICQoQUxMT0NBU1JDKSBcCgljb21tYW5kcy5oIGRlcC5oIGZpbGVkZWYuaCBqb2IuaCBtYWtlLmggcnVsZS5oIHZhcmlhYmxlLmgKCgouUEhPTlk6IGFsbCBkb2MKYWxsOiBjb25maWcuaCBtYWtlLmV4ZQoKZG9jOiBtYWtlLmluZm8gbWFrZS5kdmkKCgptYWtlLmV4ZTogJChvYmpzKQoJJChMRCkkKExERkxBR1MpL2V4ZT0kQCAkXiQoTE9BRExJQkVTKQoKLlBIT05ZOiBjbGVhbiByZWFsY2xlYW4KY2xlYW46CgktJChSTSkgbWFrZS5leGU7LCoub2JqOyoKCiMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZGVwZW5kZW5jaWVzLgpjb21tYW5kcy5vYmo6IGNvbW1hbmRzLmMgbWFrZS5oIGRlcC5oIGNvbW1hbmRzLmggZmlsZWRlZi5oIHZhcmlhYmxlLmggam9iLmggCmpvYi5vYmo6IGpvYi5jIG1ha2UuaCBjb21tYW5kcy5oIGpvYi5oIGZpbGVkZWYuaCB2YXJpYWJsZS5oIApkaXIub2JqOiBkaXIuYyBtYWtlLmggCmZpbGUub2JqOiBmaWxlLmMgbWFrZS5oIGNvbW1hbmRzLmggZGVwLmggZmlsZWRlZi5oIHZhcmlhYmxlLmggCm1pc2Mub2JqOiBtaXNjLmMgbWFrZS5oIGRlcC5oIAptYWluLm9iajogbWFpbi5jIG1ha2UuaCBjb21tYW5kcy5oIGRlcC5oIGZpbGVkZWYuaCB2YXJpYWJsZS5oIGpvYi5oIApyZWFkLm9iajogcmVhZC5jIG1ha2UuaCBjb21tYW5kcy5oIGRlcC5oIGZpbGVkZWYuaCB2YXJpYWJsZS5oIApyZW1ha2Uub2JqOiByZW1ha2UuYyBtYWtlLmggY29tbWFuZHMuaCBqb2IuaCBkZXAuaCBmaWxlZGVmLmggCnJ1bGUub2JqOiBydWxlLmMgbWFrZS5oIGNvbW1hbmRzLmggZGVwLmggZmlsZWRlZi5oIHZhcmlhYmxlLmggcnVsZS5oIAppbXBsaWNpdC5vYmo6IGltcGxpY2l0LmMgbWFrZS5oIHJ1bGUuaCBkZXAuaCBmaWxlZGVmLmggCmRlZmF1bHQub2JqOiBkZWZhdWx0LmMgbWFrZS5oIHJ1bGUuaCBkZXAuaCBmaWxlZGVmLmggY29tbWFuZHMuaCB2YXJpYWJsZS5oIAp2YXJpYWJsZS5vYmo6IHZhcmlhYmxlLmMgbWFrZS5oIGNvbW1hbmRzLmggdmFyaWFibGUuaCBkZXAuaCBmaWxlZGVmLmggCmV4cGFuZC5vYmo6IGV4cGFuZC5jIG1ha2UuaCBjb21tYW5kcy5oIGZpbGVkZWYuaCB2YXJpYWJsZS5oIApmdW5jdGlvbi5vYmo6IGZ1bmN0aW9uLmMgbWFrZS5oIHZhcmlhYmxlLmggZGVwLmggY29tbWFuZHMuaCBqb2IuaCAKdnBhdGgub2JqOiB2cGF0aC5jIG1ha2UuaCBmaWxlZGVmLmggdmFyaWFibGUuaCAKdmVyc2lvbi5vYmo6IHZlcnNpb24uYyAKYXJzY2FuLm9iajogYXJzY2FuLmMgCmFyLm9iajogYXIuYyBtYWtlLmggZmlsZWRlZi5oIApzaWduYW1lLm9iajogc2lnbmFtZS5jCnJlbW90ZS1zdHViLm9iajogcmVtb3RlLXN0dWIuYwpbLmdsb2JdZ2xvYi5vYmo6IFsuZ2xvYl1nbG9iLmMKWy5nbG9iXWZubWF0Y2gub2JqOiBbLmdsb2JdZm5tYXRjaC5jCmdldG9wdC5vYmo6IGdldG9wdC5jCmdldG9wdDEub2JqOiBnZXRvcHQxLmMKCmNvbmZpZy5oOiBjb25maWcuaC12bXMKCSQoQ1ApICQ8ICRACg==