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KAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90aHJlYWRpbmcucHl0AwAAAHJ1bicAAABzJgAAAAABEAEGAQMBFgIKAQoBDQEGARUBJQINAQYBEwIKAQ0BHwEGAQMBKAQAAABSDAAAAFINAAAAUggAAABSHAAAACgAAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RocmVhZGluZy5weVIOAAAAHwAAAHMEAAAABgEJB3QMAAAAQmFzZVRlc3RDYXNlYwAAAAAAAAAAAQAAAEIAAABzGgAAAGUAAFoBAGQAAIQAAFoCAGQBAIQAAFoDAFJTKAIAAABjAQAAAAEAAAACAAAAQwAAAHMWAAAAdAAAagEAagIAgwAAfAAAXwMAZAAAUygBAAAATigEAAAAdAQAAAB0ZXN0dAwAAAB0ZXN0X3N1cHBvcnR0DwAAAHRocmVhZGluZ19zZXR1cHQIAAAAX3RocmVhZHMoAQAAAFIHAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RocmVhZGluZy5weXQFAAAAc2V0VXBAAAAAcwIAAAAAAWMBAAAAAQAAAAIAAABDAAAAcyQAAAB0AABqAQBqAgB8AABqAwCMAAABdAAAagEAagQAgwAAAWQAAFMoAQAAAE4oBQAAAFIeAAAAUh8AAAB0EQAAAHRocmVhZGluZ19jbGVhbnVwUiEAAAB0DQAAAHJlYXBfY2hpbGRyZW4oAQAAAFIHAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RocmVhZGluZy5weXQIAAAAdGVhckRvd25DAAAAcwQAAAAAARMBKAQA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aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5dA8AAABmYWlsX25ld190aHJlYWQCAQAAcwIAAAAAAXQGAAAAdGFyZ2V0YwAAAAAAAAAAAQAAAFMAAABzBAAAAGQAAFMoAQAAAE4oAQAAAFItAAAAKAAAAAAoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5dAgAAAA8bGFtYmRhPgcBAABzAAAAAHM6AAAARmFpbGVkIHRvIGNsZWFudXAgX2xpbWJvIG1hcCBvbiBmYWlsdXJlIG9mIFRocmVhZC5zdGFydCgpLigJAAAAUgMAAAB0EQAAAF9zdGFydF9uZXdfdGhyZWFkUhAAAAB0DAAAAGFzc2VydFJhaXNlc1ICAAAAUkUAAABSMQAAAFI1AAAAdAYAAABfbGltYm8oBAAAAFIHAAAAUmsAAABSbgAAAFI6AAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RocmVhZGluZy5weXQSAAAAdGVzdF9saW1ib19jbGVhbnVwAAEAAHMUAAAAAAIJAgkBCQEDARUBFgEGAQwBCwJjAQAAAAMAAAAFAAAAQwAAAHNiAAAAeRAAZAEAZAAAbAAAfQEAV24gAAR0AQBrCgByMgABAQF0AgByLgBkAgBHSG4AAGQAAFNYdAMAagQAdAUAagYAZAMAZAQAZwMAgwEAfQIAfAAAagcAfAIAZAUAgwIAAWQAAFMoBgAAAE5p/////3M2AAAAdGVzdF9maW5hbGl6ZV93aXRoX3J1bm5uaW5nX3RocmVhZCBjYW4ndCBpbXBvcnQgY3R5cGVzcwIAAAAtY3NLAwAAaWYgMToKICAgICAgICAgICAgaW1wb3J0IGN0eXBlcywgc3lzLCB0aW1lLCB0aHJlYWQKCiAgICAgICAgICAgICMgVGhpcyBsb2NrIGlzIHVzZWQgYXMgYSBzaW1wbGUgZXZlbnQgdmFyaWFibGUuCiAgICAgICAgICAgIHJlYWR5ID0gdGhyZWFkLmFsbG9jYXRlX2xvY2soKQogICAgICAgICAgICByZWFkeS5hY3F1aXJlKCkKCiAgICAgICAgICAgICMgTW9kdWxlIGdsb2JhbHMgYXJlIGNsZWFyZWQgYmVmb3JlIF9fZGVsX18gaXMgcnVuCiAgICAgICAgICAgICMgU28gd2Ugc2F2ZSB0aGUgZnVuY3Rpb25zIGluIGNsYXNzIGRpY3QKICAgICAgICAgICAgY2xhc3MgQzoKICAgICAgICAgICAgICAgIGVuc3VyZSA9IGN0eXBlcy5weXRob25hcGkuUHlHSUxTdGF0ZV9FbnN1cmUKICAgICAgICAgICAgICAgIHJlbGVhc2UgPSBjdHlwZXMucHl0aG9uYXBpLlB5R0lMU3RhdGVfUmVsZWFzZQogICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzZWxmLmVuc3VyZSgpCiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWxlYXNlKHN0YXRlKQoKICAgICAgICAgICAgZGVmIHdhaXRpbmdUaHJlYWQoKToKICAgICAgICAgICAgICAgIHggPSBDKCkKICAgICAgICAgICAgICAgIHJlYWR5LnJlbGVhc2UoKQogICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxMDApCgogICAgICAgICAgICB0aHJlYWQuc3RhcnRfbmV3X3RocmVhZCh3YWl0aW5nVGhyZWFkLCAoKSkKICAgICAgICAgICAgcmVhZHkuYWNxdWlyZSgpICAjIEJlIHN1cmUgdGhlIG90aGVyIHRocmVhZCBpcyB3YWl0aW5nLgogICAgICAgICAgICBzeXMuZXhpdCg0MikKICAgICAgICAgICAgaSoAAAAoCAAAAFJbAAAAUlwAAABSAAAAAHQKAAAAc3VicHJvY2Vzc3QEAAAAY2FsbHQDAAAAc3lzdAoAAABleGVjdXRhYmxlUisAAAAoAwAAAFIHAAAAUlsAAAB0AgAAAHJjKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RocmVhZGluZy5weXQdAAAAdGVzdF9maW5hbGl6ZV9ydW5ubmluZ190aHJlYWQPAQAAcxIAAAAABAMBEAENAQYBCAEFAg8YDAFjAQAAAAUAAAAGAAAAQwAAAHOoAAAAdAAAagEAdAIAagMAZAEAZAIAZwMAZAMAdAAAagQAZAQAdAAAagQAgwECfQEAfAAAagUAfAEAagYAagcAgwEAAXwAAGoFAHwBAGoIAGoHAIMBAAF8AQBqCQCDAABcAgB9AgB9AwB8AQBqCgB9BAB8AABqCwB8BABkBQBrAgBkBgCDAgABfAAAagwAfAQAZAcAawIAZAgAdA0AfAMAgwEAF4MCAAFkAABTKAkAAABOcwIAAAAtY3NPAgAAaWYgMToKICAgICAgICAgICAgaW1wb3J0IHN5cywgdGhyZWFkaW5nCgogICAgICAgICAgICAjIEEgZGVhZGxvY2sta2lsbGVyLCB0byBwcmV2ZW50IHRoZQogICAgICAgICAgICAjIHRlc3RzdWl0ZSB0byBoYW5nIGZvcmV2ZXIKICAgICAgICAgICAgZGVmIGtpbGxlcigpOgogICAgICAgICAgICAgICAgaW1wb3J0IG9zLCB0aW1lCiAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDIpCiAgICAgICAgICAgICAgICBwcmludCAncHJvZ3JhbSBibG9ja2VkOyBhYm9ydGluZycKICAgICAgICAgICAgICAgIG9zLl9leGl0KDIpCiAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1raWxsZXIpCiAgICAgICAgICAgIHQuZGFlbW9uID0gVHJ1ZQogICAgICAgICAgICB0LnN0YXJ0KCkKCiAgICAgICAgICAgICMgVGhpcyBpcyB0aGUgdHJhY2UgZnVuY3Rpb24KICAgICAgICAgICAgZGVmIGZ1bmMoZnJhbWUsIGV2ZW50LCBhcmcpOgogICAgICAgICAgICAgICAgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkKICAgICAgICAgICAgICAgIHJldHVybiBmdW5jCgogICAgICAgICAg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AFIxAAAAKAIAAABSBwAAAFKTAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RocmVhZGluZy5weVIIAAAAhgEAAHMKAAAAAAMJARIBCQETAWMDAAAAAwAAAAEAAABTAAAAcxYAAAB8AABqAAByEgB0AQCCAQBuAABkAABTKAEAAABOKAIAAABSkwAAAHQKAAAAU3lzdGVtRXhpdCgDAAAAUgcAAAB0CQAAAG90aGVyX3JlZlKSAAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RocmVhZGluZy5weVKUAAAAjwEAAHMEAAAAAAEJASgEAAAAUgwAAABSDQAAAFIIAAAAUpQAAAAoAAAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90aHJlYWRpbmcucHlSkAAAAIUBAABzBAAAAAYBCQlSkwAAAHQDAAAAbXNncxoAAAAlZCByZWZlcmVuY2VzIHN0aWxsIGFyb3VuZCgLAAAAdAYAAABvYmplY3RSVQAAAHQHAAAAd2Vha3JlZnQDAAAAcmVmUgIAAABSMgAAAFIrAAAAUi0AAABSdAAAAHQLAAAAZ2V0cmVmY291bnRSVwAAACgGAAAAUgcAAABSkAAAAHQNAAAAY3ljbGljX29iamVjdHQSAAAAd2Vha19jeWNsaWNfb2JqZWN0dBUAAAByYWlzaW5nX2N5Y2xpY19vYmplY3R0GgAAAHdlYWtfcmFpc2luZ19jeWNsaWNfb2JqZWN0KAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RocmVhZGluZy5weXQfAAAAdGVzdF9ub19yZWZjeWNsZV90aHJvdWdoX3RhcmdldIQBAABzHgAAAAABFg4PAQ8BDQEDARIBAwEUAg8BDwENAQMBEgEDAXQEAAAAZm9ya3MRAAAAdGVzdCBuZWVkcyBmb3JrKCljAQAAAAUAAAADAAAAQwAAAHNCAAAAZAEAfQEAdAAAZAIAfAEAgwIAXAMAfQIAfQMAfQQAfAAAagEAfAMAZAMAgwIAAXwAAGoBAHwEAGQDAIMCAAFkAABTKAQAAABOc4gCAABpZiAxOgogICAgICAgICAgICBpbXBvcnQgdGhyZWFkLCB0aHJlYWRpbmcsIG9zLCB0aW1lCgogICAgICAgICAgICBkZWYgYmFja2dyb3VuZF90aHJlYWQoZXZ0KToKICAgICAgICAgICAgICAgICMgQ3JlYXRlcyBhbmQgcmVnaXN0ZXJzIHRoZSBfRHVtbXlUaHJlYWQgaW5zdGFuY2UKICAgICAgICAgICAgICAgIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpCiAgICAgICAgICAgICAgICBldnQuc2V0KCkKICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMTApCgogICAgICAgICAgICBldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQogICAgICAgICAgICB0aHJlYWQuc3RhcnRfbmV3X3RocmVhZChiYWNrZ3JvdW5kX3RocmVhZCwgKGV2dCwpKQogICAgICAgICAgICBldnQud2FpdCgpCiAgICAgICAgICAgIGFzc2VydCB0aHJlYWRpbmcuYWN0aXZlX2NvdW50KCkgPT0gMiwgdGhyZWFkaW5nLmFjdGl2ZV9jb3VudCgpCiAgICAgICAgICAgIGlmIG9zLmZvcmsoKSA9PSAwOgogICAgICAgICAgICAgICAgYXNzZXJ0IHRocmVhZGluZy5hY3RpdmVfY291bnQoKSA9PSAxLCB0aHJlYWRpbmcuYWN0aXZlX2NvdW50KCkKICAgICAgICAgICAgICAgIG9zLl9leGl0KDApCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBvcy53YWl0KCkKICAgICAgICBzAgAAAC1jUoIAAAAoAgAAAFIBAAAAUisAAAAoBQAAAFIHAAAAdAQAAABjb2RldAEAAABfdAMAAABvdXR0AwAA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ICAgaW1wb3J0IG9zCiAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1qb2luaW5nZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0odGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCksKSkKICAgICAgICAgICAgdC5zdGFydCgpCiAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQogICAgICAgICAgICBwcmludCAnZW5kIG9mIG1haW4nCiAgICAgICAgICAgICgBAAAAUrUAAAAoAgAAAFIHAAAAUrMAAAAoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5dBcAAAB0ZXN0XzFfam9pbl9vbl9zaHV0ZG93btoBAABzBAAAAAAJBgFSoQAAAHMPAAAAbmVlZHMgb3MuZm9yaygpcxMAAABkdWUgdG8ga25vd24gT1MgYnVnYwEAAAACAAAAAgAAAEMAAABzFwAAAGQBAH0BAHwAAGoAAHwBAIMBAAFkAABTKAIAAABOc0YBAABpZiAxOgogICAgICAgICAgICBjaGlsZHBpZCA9IG9zLmZvcmsoKQogICAgICAgICAgICBpZiBjaGlsZHBpZCAhPSAwOgogICAgICAgICAgICAgICAgb3Mud2FpdHBpZChjaGlsZHBpZCwgMCkKICAgICAgICAgICAgICAgIHN5cy5leGl0KDApCgogICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9am9pbmluZ2Z1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLCkpCiAgICAgICAgICAgIHQuc3RhcnQoKQogICAgICAgICAgICBwcmludCAnZW5kIG9mIG1haW4nCiAgICAgICAgICAgICgBAAAAUrUAAAAoAgAAAFIHAAAAUrMAAAAoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5dB0AAAB0ZXN0XzJfam9pbl9pbl9mb3JrZWRfcHJvY2Vzc+cBAABzBAAAAAAOBgFjAQAAAAIAAAACAAAAQwAAAHMXAAAAZAEAfQEAfAAAagAAfAEAgwEAAWQAAFMoAgAAAE5zOQIAAGlmIDE6CiAgICAgICAgICAgIG1haW5fdGhyZWFkID0gdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkKICAgICAgICAgICAgZGVmIHdvcmtlcigpOgogICAgICAgICAgICAgICAgY2hpbGRwaWQgPSBvcy5mb3JrKCkKICAgICAgICAgICAgICAgIGlmIGNoaWxkcGlkICE9IDA6CiAgICAgICAgICAgICAgICAgICAgb3Mud2FpdHBpZChjaGlsZHBpZCwgMCkKICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgwKQoKICAgICAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1qb2luaW5nZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KG1haW5fdGhyZWFkLCkpCiAgICAgICAgICAgICAgICBwcmludCAnZW5kIG9mIG1haW4nCiAgICAgICAgICAgICAgICB0LnN0YXJ0KCkKICAgICAgICAgICAgICAgIHQuam9pbigpICMgU2hvdWxkIG5vdCBibG9jazogbWFpbl90aHJlYWQgaXMgYWxyZWFkeSBzdG9wcGVkCgogICAgICAgICAgICB3ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9d29ya2VyKQogICAgICAgICAgICB3LnN0YXJ0KCkKICAgICAgICAgICAgKAEAAABStQAAACgCAAAAUgcAAABSswAAACgAAAAAKAAAAABzWwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L3Rlc3QvdGVzdF90aHJlYWRpbmcucHl0IQAAAHRlc3RfM19qb2luX2luX2ZvcmtlZF9mcm9tX3RocmVhZPgBAABzBAAAAAAVBgFjAwAAAAYAAAAEAAAAQwAAAHN4AAAAdAAAagEAdAIAagMAZAEAfAEAZwMAZAIAdAAAagQAgwEBfQMAfAMAagUAgwAAfQQAfAMAagYAagcAgwAAaggAgwAAagkAZAMAZAQAgwIAfQUAfAAAagoAfAQAZAUAZAYAgwMAAXwAAGoKAHwFAHwCAIMCAAFkAABTKAcAAABOcwIAAAAtY1J4AAAAcwEAAAANUoIAAABpAAAAAHMQAAAAVW5leHBlY3RlZCBlcnJvcigLAAAAUnIAAABSegAAAFJ0AAAAUnUAAABSewAAAFJBAAAAUngAAABSsQAAAHQGAAAAZGVjb2RlUrIAAABSKwAAACgGAAAAUgcAAABSswAAAHQPAAAAZXhwZWN0ZWRfb3V0cHV0UoAAAABSdgAAAFK0AAAAKAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RocmVhZGluZy5weXQVAAAAYXNzZXJ0U2NyaXB0SGFzT3V0cHV0EAIAAHMMAAAAAAEYAQwBDAEhARMBYwEAAAACAAAAAwAAAEMAAABzGgAAAGQBAH0BAHwAAGoAAHwBAGQCAIMCAAFkAABTKAMAAABOc0QHAABpZiAxOgogICAgICAgICAgICBpbXBvcnQgb3MsIHRpbWUsIHRocmVhZGluZwoKICAgICAgICAgICAgZmluaXNoX2pvaW4gPSBGYWxzZQogICAgICAgICAgICBzdGFydF9mb3JrID0gRmFsc2UKCiAgICAgICAgICAgIGRlZiB3b3JrZXIoKToKICAgICAgICAgICAgICAgICMgV2FpdCB1bnRpbCB0aGlzIHRocmVhZCdzIGxvY2sgaXMgYWNxdWlyZWQgYmVmb3JlIGZvcmtpbmcgdG8KICAgICAgICAgICAgICAgICMgY3JlYXRlIHRoZSBkZWFkbG9jay4KICAgICAgICAgICAgICAgIGdsb2JhbCBmaW5pc2hfam9pbgogICAgICAgICAgICAgICAgd2hpbGUgbm90IHN0YXJ0X2Zvcms6CiAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQogICAgICAgICAgICAgICAgIyBMT0NLIEhFTEQ6IE1haW4gdGhyZWFkIGhvbGRzIGxvY2sgYWNyb3NzIHRoaXMgY2FsbC4KICAgICAgICAgICAgICAgIGNoaWxkcGlkID0gb3MuZm9yaygpCiAgICAgICAgICAgICAgICBmaW5pc2hfam9pbiA9IFRydWUKICAgICAgICAgICAgICAgIGlmIGNoaWxkcGlkICE9IDA6CiAgICAgICAgICAgICAgICAgICAgIyBQYXJlbnQgcHJvY2VzcyBqdXN0IHdhaXRzIGZvciBjaGlsZC4KICAgICAgICAgICAgICAgICAgICBvcy53YWl0cGlkKGNoaWxkcGlkLCAwKQogICAgICAgICAgICAgICAgIyBDaGlsZCBwcm9jZXNzIHNob3VsZCBqdXN0IHJldHVybi4KCiAgICAgICAgICAgIHcgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD13b3JrZXIpCgogICAgICAgICAgICAjIFN0dWIgb3V0IHRoZSBwcml2YXRlIGNvbmRpdGlvbiB2YXJpYWJsZSdzIGxvY2sgYWNxdWlyZSBtZXRob2QuCiAgICAgICAgICAgICMgVGhpcyBhY3F1aXJlcyB0aGUgbG9jayBhbmQgdGhlbiB3YWl0cyB1bnRpbCB0aGUgY2hpbGQgaGFzIGZvcmtlZAogICAgICAgICAgICAjIGJlZm9yZSByZXR1cm5pbmcsIHdoaWNoIHdpbGwgcmVsZWFzZSB0aGUgbG9jayBzb29uIGFmdGVyLiAgSWYKICAgICAgICAgICAgIyBzb21lb25lIGVsc2UgdHJpZXMgdG8gZml4IHRoaXMgdGVzdCBjYXNlIGJ5IGFjcXVpcmluZyB0aGlzIGxvY2sKICAgICAgICAgICAgIyBiZWZvcmUgZm9ya2luZyBpbnN0ZWFkIG9mIHJlc2V0dGluZyBpdCwgdGhlIHRlc3QgY2FzZSB3aWxsCiAgICAgICAgICAgICMgZGVhZGxvY2sgd2hlbiBpdCBzaG91bGRuJ3QuCiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHcuX2Jsb2NrCiAgICAgICAgICAgIG9yaWdfYWNxdWlyZSA9IGNvbmRpdGlvbi5hY3F1aXJlCiAgICAgICAgICAgIGNhbGxfY291bnRfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKICAgICAgICAgICAgY2FsbF9jb3VudCA9IDAKICAgICAgICAgICAgZGVmIG15X2FjcXVpcmUoKToKICAgICAgICAgICAgICAgIGdsb2JhbCBjYWxsX2NvdW50CiAgICAgICAgICAgICAgICBnbG9iYWwgc3RhcnRfZm9yawogICAgICAgICAgICAgICAgb3JpZ19hY3F1aXJlKCkgICMgTE9DSyBBQ1FVSVJFRCBIRVJFCiAgICAgICAgICAgICAgICBzdGFydF9mb3JrID0gVHJ1ZQogICAgICAgICAgICAgICAgaWYgY2FsbF9jb3VudCA9PSAwOgogICAgICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBmaW5pc2hfam9pbjoKICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKSAgIyBXT1JLRVIgVEhSRUFEIEZPUktTIEhFUkUKICAgICAgICAgICAgICAgIHdpdGggY2FsbF9jb3VudF9sb2NrOgogICAgICAgICAgICAgICAgICAgIGNhbGxfY291bnQgKz0gMQogICAgICAgICAgICBjb25kaXRpb24uYWNxdWlyZSA9IG15X2FjcXVpcmUKCiAgICAgICAgICAgIHcuc3RhcnQoKQogICAgICAgICAgICB3LmpvaW4oKQogICAgICAgICAgICBwcmludCgnZW5kIG9mIG1haW4nKQogICAgICAgICAgICBzDAAAAGVuZCBvZiBtYWluCigBAAAAUrsAAAAoAgAAAFIHAAAAUrMAAAAoAAAAACgAAAAAc1sAAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5dCsAAAB0ZXN0XzRfam9pbmluZ19hY3Jvc3NfZm9ya19pbl93b3JrZXJfdGhyZWFkGAIAAHMEAAAAAEYGAWMBAAAAAwAAAAMAAABDAAAAcyAAAABkAQB9AQBkAgB9AgB8AABqAAB8AQB8AgCDAgABZAAAUygDAAAATnMSBgAAaWYgVHJ1ZToKICAgICAgICAgICAgaW1wb3J0IG9zLCB0aW1lLCB0aHJlYWRpbmcKCiAgICAgICAgICAgIHN0YXJ0X2ZvcmsgPSBGYWxzZQoKICAgICAgICAgICAgZGVmIHdvcmtlcigpOgogICAgICAgICAgICAgICAgIyBXYWl0IHVudGlsIHRoZSBtYWluIHRocmVhZCBoYXMgYXR0ZW1wdGVkIHRvIGpvaW4gdGhpcyB0aHJlYWQKICAgICAgICAgICAgICAgICMgYmVmb3JlIGNvbnRpbnVpbmcuCiAgICAgICAgICAgICAgICB3aGlsZSBub3Qgc3RhcnRfZm9yazoKICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCiAgICAgICAgICAgICAgICBjaGlsZHBpZCA9IG9zLmZvcmsoKQogICAgICAgICAgICAgICAgaWYgY2hpbGRwaWQgIT0gMDoKICAgICAgICAgICAgICAgICAgICAjIFBhcmVudCBwcm9jZXNzIGp1c3Qgd2FpdHMgZm9yIGNoaWxkLgogICAgICAgICAgICAgICAgICAgIChjcGlkLCByYykgPSBvcy53YWl0cGlkKGNoaWxkcGlkLCAwKQogICAgICAgICAgICAgICAgICAgIGFzc2VydCBjcGlkID09IGNoaWxkcGlkCiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHJjID09IDAKICAgICAgICAgICAgICAgICAgICBwcmludCgnZW5kIG9mIHdvcmtlciB0aHJlYWQnKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAjIENoaWxkIHByb2Nlc3Mgc2hvdWxkIGp1c3QgcmV0dXJuLgogICAgICAgICAgICAgICAgICAgIHBhc3MKCiAgICAgICAgICAgIHcgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD13b3JrZXIpCgogICAgICAgICAgICAjIFN0dWIgb3V0IHRoZSBwcml2YXRlIGNvbmRpdGlvbiB2YXJpYWJsZSdzIF9yZWxlYXNlX3NhdmUgbWV0aG9kLgogICAgICAgICAgICAjIFRoaXMgcmVsZWFzZXMgdGhlIGNvbmRpdGlvbidzIGxvY2sgYW5kIGZsaXBzIHRoZSBnbG9iYWwgdGhhdAogICAgICAgICAgICAjIGNhdXNlcyB0aGUgd29ya2VyIHRvIGZvcmsuICBBdCB0aGlzIHBvaW50LCB0aGUgcHJvYmxlbWF0aWMgd2FpdGVyCiAgICAgICAgICAgICMgbG9jayBoYXMgYmVlbiBhY3F1aXJlZCBvbmNlIGJ5IHRoZSB3YWl0ZXIgYW5kIGhhcyBiZWVuIHB1dCBvbnRvCiAgICAgICAgICAgICMgdGhlIHdhaXRlcnMgbGlzdC4KICAgICAgICAgICAgY29uZGl0aW9uID0gdy5fYmxvY2sKICAgICAgICAgICAgb3JpZ19yZWxlYXNlX3NhdmUgPSBjb25kaXRpb24uX3JlbGVhc2Vfc2F2ZQogICAgICAgICAgICBkZWYgbXlfcmVsZWFzZV9zYXZlKCk6CiAgICAgICAgICAgICAgICBnbG9iYWwgc3RhcnRfZm9yawogICAgICAgICAgICAgICAgb3JpZ19yZWxlYXNlX3NhdmUoKQogICAgICAgICAgICAgICAgIyBXYWl0ZXIgbG9jayBoZWxkIGhlcmUsIGNvbmRpdGlvbiBsb2NrIHJlbGVhc2VkLgogICAgICAgICAgICAgICAgc3RhcnRfZm9yayA9IFRydWUKICAgICAgICAgICAgY29uZGl0aW9uLl9yZWxlYXNlX3NhdmUgPSBteV9yZWxlYXNlX3NhdmUKCiAgICAgICAgICAgIHcuc3RhcnQoKQogICAgICAgICAgICB3LmpvaW4oKQogICAgICAgICAgICBwcmludCgnZW5kIG9mIG1haW4gdGhyZWFkJykKICAgICAgICAgICAgcygAAABlbmQgb2Ygd29ya2VyIHRocmVhZAplbmQgb2YgbWFpbiB0aHJlYWQKKAEAAABSuwAAACgDAAAAUgcAAABSswAAAHQGAAAAb3V0cHV0KAAAAAAoAAAAAHNbAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvdGVzdC90ZXN0X3RocmVhZGluZy5weXQoAAAAdGVzdF81X2NsZWFyX3dhaXRlcl9sb2Nrc190b19hdm9pZF9jcmFzaGECAABzBgAAAAA2BgEGAWMBAAAABQAAAAQAAABDAAAAc24AAABk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