UEsDBAoAAAAAAHtYGDkAAAAAAAAAAAAAAAAJAAQATUVUQS1JTkYv/soAAFBLAwQKAAAAAAB6WBg5vGQOR2oAAABqAAAAFAAAAE1FVEEtSU5GL01BTklGRVNULk1GTWFuaWZlc3QtVmVyc2lvbjogMS4wDQpBbnQtVmVyc2lvbjogQXBhY2hlIEFudCAxLjcuMA0KQ3JlYXRlZC1CeTogMS41LjBfMDgtYjAzIChTdW4gTWljcm9zeXN0ZW1zIEluYy4pDQoNClBLAwQKAAAAAAB5WBg5AAAAAAAAAAAAAAAABAAAAG9yZy9QSwMECgAAAAAAelgYOQAAAAAAAAAAAAAAAAoAAABvcmcvam1vY2svUEsDBAoAAAAAAHlYGDkAAAAAAAAAAAAAAAAOAAAAb3JnL2ptb2NrL2FwaS9QSwMECgAAAAAAeVgYOQAAAAAAAAAAAAAAABMAAABvcmcvam1vY2svaW50ZXJuYWwvUEsDBAoAAAAAAHpYGDkAAAAAAAAAAAAAAAAbAAAAb3JnL2ptb2NrL2ludGVybmFsL21hdGNoZXIvUEsDBAoAAAAAAHpYGDkAAAAAAAAAAAAAAAAOAAAAb3JnL2ptb2NrL2xpYi9QSwMECgAAAAAAelgYOQAAAAAAAAAAAAAAABUAAABvcmcvam1vY2svbGliL2FjdGlvbi9QSwMECgAAAAAAelgYOQAAAAAAAAAAAAAAABkAAABvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvUEsDBAoAAAAAAHpYGDkAAAAAAAAAAAAAAAAiAAAAb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L2ludGVybmFsL1BLAwQKAAAAAAB5WBg5AAAAAAAAAAAAAAAAEQAAAG9yZy9qbW9jay9zeW50YXgvUEsDBAoAAAAAAHlYGDnTLIoF0y8AANMvAAAcAAAAb3JnL2ptb2NrL0V4cGVjdGF0aW9ucy5jbGFzc8r+ur4AAAAxAZ0KAFkBCQcBCgoAAgEJCQBYAQsJAFgBDAoAWAENBwEOCgAHAQkKAAcBDwsBEAERCwEQARILARMBFAsBEwEVCgAHARYLARcBGAcBGQgBGgoAEAEbCgAHARwKAR0BHgoAWAEfCgBYASALASEBIgoAWAEjCgEdASQKAR0BJQoBHQEmCgBYAScLASEBKAoAWAEpCgBYASoKAFgBKwoABwEsCgBYASwKAS0BLgoANgEvCgBYATAKATEBMgoAWAEzCgE0ATUKAFgBNgoBNwE4CgBYATkKAToBOwoAWAE8CgE9AT4KAFgBPwoBQAFBCgBYAUIKAUMBRAoAWAFFCgBYAUYKAAcBRwcBSAoANgFJBwFKCgA4AUkHAUsKADoBCQcBTAoAPAFNBwFOCgA+AQkHAU8KAEABUAcBUQoAQgFJBwFSCgBEAVMHAVQKAEYBVQoARgFWBwFXCgBJAVUKAEkBVgcBWAoATAFZBwFaCgBOAVkHAVsKAFABXAoABwFdBwFeCgBTAV8KAAcBYAoABwFhCgBYAWIHAWMHAWQHAWUHAWYHAWcHAWgBAAhidWlsZGVycwEAEExqYXZhL3V0aWwvTGlzdDsBAAlTaWduYXR1cmUBAENMamF2YS91dGlsL0xpc3Q8TG9yZy9qbW9jay9pbnRlcm5hbC9JbnZvY2F0aW9uRXhwZWN0YXRpb25CdWlsZGVyOz47AQAOY3VycmVudEJ1aWxkZXIBADFMb3JnL2ptb2NrL2ludGVybmFsL0ludm9jYXRpb25FeHBlY3RhdGlvbkJ1aWxkZXI7AQAGPGluaXQ+AQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBABhMb3JnL2ptb2NrL0V4cGVjdGF0aW9uczsBABxpbml0aWFsaXNlRXhwZWN0YXRpb25DYXB0dXJlAQAjKExvcmcvam1vY2svaW50ZXJuYWwvQ2FyZGluYWxpdHk7KVYBAAtjYXJkaW5hbGl0eQEAIExvcmcvam1vY2svaW50ZXJuYWwvQ2FyZGluYWxpdHk7AQARYnVpbGRFeHBlY3RhdGlvbnMBAEIoTG9yZy9qbW9jay9hcGkvQWN0aW9uO0xvcmcvam1vY2svaW50ZXJuYWwvRXhwZWN0YXRpb25Db2xsZWN0b3I7KVYBAAdidWlsZGVyAQACaSQBABRMamF2YS91dGlsL0l0ZXJhdG9yOwEADWRlZmF1bHRBY3Rpb24BABZMb3JnL2ptb2NrL2FwaS9BY3Rpb247AQAJY29sbGVjdG9yAQApTG9yZy9qbW9jay9pbnRlcm5hbC9FeHBlY3RhdGlvbkNvbGxlY3RvcjsBADMoKUxvcmcvam1vY2svaW50ZXJuYWwvSW52b2NhdGlvbkV4cGVjdGF0aW9uQnVpbGRlcjsBACVjaGVja0xhc3RFeHBlY3RhdGlvbldhc0Z1bGx5U3BlY2lmaWVkAQAHZXhhY3RseQEAJChJKUxvcmcvam1vY2svc3ludGF4L1JlY2VpdmVyQ2xhdXNlOwEABWNvdW50AQABSQEABW9uZU9mAQAmKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsBAAptb2NrT2JqZWN0AQASTGphdmEvbGFuZy9PYmplY3Q7AQAWTG9jYWxWYXJpYWJsZVR5cGVUYWJsZQEAA1RUOwEAHjxUOkxqYXZhL2xhbmcvT2JqZWN0Oz4oVFQ7KVRUOwEAA29uZQEAB2F0TGVhc3QBAAdiZXR3ZWVuAQAlKElJKUxvcmcvam1vY2svc3ludGF4L1JlY2VpdmVyQ2xhdXNlOwEACG1pbkNvdW50AQAIbWF4Q291bnQBAAZhdE1vc3QBAAhhbGxvd2luZwEANyhMb3JnL2hhbWNyZXN0L01hdGNoZXI7KUxvcmcvam1vY2svc3ludGF4L01ldGhvZENsYXVzZTsBABFtb2NrT2JqZWN0TWF0Y2hlcgEAFkxvcmcvaGFtY3Jlc3QvTWF0Y2hlcjsBABlMb3JnL2hhbWNyZXN0L01hdGNoZXI8Kj47AQA6KExvcmcvaGFtY3Jlc3QvTWF0Y2hlcjwqPjspTG9yZy9qbW9jay9zeW50YXgvTWV0aG9kQ2xhdXNlOwEACGlnbm9yaW5nAQAFbmV2ZXIBABNhZGRQYXJhbWV0ZXJNYXRjaGVyAQAZKExvcmcvaGFtY3Jlc3QvTWF0Y2hlcjspVgEAB21hdGNoZXIBABwoTG9yZy9oYW1jcmVzdC9NYXRjaGVyPCo+OylWAQAEd2l0aAEAKihMb3JnL2hhbWNyZXN0L01hdGNoZXI7KUxqYXZhL2xhbmcvT2JqZWN0OwEAG0xvcmcvaGFtY3Jlc3QvTWF0Y2hlcjxUVDs+OwEANjxUOkxqYXZhL2xhbmcvT2JqZWN0Oz4oTG9yZy9oYW1jcmVzdC9NYXRjaGVyPFRUOz47KVRUOwEAGShMb3JnL2hhbWNyZXN0L01hdGNoZXI7KVoBACtMb3JnL2hhbWNyZXN0L01hdGNoZXI8TGphdmEvbGFuZy9Cb29sZWFuOz47AQAuKExvcmcvaGFtY3Jlc3QvTWF0Y2hlcjxMamF2YS9sYW5nL0Jvb2xlYW47PjspWgEAGShMb3JnL2hhbWNyZXN0L01hdGNoZXI7KUIBAChMb3JnL2hhbWNyZXN0L01hdGNoZXI8TGphdmEvbGFuZy9CeXRlOz47AQArKExvcmcvaGFtY3Jlc3QvTWF0Y2hlcjxMamF2YS9sYW5nL0J5dGU7PjspQgEAGShMb3JnL2hhbWNyZXN0L01hdGNoZXI7KVMBAClMb3JnL2hhbWNyZXN0L01hdGNoZXI8TGphdmEvbGFuZy9TaG9ydDs+OwEALChMb3JnL2hhbWNyZXN0L01hdGNoZXI8TGphdmEvbGFuZy9TaG9ydDs+OylTAQAZKExvcmcvaGFtY3Jlc3QvTWF0Y2hlcjspQwEALUxvcmcvaGFtY3Jlc3QvTWF0Y2hlcjxMamF2YS9sYW5nL0NoYXJhY3Rlcjs+OwEAMChMb3JnL2hhbWNyZXN0L01hdGNoZXI8TGphdmEvbGFuZy9DaGFyYWN0ZXI7PjspQwEAGShMb3JnL2hhbWNyZXN0L01hdGNoZXI7KUkBACtMb3JnL2hhbWNyZXN0L01hdGNoZXI8TGphdmEvbGFuZy9JbnRlZ2VyOz47AQAuKExvcmcvaGFtY3Jlc3QvTWF0Y2hlcjxMamF2YS9sYW5nL0ludGVnZXI7PjspSQEAGShMb3JnL2hhbWNyZXN0L01hdGNoZXI7KUoBAChMb3JnL2hhbWNyZXN0L01hdGNoZXI8TGphdmEvbGFuZy9Mb25nOz47AQArKExvcmcvaGFtY3Jlc3QvTWF0Y2hlcjxMamF2YS9sYW5nL0xvbmc7PjspSgEAGShMb3JnL2hhbWNyZXN0L01hdGNoZXI7KUYBAClMb3JnL2hhbWNyZXN0L01hdGNoZXI8TGphdmEvbGFuZy9GbG9hdDs+OwEALChMb3JnL2hhbWNyZXN0L01hdGNoZXI8TGphdmEvbGFuZy9GbG9hdDs+OylGAQAZKExvcmcvaGFtY3Jlc3QvTWF0Y2hlcjspRAEAKkxvcmcvaGFtY3Jlc3QvTWF0Y2hlcjxMamF2YS9sYW5nL0RvdWJsZTs+OwEALShMb3JnL2hhbWNyZXN0L01hdGNoZXI8TGphdmEvbGFuZy9Eb3VibGU7PjspRAEABChaKVoBAAV2YWx1ZQEAAVoBAAQoQilCAQABQgEABChTKVMBAAFTAQAEKEMpQwEAAUMBAAQoSSlJAQAEKEopSgEAAUoBAAQoRilGAQABRgEABChEKUQBAAFEAQAEd2lsbAEAGShMb3JnL2ptb2NrL2FwaS9BY3Rpb247KVYBAAZhY3Rpb24BAAVlcXVhbAEAKihMamF2YS9sYW5nL09iamVjdDspTG9yZy9oYW1jcmVzdC9NYXRjaGVyOwEANjxUOkxqYXZhL2xhbmcvT2JqZWN0Oz4oVFQ7KUxvcmcvaGFtY3Jlc3QvTWF0Y2hlcjxUVDs+OwEABHNhbWUBAANhbnkBACkoTGphdmEvbGFuZy9DbGFzczspTG9yZy9oYW1jcmVzdC9NYXRjaGVyOwEABHR5cGUBABFMamF2YS9sYW5nL0NsYXNzOwEAFkxqYXZhL2xhbmcvQ2xhc3M8VFQ7PjsBAEk8VDpMamF2YS9sYW5nL09iamVjdDs+KExqYXZhL2xhbmcvQ2xhc3M8VFQ7PjspTG9yZy9oYW1jcmVzdC9NYXRjaGVyPFRUOz47AQAIYW55dGhpbmcBABgoKUxvcmcvaGFtY3Jlc3QvTWF0Y2hlcjsBADM8VDpMamF2YS9sYW5nL09iamVjdDs+KClMb3JnL2hhbWNyZXN0L01hdGNoZXI8VFQ7PjsBAAFhAQAUTGphdmEvbGFuZy9DbGFzczwqPjsBAApEZXByZWNhdGVkAQBAKExqYXZhL2xhbmcvQ2xhc3M8Kj47KUxvcmcvaGFtY3Jlc3QvTWF0Y2hlcjxMamF2YS9sYW5nL09iamVjdDs+OwEAGVJ1bnRpbWVWaXNpYmxlQW5ub3RhdGlvbnMBABZMamF2YS9sYW5nL0RlcHJlY2F0ZWQ7AQACYW4BAAVhTnVsbAEACGFOb25OdWxsAQALcmV0dXJuVmFsdWUBACooTGphdmEvbGFuZy9PYmplY3Q7KUxvcmcvam1vY2svYXBpL0FjdGlvbjsBAAZyZXN1bHQBAA50aHJvd0V4Y2VwdGlvbgEALShMamF2YS9sYW5nL1Rocm93YWJsZTspTG9yZy9qbW9jay9hcGkvQWN0aW9uOwEACXRocm93YWJsZQEAFUxqYXZhL2xhbmcvVGhyb3dhYmxlOwEADnJldHVybkl0ZXJhdG9yAQAuKExqYXZhL3V0aWwvQ29sbGVjdGlvbjspTG9yZy9qbW9jay9hcGkvQWN0aW9uOwEACmNvbGxlY3Rpb24BABZMamF2YS91dGlsL0NvbGxlY3Rpb247AQAZTGphdmEvdXRpbC9Db2xsZWN0aW9uPCo+OwEAMShMamF2YS91dGlsL0NvbGxlY3Rpb248Kj47KUxvcmcvam1vY2svYXBpL0FjdGlvbjsBACsoW0xqYXZhL2xhbmcvT2JqZWN0OylMb3JnL2ptb2NrL2FwaS9BY3Rpb247AQAFaXRlbXMBABNbTGphdmEvbGFuZy9PYmplY3Q7AQAEW1RUOwEAMjxUOkxqYXZhL2xhbmcvT2JqZWN0Oz4oW1RUOylMb3JnL2ptb2NrL2FwaS9BY3Rpb247AQARcmV0dXJuRW51bWVyYXRpb24BAAVkb0FsbAEALyhbTG9yZy9qbW9jay9hcGkvQWN0aW9uOylMb3JnL2ptb2NrL2FwaS9BY3Rpb247AQAHYWN0aW9ucwEAF1tMb3JnL2ptb2NrL2FwaS9BY3Rpb247AQASb25Db25zZWN1dGl2ZUNhbGxzAQAEd2hlbgEAJihMb3JnL2ptb2NrL2ludGVybmFsL1N0YXRlUHJlZGljYXRlOylWAQAJcHJlZGljYXRlAQAjTG9yZy9qbW9jay9pbnRlcm5hbC9TdGF0ZVByZWRpY2F0ZTsBAAR0aGVuAQAdKExvcmcvam1vY2svaW50ZXJuYWwvU3RhdGU7KVYBAAVzdGF0ZQEAGkxvcmcvam1vY2svaW50ZXJuYWwvU3RhdGU7AQAKaW5TZXF1ZW5jZQEAFyhMb3JnL2ptb2NrL1NlcXVlbmNlOylWAQAIc2VxdWVuY2UBABRMb3JnL2ptb2NrL1NlcXVlbmNlOwEAC2luU2VxdWVuY2VzAQAYKFtMb3JnL2ptb2NrL1NlcXVlbmNlOylWAQAEYXJyJAEAFVtMb3JnL2ptb2NrL1NlcXVlbmNlOwEABGxlbiQBAAlzZXF1ZW5jZXMBAApTb3VyY2VGaWxlAQARRXhwZWN0YXRpb25zLmphdmEMAGQAZQEAE2phdmEvdXRpbC9BcnJheUxpc3QMAF4AXwwAYgBjDAB5AGUBAC9vcmcvam1vY2svaW50ZXJuYWwvSW52b2NhdGlvbkV4cGVjdGF0aW9uQnVpbGRlcgwBaQBsBwFqDAFrAWwMAW0BbgcBbwwBcAFxDAFyAXMMAXQBdQcBdgwBawF3AQAfamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbgEAbG5vIGV4cGVjdGF0aW9ucyBoYXZlIGJlZW4gc3BlY2lmaWVkIChkaWQgeW91IGZvcmdldCB0byB0byBzcGVjaWZ5IHRoZSBjYXJkaW5hbGl0eSBvZiB0aGUgZmlyc3QgZXhwZWN0YXRpb24/KQwAZAF4DAF5AGUHAXoMAHoBewwAawBsDAB6AHsHAXwMAX0AfwwAfgB/DACGAXsMAIcBfgwAiwF7DACGAHsMAX0AjQwAjAB/DACMAI0MAGIAeAwAlACVBwF/DAGAAYEMAYIAyAwAmACcBwGDDAGAAYQMAJgAnwcBhQwBgAGGDACYAKIHAYcMAYABiAwAmAClBwGJDAGAAYoMAJgAqAcBiwwBgAGMDACYAKsHAY0MAYABjgwAmACuBwGPDAGAAZAMAJgAsQwAmACZDAGRAMUBABlvcmcvaGFtY3Jlc3QvY29yZS9Jc0VxdWFsDABkAZIBABhvcmcvaGFtY3Jlc3QvY29yZS9Jc1NhbWUBABxvcmcvaGFtY3Jlc3QvY29yZS9Jc0FueXRoaW5nAQAeb3JnL2hhbWNyZXN0L2NvcmUvSXNJbnN0YW5jZU9mDABkAZMBABhvcmcvaGFtY3Jlc3QvY29yZS9Jc051bGwBABdvcmcvaGFtY3Jlc3QvY29yZS9Jc05vdAwAZACVAQAmb3JnL2ptb2NrL2xpYi9hY3Rpb24vUmV0dXJuVmFsdWVBY3Rpb24BACBvcmcvam1vY2svbGliL2FjdGlvbi9UaHJvd0FjdGlvbgwAZAGUAQApb3JnL2ptb2NrL2xpYi9hY3Rpb24vUmV0dXJuSXRlcmF0b3JBY3Rpb24MAGQBlQwAZAGWAQAsb3JnL2ptb2NrL2xpYi9hY3Rpb24vUmV0dXJuRW51bWVyYXRpb25BY3Rpb24BACBvcmcvam1vY2svbGliL2FjdGlvbi9Eb0FsbEFjdGlvbgwAZAGXAQAjb3JnL2ptb2NrL2xpYi9hY3Rpb24vQWN0aW9uU2VxdWVuY2UBACxvcmcvam1vY2svaW50ZXJuYWwvSW5TdGF0ZU9yZGVyaW5nQ29uc3RyYWludAwAZAD2DAGYAZkBAChvcmcvam1vY2svaW50ZXJuYWwvQ2hhbmdlU3RhdGVTaWRlRWZmZWN0DABkAPoMAZoBmwwBnAD+DAD9AP4BABZvcmcvam1vY2svRXhwZWN0YXRpb25zAQAQamF2YS9sYW5nL09iamVjdAEAJW9yZy9qbW9jay9pbnRlcm5hbC9FeHBlY3RhdGlvbkJ1aWxkZXIBACJvcmcvam1vY2svc3ludGF4L0NhcmRpbmFsaXR5Q2xhdXNlAQAqb3JnL2ptb2NrL3N5bnRheC9Bcmd1bWVudENvbnN0cmFpbnRQaHJhc2VzAQAdb3JnL2ptb2NrL3N5bnRheC9BY3Rpb25DbGF1c2UBAA5zZXRDYXJkaW5hbGl0eQEADmphdmEvdXRpbC9MaXN0AQADYWRkAQAVKExqYXZhL2xhbmcvT2JqZWN0OylaAQAIaXRlcmF0b3IBABYoKUxqYXZhL3V0aWwvSXRlcmF0b3I7AQASamF2YS91dGlsL0l0ZXJhdG9yAQAHaGFzTmV4dAEAAygpWgEABG5leHQBABQoKUxqYXZhL2xhbmcvT2JqZWN0OwEADXRvRXhwZWN0YXRpb24BADMoTG9yZy9qbW9jay9hcGkvQWN0aW9uOylMb3JnL2ptb2NrL2FwaS9FeHBlY3RhdGlvbjsBACdvcmcvam1vY2svaW50ZXJuYWwvRXhwZWN0YXRpb25Db2xsZWN0b3IBAB4oTG9yZy9qbW9jay9hcGkvRXhwZWN0YXRpb247KVYBABUoTGphdmEvbGFuZy9TdHJpbmc7KVYBABZjaGVja1dhc0Z1bGx5U3BlY2lmaWVkAQAeb3JnL2ptb2NrL2ludGVybmFsL0NhcmRpbmFsaXR5AQAjKEkpTG9yZy9qbW9jay9pbnRlcm5hbC9DYXJkaW5hbGl0eTsBAB9vcmcvam1vY2svc3ludGF4L1JlY2VpdmVyQ2xhdXNlAQACb2YBACQoSUkpTG9yZy9qbW9jay9pbnRlcm5hbC9DYXJkaW5hbGl0eTsBABFqYXZhL2xhbmcvQm9vbGVhbgEAB3ZhbHVlT2YBABYoWilMamF2YS9sYW5nL0Jvb2xlYW47AQAHZXF1YWxUbwEADmphdmEvbGFuZy9CeXRlAQATKEIpTGphdmEvbGFuZy9CeXRlOwEAD2phdmEvbGFuZy9TaG9ydAEAFChTKUxqYXZh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U3RyaW5nOylWAQAIdG9TdHJpbmcBABQoKUxqYXZhL2xhbmcvU3RyaW5nOwEABmludm9rZQEALihMb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uOylMamF2YS9sYW5nL09iamVjdDsBAAppbnZvY2F0aW9uAQAaTG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbjsBAApFeGNlcHRpb25zBwBGAQAUY2FwdHVyZUV4cGVjdGF0aW9uVG8BADsoTG9yZy9qbW9jay9pbnRlcm5hbC9FeHBlY3RhdGlvbkNhcHR1cmU7KUxqYXZhL2xhbmcvT2JqZWN0OwEAB2NhcHR1cmUBACdMb3JnL2ptb2NrL2ludGVybmFsL0V4cGVjdGF0aW9uQ2FwdHVyZTsBAApTb3VyY2VGaWxlAQAMTW9ja2VyeS5qYXZhDAAYABkMABoARwwAFgAXDAASABMHAEgMAEkASgwASwBMAQAxb3JnL2ptb2NrL2ludGVybmFsL09iamVjdE1ldGhvZEV4cGVjdGF0aW9uQm91bmNlcgEANG9yZy9qbW9jay9pbnRlcm5hbC9JbnZvY2F0aW9uVG9FeHBlY3RhdGlvblRyYW5zbGF0b3IMAE0ATgwAGgBPDAAaAFABAA9qYXZhL2xhbmcvQ2xhc3MHAFEMAFIAUwEAHG9yZy9qbW9jay9Nb2NrZXJ5JE1vY2tPYmplY3QBABBqYXZhL2xhbmcvT2JqZWN0AQAXb3JnL2ptb2NrL2FwaS9JbnZva2FibGUBACFvcmcvam1vY2svaW50ZXJuYWwvQ2FwdHVyZUNvbnRyb2wBABNqYXZhL2xhbmcvVGhyb3dhYmxlAQADKClWAQARb3JnL2ptb2NrL01vY2tlcnkBAAphY2Nlc3MkMDAwAQBBKExvcmcvam1vY2svTW9ja2VyeTtMb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uOylMamF2YS9sYW5nL09iamVjdDsBAAphY2Nlc3MkMjAwAQAxKExvcmcvam1vY2svTW9ja2VyeTspTG9yZy9qbW9jay9hcGkvSW1wb3N0ZXJpc2VyOwEACmFjY2VzcyQxMDABAEIoTG9yZy9qbW9jay9Nb2NrZXJ5OylMb3JnL2ptb2NrL2ludGVybmFsL1JldHVybkRlZmF1bHRWYWx1ZUFjdGlvbjsBAEAoTG9yZy9qbW9jay9pbnRlcm5hbC9FeHBlY3RhdGlvbkNhcHR1cmU7TG9yZy9qbW9jay9hcGkvQWN0aW9uOylWAQAcKExvcmcvam1vY2svYXBpL0ludm9rYWJsZTspVgEAGm9yZy9qbW9jay9hcGkvSW1wb3N0ZXJpc2VyAQALaW1wb3N0ZXJpc2UBAFAoTG9yZy9qbW9jay9hcGkvSW52b2thYmxlO0xqYXZhL2xhbmcvQ2xhc3M7W0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvT2JqZWN0OwAgAA4ADwACABAAEQADAAIAEgATAAEAFAAAAAIAFQACABYAFwAAEBAAGAAZAAAABAABABoAGwACABwAAABwAAIABAAAABQqK7UAASq3AAIqLbUAAyostQAEsQAAAAMAHQAAABIABAAAAPcACQD4AA4A+QATAPoAHgAAACAAAwAAABQAHwAiAAAAAAAUABIAEwACAAAAFAAWABcAAwAjAAAADAABAAAAFAASABUAAgAUAAAAAgAkAAEAJQAmAAEAHAAAAC8AAQABAAAABSq0AAOwAAAAAgAdAAAABgABAAAA/gAeAAAADAABAAAABQAfACIAAAABACcAKAACABwAAAA9AAIAAgAAAAkqtAABK7gABbAAAAACAB0AAAAGAAEAAAECAB4AAAAWAAIAAAAJAB8AIgAAAAAACQApACoAAQArAAAABAABACwAAQAtAC4AAQAcAAAAXwAHAAIAAAArKrQAAbgABrsAB1m7AAhZKyq0AAG4AAm3AAq3AAsqtAAEA70ADLkADQQAsAAAAAIAHQAAAAYAAQAAAQYAHgAAABYAAgAAACsAHwAiAAAAAAArAC8AMAABAAIAMQAAAAIAMgAhAAAACgABAA4ANwAgAAJQSwMECgAAAAAAeVgYOWza0UH2HAAA9hwAABcAAABvcmcvam1vY2svTW9ja2VyeS5jbGFzc8r+ur4AAAAxASkJAEkAqQkASQCqCgBJAKsKAEoArAcArQoABQCsCQBJAK4JAK8AsAkAsQCyCQBJALMJALQAtQkASQC2BwC3CgANALgHALkKAA8ArAkASQC6CQBJALsHALwKABMArAkASQC9CgANAL4KAA0AvwsAwADBCgBJAMILAMMAxAcAxQcAxgoAHACsCADHCgAcAMgIAMkKABwAygoAGwDLBwDMCgAjAM0LAMMAzgcAzwcA0AcA0QoAJwDSCgAmANMHANQLANUA1gcA1woALQDLCgAPANgLANkA2goADwDbCgAPANwHAN0IAN4KADMA3wsA4ADhCwDiAOMIAOQLAOIA5QsA5gDnCADoCADpCADqCwDiAOsKAA8AqwsA5gDOCgBJAOwKADMA7QoARADuBwDvCgAzAPAJADMA8QoAMwDyCgAzAO4HAPMHAPQHAPUBAApNb2NrT2JqZWN0AQAMSW5uZXJDbGFzc2VzAQAJbW9ja05hbWVzAQAPTGphdmEvdXRpbC9TZXQ7AQAJU2lnbmF0dXJlAQAjTGphdmEvdXRpbC9TZXQ8TGphdmEvbGFuZy9TdHJpbmc7PjsBAAxpbXBvc3RlcmlzZXIBABxMb3JnL2ptb2NrL2FwaS9JbXBvc3RlcmlzZXI7AQAaZXhwZWN0YXRpb25FcnJvclRyYW5zbGF0b3IBACpMb3JnL2ptb2NrL2FwaS9FeHBlY3RhdGlvbkVycm9yVHJhbnNsYXRvcjsBAAxuYW1pbmdTY2hlbWUBACZMb3JnL2ptb2NrL2FwaS9Nb2NrT2JqZWN0TmFtaW5nU2NoZW1lOwEADWRlZmF1bHRBY3Rpb24BAC1Mb3JnL2ptb2NrL2ludGVybmFsL1JldHVybkRlZmF1bHRWYWx1ZUFjdGlvbjsBAApkaXNwYXRjaGVyAQApTG9yZy9qbW9jay9pbnRlcm5hbC9JbnZvY2F0aW9uRGlzcGF0Y2hlcjsBAApmaXJzdEVycm9yAQAVTGphdmEvbGFuZy9UaHJvd2FibGU7AQARYWN0dWFsSW52b2NhdGlvbnMBABBMamF2YS91dGlsL0xpc3Q7AQAsTGphdmEvdXRpbC9MaXN0PExvcmcvam1vY2svYXBpL0ludm9jYXRpb247PjsBAAY8aW5pdD4BAAMoKVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAE0xvcmcvam1vY2svTW9ja2VyeTsBABdzZXREZWZhdWx0UmVzdWx0Rm9yVHlwZQEAJihMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvT2JqZWN0OylWAQAEdHlwZQEAEUxqYXZhL2xhbmcvQ2xhc3M7AQAGcmVzdWx0AQASTGphdmEvbGFuZy9PYmplY3Q7AQAWTG9jYWxWYXJpYWJsZVR5cGVUYWJsZQEAFExqYXZhL2xhbmcvQ2xhc3M8Kj47AQApKExqYXZhL2xhbmcvQ2xhc3M8Kj47TGphdmEvbGFuZy9PYmplY3Q7KVYBAA9zZXRJbXBvc3RlcmlzZXIBAB8oTG9yZy9qbW9jay9hcGkvSW1wb3N0ZXJpc2VyOylWAQAPc2V0TmFtaW5nU2NoZW1lAQApKExvcmcvam1vY2svYXBpL01vY2tPYmplY3ROYW1pbmdTY2hlbWU7KVYBAB1zZXRFeHBlY3RhdGlvbkVycm9yVHJhbnNsYXRvcgEALShMb3JnL2ptb2NrL2FwaS9FeHBlY3RhdGlvbkVycm9yVHJhbnNsYXRvcjspVgEABG1vY2sBACUoTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9PYmplY3Q7AQAKdHlwZVRvTW9jawEAFkxqYXZhL2xhbmcvQ2xhc3M8VFQ7PjsBADE8VDpMamF2YS9sYW5nL09iamVjdDs+KExqYXZhL2xhbmcvQ2xhc3M8VFQ7PjspVFQ7AQA3KExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvT2JqZWN0OwEABG5hbWUBABJMamF2YS9sYW5nL1N0cmluZzsBAB5Mb3JnL2ptb2NrL01vY2tlcnkkTW9ja09iamVjdDsBAAlpbnZva2FibGUBACpMb3JnL2ptb2NrL2ludGVybmFsL1Byb3hpZWRPYmplY3RJZGVudGl0eTsBAEM8VDpMamF2YS9sYW5nL09iamVjdDs+KExqYXZhL2xhbmcvQ2xhc3M8VFQ7PjtMamF2YS9sYW5nL1N0cmluZzspVFQ7AQAIc2VxdWVuY2UBACgoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvam1vY2svU2VxdWVuY2U7AQAGc3RhdGVzAQAmKExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL2ptb2NrL1N0YXRlczsBAAhjaGVja2luZwEAKihMb3JnL2ptb2NrL2ludGVybmFsL0V4cGVjdGF0aW9uQnVpbGRlcjspVgEADGV4cGVjdGF0aW9ucwEAJ0xvcmcvam1vY2svaW50ZXJuYWwvRXhwZWN0YXRpb25CdWlsZGVyOwEADmFkZEV4cGVjdGF0aW9uAQAeKExvcmcvam1vY2svYXBpL0V4cGVjdGF0aW9uOylWAQALZXhwZWN0YXRpb24BABtMb3JnL2ptb2NrL2FwaS9FeHBlY3RhdGlvbjsBABFhc3NlcnRJc1NhdGlzZmllZAEACmRlc2NyaWJlVG8BAB0oTG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbjspVgEAC2Rlc2NyaXB0aW9uAQAaTG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbjsBAAhkaXNwYXRjaAEALihMb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uOylMamF2YS9sYW5nL09iamVjdDsBAAFlAQAgTG9yZy9qbW9jay9hcGkvRXhwZWN0YXRpb25FcnJvcjsBAAF0AQAKaW52b2NhdGlvbgEAGkxvcmcvam1vY2svYXBpL0ludm9jYXRpb247AQAKRXhjZXB0aW9ucwEADWZpbGxJbkRldGFpbHMBAEIoTG9yZy9qbW9jay9hcGkvRXhwZWN0YXRpb25FcnJvcjspTG9yZy9qbW9jay9hcGkvRXhwZWN0YXRpb25FcnJvcjsBAAhmaWxsZWRJbgEACmFjY2VzcyQwMDABAEEoTG9yZy9qbW9jay9Nb2NrZXJ5O0xvcmcvam1vY2svYXBpL0ludm9jYXRpb247KUxqYXZhL2xhbmcvT2JqZWN0OwEAAngwAQACeDEBAAphY2Nlc3MkMTAwAQBCKExvcmcvam1vY2svTW9ja2VyeTspTG9yZy9qbW9jay9pbnRlcm5hbC9SZXR1cm5EZWZhdWx0VmFsdWVBY3Rpb247AQAKYWNjZXNzJDIwMAEAMShMb3JnL2ptb2NrL01vY2tlcnk7KUxvcmcvam1vY2svYXBpL0ltcG9zdGVyaXNlcjsBAApTb3VyY2VGaWxlAQAMTW9ja2VyeS5qYXZhDABSAFMMAFgAWQwAlACVDABhAGIBABFqYXZhL3V0aWwvSGFzaFNldAwATgBPBwD2DAD3AFMHAPgMAPcA+QwAVABVBwD6DAD3APsMAFYAVwEAK29yZy9qbW9jay9pbnRlcm5hbC9SZXR1cm5EZWZhdWx0VmFsdWVBY3Rpb24MAGEAcgEAJ29yZy9qbW9jay9pbnRlcm5hbC9JbnZvY2F0aW9uRGlzcGF0Y2hlcgwAWgBbDABcAF0BABNqYXZhL3V0aWwvQXJyYXlMaXN0DABeAF8MAPwAaQwAcQByBwD9DAD+AP8MAHcAfAcBAAwBAQECAQAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgEAF2phdmEvbGFuZy9TdHJpbmdCdWlsZGVyAQARYSBtb2NrIHdpdGggbmFtZSAMAQMBBAEADyBhbHJlYWR5IGV4aXN0cwwBBQEGDABhAQcBABxvcmcvam1vY2svTW9ja2VyeSRNb2NrT2JqZWN0DABhAQgMAQkBAgEAKG9yZy9qbW9jay9pbnRlcm5hbC9Qcm94aWVkT2JqZWN0SWRlbnRpdHkBACVvcmcvam1vY2svaW50ZXJuYWwvSW52b2NhdGlvbkRpdmVydGVyAQAhb3JnL2ptb2NrL2ludGVybmFsL0NhcHR1cmVDb250cm9sDABhAQoMAGEBCwEAD2phdmEvbGFuZy9DbGFzcwcBDAwBDQEOAQAgb3JnL2ptb2NrL2ludGVybmFsL05hbWVkU2VxdWVuY2UMAQ8BEAcBEQwBEgETDAEJAIwMARQBFQEAHm9yZy9qbW9jay9hcGkvRXhwZWN0YXRpb25FcnJvcgEAI25vdCBhbGwgZXhwZWN0YXRpb25zIHdlcmUgc2F0aXNmaWVkDABhARYHARcMARgBGQcBGgwBGwEcAQAbCndoYXQgaGFwcGVuZWQgYmVmb3JlIHRoaXM6DAEdAR4HAR8MASABFQEACSBub3RoaW5nIQEAAwogIAEAAQoMASEBIgwAnACdDAEjASQMASUBJgEAE2phdmEvbGFuZy9UaHJvd2FibGUMAScBBgwAmQCaDABhASgBABFvcmcvam1vY2svTW9ja2VyeQEAEGphdmEvbGFuZy9PYmplY3QBABtvcmcvaGFtY3Jlc3QvU2VsZkRlc2NyaWJpbmcBAChvcmcvam1vY2svbGliL0phdmFSZWZsZWN0aW9uSW1wb3N0ZXJpc2VyAQAISU5TVEFOQ0UBADBvcmcvam1vY2svbGliL0lkZW50aXR5RXhwZWN0YXRpb25FcnJvclRyYW5zbGF0b3IBADJMb3JnL2ptb2NrL2xpYi9JZGVudGl0eUV4cGVjdGF0aW9uRXJyb3JUcmFuc2xhdG9yOwEAI29yZy9qbW9jay9saWIvQ2FtZWxDYXNlTmFtaW5nU2NoZW1lAQAlTG9yZy9qbW9jay9saWIvQ2FtZWxDYXNlTmFtaW5nU2NoZW1lOwEACWFkZFJlc3VsdAEAJG9yZy9qbW9jay9hcGkvTW9ja09iamVjdE5hbWluZ1NjaGVtZQEADmRlZmF1bHROYW1lRm9yAQAlKExqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvU3RyaW5nOwEADWphdmEvdXRpbC9TZXQBAAhjb250YWlucwEAFShMamF2YS9sYW5nL09iamVjdDspWgEABmFwcGVuZAEALShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOwEACHRvU3RyaW5nAQAUKClMamF2YS9sYW5nL1N0cmluZzsBABUoTGphdmEvbGFuZy9TdHJpbmc7KVYBADkoTG9yZy9qbW9jay9Nb2NrZXJ5O0xqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9TdHJpbmc7KVYBAANhZGQBAD8oTGphdmEvbGFuZy9DbGFzcztMamF2YS9sYW5nL09iamVjdDtMb3JnL2ptb2NrL2FwaS9JbnZva2FibGU7KVYBABwoTG9yZy9qbW9jay9hcGkvSW52b2thYmxlOylWAQAab3JnL2ptb2NrL2FwaS9JbXBvc3RlcmlzZXIBAAtpbXBvc3RlcmlzZQEAUChMb3JnL2ptb2NrL2FwaS9JbnZva2FibGU7TGphdmEvbGFuZy9DbGFzcztbTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9PYmplY3Q7AQAPbmV3U3RhdGVNYWNoaW5lAQA1KExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL2ptb2NrL2ludGVybmFsL1N0YXRlTWFjaGluZTsBACVvcmcvam1vY2svaW50ZXJuYWwvRXhwZWN0YXRpb25CdWlsZGVyAQARYnVpbGRFeHBlY3RhdGlvbnMBAEIoTG9yZy9qbW9jay9hcGkvQWN0aW9uO0xvcmcvam1vY2svaW50ZXJuYWwvRXhwZWN0YXRpb25Db2xsZWN0b3I7KVYBAAtpc1NhdGlzZmllZAEAAygpWgEAMihMamF2YS9sYW5nL1N0cmluZztMb3JnL2hhbWNyZXN0L1NlbGZEZXNjcmliaW5nOylWAQAob3JnL2ptb2NrL2FwaS9FeHBlY3RhdGlvbkVycm9yVHJhbnNsYXRvcgEACXRyYW5zbGF0ZQEAMyhMb3JnL2ptb2NrL2FwaS9FeHBlY3RhdGlvbkVycm9yOylMamF2YS9sYW5nL0Vycm9yOwEAGG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbgEAE2FwcGVuZERlc2NyaXB0aW9uT2YBADkoTG9yZy9oYW1jcmVzdC9TZWxmRGVzY3JpYmluZzspTG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbjsBAAphcHBlbmRUZXh0AQAuKExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOwEADmphdmEvdXRpbC9MaXN0AQAHaXNFbXB0eQEACmFwcGVuZExpc3QBAGYoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9JdGVyYWJsZTspTG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbjsBAA1nZXRTdGFja1RyYWNlAQAgKClbTGphdmEvbGFuZy9TdGFja1RyYWNlRWxlbWVudDsBAA1zZXRTdGFja1RyYWNlAQAhKFtMamF2YS9sYW5nL1N0YWNrVHJhY2VFbGVtZW50OylWAQAKZ2V0TWVzc2FnZQEATChMamF2YS9sYW5nL1N0cmluZztMb3JnL2hhbWNyZXN0L1NlbGZEZXNjcmliaW5nO0xvcmcvam1vY2svYXBpL0ludm9jYXRpb247KVYAIQBJAEoAAQBLAAgAAgBOAE8AAQBQAAAAAgBRAAIAUgBTAAAAAgBUAFUAAAACAFYAVwAAAAIAWABZAAAAAgBaAFsAAAACAFwAXQAAAAIAXgBfAAEAUAAAAAIAYAASAAEAYQBiAAEAYwAAAJ0ABAABAAAATyq3AAQquwAFWbcABrUAByqyAAi1AAEqsgAJtQAKKrIAC7UADCq7AA1ZKrQAAbcADrUAAiq7AA9ZtwAQtQARKgG1ABIquwATWbcAFLUAFbEAAAACAGQAAAAqAAoAAAArAAQALAAPAC0AFgAuAB0ALwAkADEAMwAzAD4ANABDADYATgDzAGUAAAAMAAEAAABPAGYAZwAAAAEAaABpAAIAYwAAAF4AAwADAAAACiq0AAIr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AAArAGUAAAAMAAEAAAAFAKEAZwAAAAIApwAAAAIAqABNAAAACgABACMASQBMAAJQSwMECgAAAAAAeVgYOSBldxS/AAAAvwAAABgAAABvcmcvam1vY2svU2VxdWVuY2UuY2xhc3PK/rq+AAAAMQAJBwAHBwAIAQAZY29uc3RyYWluQXNOZXh0SW5TZXF1ZW5jZQEALShMb3JnL2ptb2NrL2ludGVybmFsL0ludm9jYXRpb25FeHBlY3RhdGlvbjspVgEAClNvdXJjZUZpbGUBAA1TZXF1ZW5jZS5qYXZhAQASb3JnL2ptb2NrL1NlcXVlbmNlAQAQamF2YS9sYW5nL09iamVjdAYBAAEAAgAAAAAAAQQBAAMABAAAAAEABQAAAAIABlBLAwQKAAAAAAB5WBg5XTdxNRQBAAAUAQAAFgAAAG9yZy9qbW9jay9TdGF0ZXMuY2xhc3PK/rq+AAAAMQAPBwALBwAMBwANBwAOAQAIc3RhcnRzQXMBACYoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvam1vY2svU3RhdGVzOwEABmJlY29tZQEAFShMamF2YS9sYW5nL1N0cmluZzspVgEAClNvdXJjZUZpbGUBAAtTdGF0ZXMuamF2YQEAEG9yZy9qbW9jay9TdGF0ZXMBABBqYXZhL2xhbmcvT2JqZWN0AQAbb3JnL2hhbWNyZXN0L1NlbGZEZXNjcmliaW5nAQAdb3JnL2ptb2NrL3N5bnRheC9TdGF0ZXNDbGF1c2UGAQABAAIAAgADAAQAAAACBAEABQAGAAAEAQAHAAgAAAABAAkAAAACAApQSwMECgAAAAAAeVgYOVid9m2tAAAArQAAABoAAABvcmcvam1vY2svYXBpL0FjdGlvbi5jbGFzc8r+ur4AAAAxAAsHAAcHAAgHAAkHAAoBAApTb3VyY2VGaWxlAQALQWN0aW9uLmphdmEBABRvcmcvam1vY2svYXBpL0FjdGlvbgEAEGphdmEvbGFuZy9PYmplY3QBABtvcmcvaGFtY3Jlc3QvU2VsZkRlc2NyaWJpbmcBABdvcmcvam1vY2svYXBpL0ludm9rYWJsZQYBAAEAAgACAAMABAAAAAAAAQAFAAAAAgAGUEsDBAoAAAAAAHlYGDl/SnXCeAEAAHgBAAAfAAAAb3JnL2ptb2NrL2FwaS9FeHBlY3RhdGlvbi5jbGFzc8r+ur4AAAAxABMHAA8HABAHABEBAAtpc1NhdGlzZmllZAEAAygpWgEAFWFsbG93c01vcmVJbnZvY2F0aW9ucwEAB21hdGNoZXMBAB0oTG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbjspWgEABmludm9rZQEALihMb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uOylMamF2YS9sYW5nL09iamVjdDsBAApFeGNlcHRpb25zBwASAQAKU291cmNlRmlsZQEAEEV4cGVjdGF0aW9uLmphdmEBABlvcmcvam1vY2svYXBpL0V4cGVjdGF0aW9uAQAQamF2YS9sYW5nL09iamVjdAEAG29yZy9oYW1jcmVzdC9TZWxmRGVzY3JpYmluZwEAE2phdmEvbGFuZy9UaHJvd2FibGUGAQABAAIAAQADAAAABAQBAAQABQAABAEABgAFAAAEAQAHAAgAAAQBAAkACgABAAsAAAAEAAEADAABAA0AAAACAA5QSwMECgAAAAAAeVgYOePfBuMQBgAAEAYAACQAAABvcmcvam1vY2svYXBpL0V4cGVjdGF0aW9uRXJyb3IuY2xhc3PK/rq+AAAAMQA+CgANACYJAAwAJwkADAAoCgAMACkKACoAKwoADAAsCwAtAC4IAC8KADAAMQgAMgsADgAxBwAzBwA0BwA1AQAMZXhwZWN0YXRpb25zAQAdTG9yZy9oYW1jcmVzdC9TZWxmRGVzY3JpYmluZzsBAAppbnZvY2F0aW9uAQAaTG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbjsBAAY8aW5pdD4BAEwoTGphdmEvbGFuZy9TdHJpbmc7TG9yZy9oYW1jcmVzdC9TZWxmRGVzY3JpYmluZztMb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uOylWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBACBMb3JnL2ptb2NrL2FwaS9FeHBlY3RhdGlvbkVycm9yOwEAB21lc3NhZ2UBABJMamF2YS9sYW5nL1N0cmluZzsBAC8oTGphdmEvbGFuZy9TdHJpbmc7TG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbjspVgEAMihMamF2YS9sYW5nL1N0cmluZztMb3JnL2hhbWNyZXN0L1NlbGZEZXNjcmliaW5nOylWAQAIdG9TdHJpbmcBABQoKUxqYXZhL2xhbmcvU3RyaW5nOwEACmRlc2NyaWJlVG8BAB0oTG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbjspVgEAC2Rlc2NyaXB0aW9uAQAaTG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbjsBAApTb3VyY2VGaWxlAQAVRXhwZWN0YXRpb25FcnJvci5qYXZhDAATADYMABEAEgwADwAQDAATABQHADcMAB4AOAwAOQAfBwA6DAA7ADwBAAI6IAcAPQwAIAAhAQABCgEAHm9yZy9qbW9jay9hcGkvRXhwZWN0YXRpb25FcnJvcgEAD2phdmEvbGFuZy9FcnJvcgEAG29yZy9oYW1jcmVzdC9TZWxmRGVzY3JpYmluZwEAFShMamF2YS9sYW5nL1N0cmluZzspVgEAHm9yZy9oYW1jcmVzdC9TdHJpbmdEZXNjcmlwdGlvbgEAMShMb3JnL2hhbWNyZXN0L1NlbGZEZXNjcmliaW5nOylMamF2YS9sYW5nL1N0cmluZzsBAApnZXRNZXNzYWdlAQAYb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uAQAKYXBwZW5kVGV4dAEALihMamF2YS9sYW5nL1N0cmluZzspTG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbjsBABhvcmcvam1vY2svYXBpL0ludm9jYXRpb24AIQAMAA0AAQAOAAIAEQAPABAAAAARABEAEgAAAAUAAQATABQAAQAVAAAAZAACAAQAAAAQKiu3AAEqLbUAAiostQADsQAAAAIAFgAAABIABAAAABEABQASAAoAEwAPABQAFwAAACoABAAAABAAGAAZAAAAAAAQABoAGwABAAAAEAAPABAAAgAAABAAEQASAAMAAQATABwAAQAVAAAASgAEAAMAAAAIKisBLLcABLEAAAACABYAAAAKAAIAAAAXAAcAGAAXAAAAIAADAAAACAAYABkAAAAAAAgAGgAbAAEAAAAIABEAEgACAAEAEwAdAAEAFQAAAEoABAADAAAACCorLAG3AASxAAAAAgAWAAAACgACAAAAGwAHABwAFwAAACAAAwAAAAgAGAAZAAAAAAAIABoAGwABAAAACAAPABAAAgABAB4AHwABABUAAAAvAAEAAQAAAAUquAAFsAAAAAIAFgAAAAYAAQAAACAAFwAAAAwAAQAAAAUAGAAZAAAAAQAgACEAAQAVAAAAjgACAAIAAAA+Kyq2AAa5AAcCAFcqtAACxgAUKxIIuQAHAgBXKrQAAiu2AAkqtAADxgAWKxIKuQAHAgBXKrQAAyu5AAsCALEAAAACABYAAAAiAAgAAAAkAAsAJQASACYAGwAnACMAKQAqACoAMwArAD0ALQAXAAAAFgACAAAAPgAYABkAAAAAAD4AIgAjAAEAAQAkAAAAAgAlUEsDBAoAAAAAAHlYGDne63743QAAAN0AAAAuAAAAb3JnL2ptb2NrL2FwaS9FeHBlY3RhdGlvbkVycm9yVHJhbnNsYXRvci5jbGFzc8r+ur4AAAAxAAkHAAcHAAgBAAl0cmFuc2xhdGUBADMoTG9yZy9qbW9jay9hcGkvRXhwZWN0YXRpb25FcnJvcjspTGphdmEvbGFuZy9FcnJvcjsBAApTb3VyY2VGaWxlAQAfRXhwZWN0YXRpb25FcnJvclRyYW5zbGF0b3IuamF2YQEAKG9yZy9qbW9jay9hcGkvRXhwZWN0YXRpb25FcnJvclRyYW5zbGF0b3IBABBqYXZhL2xhbmcvT2JqZWN0BgEAAQACAAAAAAABBAEAAwAEAAAAAQAFAAAAAgAGUEsDBAoAAAAAAHlYGDmzAJAPqAEAAKgBAAAgAAAAb3JnL2ptb2NrL2FwaS9JbXBvc3RlcmlzZXIuY2xhc3PK/rq+AAAAMQAOBwAMBwANAQAOY2FuSW1wb3N0ZXJpc2UBABQoTGphdmEvbGFuZy9DbGFzczspWgEACVNpZ25hdHVyZQEAFyhMamF2YS9sYW5nL0NsYXNzPCo+OylaAQALaW1wb3N0ZXJpc2UBAFAoTG9yZy9qbW9jay9hcGkvSW52b2thYmxlO0xqYXZhL2xhbmcvQ2xhc3M7W0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvT2JqZWN0OwEAXzxUOkxqYXZhL2xhbmcvT2JqZWN0Oz4oTG9yZy9qbW9jay9hcGkvSW52b2thYmxlO0xqYXZhL2xhbmcvQ2xhc3M8VFQ7PjtbTGphdmEvbGFuZy9DbGFzczwqPjspVFQ7AQAKU291cmNlRmlsZQEAEUltcG9zdGVyaXNlci5qYXZhAQAab3JnL2ptb2NrL2FwaS9JbXBvc3RlcmlzZXIBABBqYXZhL2xhbmcvT2JqZWN0BgEAAQACAAAAAAACBAEAAwAEAAEABQAAAAIABgSBAAcACAABAAUAAAACAAkAAQAKAAAAAgALUEsDBAoAAAAAAHlYGDlD+tCOjgMAAI4DAAAgAAAAb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uJDEuY2xhc3PK/rq+AAAAMQA2CgAUACQJAAMAJQcAJgoAEwAnCQAGACUHACgJAAgAJQcAKQkACgAlBwAqCQAMACUHACsJAA4AJQcALAkAEAAlBwAtCQASACUHAC4HAC8HADABAAY8aW5pdD4BAAMoKVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAAAEADElubmVyQ2xhc3NlcwEAHExvcmcvam1vY2svYXBpL0ludm9jYXRpb24kMTsBAAlTaWduYXR1cmUBAD1MamF2YS91dGlsL0hhc2hNYXA8TGphdmEvbGFuZy9DbGFzczwqPjtMamF2YS9sYW5nL0NsYXNzPCo+Oz47AQAKU291cmNlRmlsZQEAD0ludm9jYXRpb24uamF2YQEAD0VuY2xvc2luZ01ldGhvZAcAMQwAFQAWDAAyADMBABFqYXZhL2xhbmcvQm9vbGVhbgwANAA1AQAOamF2YS9sYW5nL0J5dGUBABNqYXZhL2xhbmcvQ2hhcmFjdGVyAQAPamF2YS9sYW5nL1Nob3J0AQARamF2YS9sYW5nL0ludGVnZXIBAA5qYXZhL2xhbmcvTG9uZwEAD2phdmEvbGFuZy9GbG9hdAEAEGphdmEvbGFuZy9Eb3VibGUBABpvcmcvam1vY2svYXBpL0ludm9jYXRpb24kMQEAEWphdmEvdXRpbC9IYXNoTWFwAQAYb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uAQAEVFlQRQEAEUxqYXZhL2xhbmcvQ2xhc3M7AQADcHV0AQA4KExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsAIAATABQAAAAAAAEAAAAVABYAAQAXAAAAqwADAAEAAABdKrcAASqyAAITAAO2AARXKrIABRMABrYABFcqsgAHEwAItgAEVyqyAAkTAAq2AARXKrIACxMADLYABFcqsgANEwAOtgAEVyqyAA8TABC2AARXKrIAERMAErYABFexAAAAAgAYAAAAKgAKAAAAHQAEAB4ADwAfABoAIAAlACEAMAAiADsAIwBGACQAUQAlAFwAJgAZAAAADAABAAAAXQAaAB0AAAAEAB4AAAACAB8AIAAAAAIAIQAiAAAABAAjAAAAHAAAAAoAAQATAAAAAAAIUEsDBAoAAAAAAHlYGDmM0GSQ8hQAAPIUAAAeAAAAb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uLmNsYXNzyv66vgAAADEA5QoABQCFCQARAIYJABEAhwkAEQCIBwCJCgCKAIsHADwJABEAjAcAjQoACQCFCgAFAI4KAAkAjwgAkAoAkQCSCACTCgAJAI4HAJQKABEAlQoAlgCXCgCYAJkKAAUAmgoAlgCaCgCYAJsLAJwAnQgAngoAlgCfCACgCAChCACiCwCcAKMKAKQAiwoAEQClCgCWAKYHAKcKACIAqAoAlgCpCQCqAKsKABEArAoAEQCtCgAFAK4KABEArwoAEQCwCgCxALIKABEAswoAsQC0CQARALULALYAtwcAuAgAuQoACQC6CgAwALsIALwKALEAnwgAvQgAvgcAvwoAOACFBwDCAQANTk9fUEFSQU1FVEVSUwEAE1tMamF2YS9sYW5nL09iamVjdDsBAA1pbnZva2VkT2JqZWN0AQASTGphdmEvbGFuZy9PYmplY3Q7AQANaW52b2tlZE1ldGhvZAEAGkxqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7AQAPcGFyYW1ldGVyVmFsdWVzAQAJQk9YX1RZUEVTAQAPTGphdmEvdXRpbC9NYXA7AQAJU2lnbmF0dXJlAQA5TGphdmEvdXRpbC9NYXA8TGphdmEvbGFuZy9DbGFzczwqPjtMamF2YS9sYW5nL0NsYXNzPCo+Oz47AQAGPGluaXQ+AQBCKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7W0xqYXZhL2xhbmcvT2JqZWN0OylWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBABpMb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uOwEAB2ludm9rZWQBAAZtZXRob2QBAAh0b1N0cmluZwEAFCgpTGphdmEvbGFuZy9TdHJpbmc7AQAGZXF1YWxzAQAVKExqYXZhL2xhbmcvT2JqZWN0OylaAQAFb3RoZXIBAB0oTG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbjspWgEACGhhc2hDb2RlAQADKClJAQAKZGVzY3JpYmVUbwEAHShMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOylWAQALZGVzY3JpcHRpb24BABpMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOwEAEGdldEludm9rZWRPYmplY3QBABQoKUxqYXZhL2xhbmcvT2JqZWN0OwEAEGdldEludm9rZWRNZXRob2QBABwoKUxqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7AQARZ2V0UGFyYW1ldGVyQ291bnQBAAxnZXRQYXJhbWV0ZXIBABUoSSlMamF2YS9sYW5nL09iamVjdDsBAAFpAQABSQEAFGdldFBhcmFtZXRlcnNBc0FycmF5AQAVKClbTGphdmEvbGFuZy9PYmplY3Q7AQAHYXBwbHlUbwEAJihMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7AQACZXgBAC1MamF2YS9sYW5nL3JlZmxlY3QvSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsBAAZ0YXJnZXQBAApFeGNlcHRpb25zBwDDAQAcY2hlY2tSZXR1cm5UeXBlQ29tcGF0aWJpbGl0eQEAFShMamF2YS9sYW5nL09iamVjdDspVgEACXZhbHVlVHlwZQEAEUxqYXZhL2xhbmcvQ2xhc3M7AQAFdmFsdWUBAApyZXR1cm5UeXBlAQAWTG9jYWxWYXJpYWJsZVR5cGVUYWJsZQEAFExqYXZhL2xhbmcvQ2xhc3M8Kj47AQAMaXNDb21wYXRpYmxlAQAlKExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9DbGFzczspWgEAKyhMamF2YS9sYW5nL0NsYXNzPCo+O0xqYXZhL2xhbmcvQ2xhc3M8Kj47KVoBAAtpc0JveGVkVHlwZQEADXByaW1pdGl2ZVR5cGUBAA1yZWZlcmVuY2VUeXBlAQAZZmFpbElmUmV0dXJuVHlwZUlzTm90TnVsbAEABnJlc3VsdAEAG2ZhaWxJZlJldHVyblR5cGVJc1ByaW1pdGl2ZQEAAygpVgEAD3JlcG9ydFR5cGVFcnJvcgEAJShMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvQ2xhc3M7KVYBACsoTGphdmEvbGFuZy9DbGFzczwqPjtMamF2YS9sYW5nL0NsYXNzPCo+OylWAQAIPGNsaW5pdD4BAApTb3VyY2VGaWxlAQAPSW52b2NhdGlvbi5qYXZhDABGAH4MAD0APgwAPwBADAA7ADwBABBqYXZhL2xhbmcvT2JqZWN0BwA8DADEAFwMAEEAPAEAF2phdmEvbGFuZy9TdHJpbmdCdWlsZGVyDABPAFAMAMUAxgEAAVsHAMcMAE8AyAEAAV0BABhvcmcvam1vY2svYXBpL0ludm9jYXRpb24MAFEAVAcAyQwAUQBSBwDKDABRAMsMAFUAVgwAVQDMBwDNDADOAM8BAAEuDADQAFABAAEoAQACLCABAAEpDADRANIHADwMAGQAZQwA0wDUAQAramF2YS9sYW5nL3JlZmxlY3QvSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbgwA1QDWDADXANgHANkMANoAcAwAewBuDAB9AH4MANsA2AwAdQB2DAB/AIAHANwMAN0A3gwAeAB2DADfAOAMAEIAQwcA4QwA4gBnAQAfamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbgEALHRyaWVkIHRvIHJldHVybiBhIHZhbHVlIGZyb20gYSB2b2lkIG1ldGhvZDogDADFAOMMAEYA5AEAMXRyaWVkIHRvIHJldHVybiBudWxsIHZhbHVlIGZyb20gbWV0aG9kIHJldHVybmluZyABABJ0cmllZCB0byByZXR1cm4gYSABACYgZnJvbSBhIG1ldGhvZCB0aGF0IGNhbiBvbmx5IHJldHVybiBhIAEAGm9yZy9qbW9jay9hcGkvSW52b2NhdGlvbiQxAQAAAQAMSW5uZXJDbGFzc2VzAQAbb3JnL2hhbWNyZXN0L1NlbGZEZXNjcmliaW5nAQATamF2YS9sYW5nL1Rocm93YWJsZQEABWNsb25lAQAGYXBwZW5kAQAtKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7AQAeb3JnL2hhbWNyZXN0L1N0cmluZ0Rlc2NyaXB0aW9uAQAxKExvcmcvaGFtY3Jlc3QvU2VsZkRlc2NyaWJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOwEAGGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZAEAEGphdmEvdXRpbC9BcnJheXMBACkoW0xqYXZhL2xhbmcvT2JqZWN0O1tMamF2YS9sYW5nL09iamVjdDspWgEAFihbTGphdmEvbGFuZy9PYmplY3Q7KUkBABhvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb24BAAphcHBlbmRUZXh0AQAuKExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOwEAB2dldE5hbWUBAA9hcHBlbmRWYWx1ZUxpc3QBAGUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvT2JqZWN0OylMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOwEABmludm9rZQEAOShMamF2YS9sYW5nL09iamVjdDtbTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OwEAEmdldFRhcmdldEV4Y2VwdGlvbgEAFygpTGphdmEvbGFuZy9UaHJvd2FibGU7AQANZ2V0UmV0dXJuVHlwZQEAEygpTGphdmEvbGFuZy9DbGFzczsBAA5qYXZhL2xhbmcvVm9pZAEABFRZUEUBAAhnZXRDbGFzcwEAD2phdmEvbGFuZy9DbGFzcwEAC2lzUHJpbWl0aXZlAQADKClaAQAQaXNBc3NpZ25hYmxlRnJvbQEAFChMamF2YS9sYW5nL0NsYXNzOylaAQANamF2YS91dGlsL01hcAEAA2dldAEALShMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOwEAFShMamF2YS9sYW5nL1N0cmluZzspVgAhABEABQABADoABQAZADsAPAAAABIAPQA+AAAAEgA/AEAAAAASAEEAPAAAABoAQgBDAAEARAAAAAIARQATAIEARgBHAAEASAAAAIAAAwAEAAAAKCq3AAEqK7UAAiostQADKi2yAASmAAoDvQAFpwAKLbYABsAAB7UACLEAAAACAEkAAAAWAAUAAAApAAQAKgAJ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ZUV4cGVjdGF0aW9uVG8BADsoTG9yZy9qbW9jay9pbnRlcm5hbC9FeHBlY3RhdGlvbkNhcHR1cmU7KUxqYXZhL2xhbmcvT2JqZWN0OwEAClNvdXJjZUZpbGUBABNDYXB0dXJlQ29udHJvbC5qYXZhAQAhb3JnL2ptb2NrL2ludGVybmFsL0NhcHR1cmVDb250cm9sAQAQamF2YS9sYW5nL09iamVjdAYBAAEAAgAAAAAAAQQBAAMABAAAAAEABQAAAAIABlBLAwQKAAAAAAB5WBg5mw5ietUHAADVBwAAJAAAAG9yZy9qbW9jay9pbnRlcm5hbC9DYXJkaW5hbGl0eS5jbGFzc8r+ur4AAAAxAFYKABUANgkABgA3CQAGADgKAAYAOQN/////BwA6CgAGADsIADwLAD0APggAPwgAQAgAQQgAQgoAQwBECABFCABGCgBHAEgIAEkKAAYASgkABgBLBwBMBwBNAQAIQUxMT1dJTkcBACBMb3JnL2ptb2NrL2ludGVybmFsL0NhcmRpbmFsaXR5OwEACHJlcXVpcmVkAQABSQEAB21heGltdW0BAAY8aW5pdD4BAAUoSUkpVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAHZXhhY3RseQEAIyhJKUxvcmcvam1vY2svaW50ZXJuYWwvQ2FyZGluYWxpdHk7AQAFY291bnQBAAdhdExlYXN0AQAHYmV0d2VlbgEAJChJSSlMb3JnL2ptb2NrL2ludGVybmFsL0NhcmRpbmFsaXR5OwEABmF0TW9zdAEAC2lzU2F0aXNmaWVkAQAEKEkpWgEAEGludm9jYXRpb25zU29GYXIBABVhbGxvd3NNb3JlSW52b2NhdGlvbnMBAA9pbnZvY2F0aW9uQ291bnQBAApkZXNjcmliZVRvAQAdKExvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb247KVYBAAtkZXNjcmlwdGlvbgEAGkxvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb247AQAIPGNsaW5pdD4BAAMoKVYBAApTb3VyY2VGaWxlAQAQQ2FyZGluYWxpdHkuamF2YQwAHAAzDAAZABoMABsAGgwAJgAnAQAeb3JnL2ptb2NrL2ludGVybmFsL0NhcmRpbmFsaXR5DAAc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dGVybmFsL0V4cGVjdGF0aW9uQ2FwdHVyZS5jbGFzc8r+ur4AAAAxAAkHAAcHAAgBABVjcmVhdGVFeHBlY3RhdGlvbkZyb20BAB0oTG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbjspVgEAClNvdXJjZUZpbGUBABdFeHBlY3RhdGlvbkNhcHR1cmUuamF2YQEAJW9yZy9qbW9jay9pbnRlcm5hbC9FeHBlY3RhdGlvbkNhcHR1cmUBABBqYXZhL2xhbmcvT2JqZWN0BgEAAQACAAAAAAABBAEAAwAEAAAAAQAFAAAAAgAGUEsDBAoAAAAAAHlYGDljHh3ouwAAALsAAAAtAAAAb3JnL2ptb2NrL2ludGVybmFsL0V4cGVjdGF0aW9uQ29sbGVjdG9yLmNsYXNzyv66vgAAADEACQcABwcACAEAA2FkZAEAHihMb3JnL2ptb2NrL2FwaS9FeHBlY3RhdGlvbjspVgEAClNvdXJjZUZpbGUBABlFeHBlY3RhdGlvbkNvbGxlY3Rvci5qYXZhAQAnb3JnL2ptb2NrL2ludGVybmFsL0V4cGVjdGF0aW9uQ29sbGVjdG9yAQAQamF2YS9sYW5nL09iamVjdAYBAAEAAgAAAAAAAQQBAAMABAAAAAEABQAAAAIABlBLAwQKAAAAAAB5WBg5WP5qEOsJAADrCQAAKgAAAG9yZy9qbW9jay9pbnRlcm5hbC9GYWtlT2JqZWN0TWV0aG9kcy5jbGFzc8r+ur4AAAAxAIYKABEASwkAHwBMCgARAE0KAE4ATwkAUABRCABSBwBTCgAfAFQKAE4AVQoAHwBWCgBQAFcHAFgIACoKAB8AWQkAWgBRCABbBwBcCgBOAF0KAB8AXgoAWgBfCQBgAFEIAGEKAB8AYgsAIABjCgBkAGUKABEAZgoAZABnCgAMAGYKAGQAaAoAaQBqBwBrBwBsAQAEbmV4dAEAGUxvcmcvam1vY2svYXBpL0ludm9rYWJsZTsBAAY8aW5pdD4BABwoTG9yZy9qbW9jay9hcGkvSW52b2thYmxlOylWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBACZMb3JnL2ptb2NrL2ludGVybmFsL0Zha2VPYmplY3RNZXRob2RzOwEACHRvU3RyaW5nAQAUKClMamF2YS9sYW5nL1N0cmluZzsBAAZpbnZva2UBAC4oTG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbjspTGphdmEvbGFuZy9PYmplY3Q7AQAKaW52b2NhdGlvbgEAGkxvcmcvam1vY2svYXBpL0ludm9jYXRpb247AQAGbWV0aG9kAQAaTGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZDsBAApFeGNlcHRpb25zBwBtAQAMZmFrZUhhc2hDb2RlAQAVKExqYXZhL2xhbmcvT2JqZWN0OylJAQAMZmFrZVRvU3RyaW5nAQAmKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL1N0cmluZzsBAApmYWtlRXF1YWxzAQAnKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylaAQAMZmFrZUZpbmFsaXplAQAVKExqYXZhL2xhbmcvT2JqZWN0OylWAQAIaXNNZXRob2QBAFIoTGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZDtMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvU3RyaW5nO1tMamF2YS9sYW5nL0NsYXNzOylaAQAKcmV0dXJuVHlwZQEAEUxqYXZhL2xhbmcvQ2xhc3M7AQAEbmFtZQEAEkxqYXZhL2xhbmcvU3RyaW5nOwEADnBhcmFtZXRlclR5cGVzAQASW0xqYXZhL2xhbmcvQ2xhc3M7AQAWTG9jYWxWYXJpYWJsZVR5cGVUYWJsZQEAFExqYXZhL2xhbmcvQ2xhc3M8Kj47AQAVW0xqYXZhL2xhbmcvQ2xhc3M8Kj47AQAJU2lnbmF0dXJlAQBYKExqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7TGphdmEvbGFuZy9DbGFzczwqPjtMamF2YS9sYW5nL1N0cmluZztbTGphdmEvbGFuZy9DbGFzczwqPjspWgEAClNvdXJjZUZpbGUBABZGYWtlT2JqZWN0TWV0aG9kcy5qYXZhDAAjAG4MACEAIgwAKgArBwBvDABwAHEHAHIMAHMAPwEACGhhc2hDb2RlAQAPamF2YS9sYW5nL0NsYXNzDAA8AD0MAHQAdQwANAA1DAB2AHcBABBqYXZhL2xhbmcvU3RyaW5nDAA2ADcHAHgBAAZlcXVhbHMBABBqYXZhL2xhbmcvT2JqZWN0DAB5AHoMADgAOQwAdgB7BwB8AQAIZmluYWxpemUMADoAOwwALAAtBwB9DAB+AH8MAFsAgAwAgQArDACCAIMHAIQMAFsAhQEAJG9yZy9qbW9jay9pbnRlcm5hbC9GYWtlT2JqZWN0TWV0aG9kcwEAF29yZy9qbW9jay9hcGkvSW52b2thYmxlAQATamF2YS9sYW5nL1Rocm93YWJsZQEAAygpVgEAGG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbgEAEGdldEludm9rZWRNZXRob2QBABwoKUxqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7AQARamF2YS9sYW5nL0ludGVnZXIBAARUWVBFAQAQZ2V0SW52b2tlZE9iamVjdAEAFCgpTGphdmEvbGFuZy9PYmplY3Q7AQAHdmFsdWVPZgEAFihJKUxqYXZhL2xhbmcvSW50ZWdlcjsBABFqYXZhL2xhbmcvQm9vbGVhbgEADGdldFBhcmFtZXRlcgEAFShJKUxqYXZhL2xhbmcvT2JqZWN0OwEAFihaKUxqYXZhL2xhbmcvQm9vbGVhbjsBAA5qYXZhL2xhbmcvVm9pZAEAGGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZAEADWdldFJldHVyblR5cGUBABMoKUxqYXZhL2xhbmcvQ2xhc3M7AQAVKExqYXZhL2xhbmcvT2JqZWN0OylaAQAHZ2V0TmFtZQEAEWdldFBhcmFtZXRlclR5cGVzAQAUKClbTGphdmEvbGFuZy9DbGFzczsBABBqYXZhL3V0aWwvQXJyYXlzAQApKFtMamF2YS9sYW5nL09iamVjdDtbTGphdmEvbGFuZy9PYmplY3Q7KVoEIQAfABEAAQAgAAEAEgAhACIAAAAIAAEAIwAkAAEAJQAAAEYAAgACAAAACiq3AAEqK7UAArEAAAACACYAAAAOAAMAAAANAAQADgAJAA8AJwAAABYAAgAAAAoAKAApAAAAAAAKACEAIgABAAEAKgArAAEAJQAAADIAAQABAAAACCq0AAK2AAOwAAAAAgAmAAAABgABAAAAEwAnAAAADAABAAAACAAoACkAAAABACwALQACACUAAADwAAgAAwAAAIortgAETSossgAFEgYDvQAHtwAImQAPKiu2AAm2AAq4AAuwKiwTAAwSDQO9AAe3AAiZAAwqK7YACbYADrAqLLIADxIQBL0AB1kDEwARU7cACJkAFCortgAJKwO2ABK2ABO4ABSwKiyyABUSFgO9AAe3AAiZAA0qK7YACbYAFwGwKrQAAiu5ABgCALAAAAACACYAAAAuAAsAAAAXAAUAGAAWABkAIgAbADMAHAA8AB4AUwAfAGQAIQB1ACIAfQAjAH8AJgAnAAAAIAADAAAAigAoACkAAAAAAIoALgAvAAEABQCFADAAMQACADIAAAAEAAEAMwQEADQANQAABAQANgA3AAAEBAA4ADkAAAQEADoAOwAAAIIAPAA9AAIAJQAAAJYAAgAFAAAAKCu2ABkstgAamQAeK7YAGy22AByZABMrtgAdGQS4AB6ZAAcEpwAEA6wAAAADACYAAAAGAAEAAAAzACcAAAA0AAUAAAAoACgAKQAAAAAAKAAwADEAAQAAACgAPgA/AAIAAAAoAEAAQQADAAAAKABCAEMABABEAAAAFgACAAAAKAA+AEUAAgAAACgAQgBGAAQARwAAAAIASAABAEkAAAACAEpQSwMECgAAAAAAeVgYOZ3YMq12AgAAdgIAACMAAABvcmcvam1vY2svaW50ZXJuYWwvRm9ybWF0dGluZy5jbGFzc8r+ur4AAAAxACcKAAsAGQcAGgoAAgAZCgACABsIABwKAAIAHQgAHggAEwoAAgAfBwAgBwAhAQAGPGluaXQ+AQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBAB9Mb3JnL2ptb2NrL2ludGVybmFsL0Zvcm1hdHRpbmc7AQAFdGltZXMBABUoSSlMamF2YS9sYW5nL1N0cmluZzsBAAFpAQABSQEAClNvdXJjZUZpbGUBAA9Gb3JtYXR0aW5nLmphdmEMAAwADQEAF2phdmEvbGFuZy9TdHJpbmdCdWlsZGVyDAAiACMBAAEgDAAiACQBAAR0aW1lDAAlACYBAB1vcmcvam1vY2svaW50ZXJuYWwvRm9ybWF0dGluZwEAEGphdmEvbGFuZy9PYmplY3QBAAZhcHBlbmQBABwoSSlMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7AQAtKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7AQAIdG9TdHJpbmcBABQoKUxqYXZhL2xhbmcvU3RyaW5nOwAhAAoACwAAAAAAAgABAAwADQABAA4AAAAvAAEAAQAAAAUqtwABsQAAAAIADwAAAAYAAQAAAAMAEAAAAAwAAQAAAAUAEQASAAAACQATABQAAQAOAAAATQADAAEAAAAjuwACWbcAAxq2AAQSBbYABhoEoAAIEgenAAUSCLYABrYACbAAAAACAA8AAAAGAAEAAAAGABAAAAAMAAEAAAAjABUAFgAAAAEAFwAAAAIAGFBLAwQKAAAAAAB5WBg5MMS1EtMDAADTAwAAMgAAAG9yZy9qbW9jay9pbnRlcm5hbC9JblN0YXRlT3JkZXJpbmdDb25zdHJhaW50LmNsYXNzyv66vgAAADEALAoACAAbCQAHABwLAB0AHggAHwsAIAAhCwAdACIHACMHACQHACUBAA5zdGF0ZVByZWRpY2F0ZQEAI0xvcmcvam1vY2svaW50ZXJuYWwvU3RhdGVQcmVkaWNhdGU7AQAGPGluaXQ+AQAmKExvcmcvam1vY2svaW50ZXJuYWwvU3RhdGVQcmVkaWNhdGU7KVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEALkxvcmcvam1vY2svaW50ZXJuYWwvSW5TdGF0ZU9yZGVyaW5nQ29uc3RyYWludDsBABNhbGxvd3NJbnZvY2F0aW9uTm93AQADKClaAQAKZGVzY3JpYmVUbwEAHShMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOylWAQALZGVzY3JpcHRpb24BABpMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOwEAClNvdXJjZUZpbGUBAB5JblN0YXRlT3JkZXJpbmdDb25zdHJhaW50LmphdmEMAAwAJgwACgALBwAnDAAoABQBAAV3aGVuIAcAKQwAKgArDAAVABYBACxvcmcvam1vY2svaW50ZXJuYWwvSW5TdGF0ZU9yZGVyaW5nQ29uc3RyYWludAEAEGphdmEvbGFuZy9PYmplY3QBACVvcmcvam1vY2svaW50ZXJuYWwvT3JkZXJpbmdDb25zdHJhaW50AQADKClWAQAhb3JnL2ptb2NrL2ludGVybmFsL1N0YXRlUHJlZGljYXRlAQAIaXNBY3RpdmUBABhvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb24BAAphcHBlbmRUZXh0AQAuKExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOwAhAAcACAABAAkAAQASAAoACwAAAAMAAQAMAA0AAQAOAAAARgACAAIAAAAKKrcAASortQACsQAAAAIADwAAAA4AAwAAAAgABAAJAAkACgAQAAAAFgACAAAACgARABIAAAAAAAoACgALAAEAAQATABQAAQAOAAAANAABAAEAAAAKKrQAArkAAwEArAAAAAIADwAAAAYAAQAAAA0AEAAAAAwAAQAAAAoAEQASAAAAAQAVABYAAQAOAAAAUAACAAIAAAAUKxIEuQAFAgBXKrQAAiu5AAYCALEAAAACAA8AAAAOAAMAAAARAAkAEgATABMAEAAAABYAAgAAABQAEQASAAAAAAAUABcAGAABAAEAGQAAAAIAGlBLAwQKAAAAAAB5WBg5KUy0vgILAAACCwAALQAAAG9yZy9qbW9jay9pbnRlcm5hbC9JbnZvY2F0aW9uRGlzcGF0Y2hlci5jbGFzc8r+ur4AAAAxAHoKABwARgcARwoAAgBGCQAbAEgJABsASQcASgoABgBLCwBMAE0LAEwATggATwsAUABRCABSCABTCABUCwBQAFUIAFYLAEwAVwsAWABZCwBYAFoHAFsLABQAXAsAFABdCwAUAF4HAF8IAGAKABgAYQcAYgcAYwcAZAcAZQEADGV4cGVjdGF0aW9ucwEAEExqYXZhL3V0aWwvTGlzdDsBAAlTaWduYXR1cmUBAC1MamF2YS91dGlsL0xpc3Q8TG9yZy9qbW9jay9hcGkvRXhwZWN0YXRpb247PjsBAA1zdGF0ZU1hY2hpbmVzAQAzTGphdmEvdXRpbC9MaXN0PExvcmcvam1vY2svaW50ZXJuYWwvU3RhdGVNYWNoaW5lOz47AQAGPGluaXQ+AQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBAClMb3JnL2ptb2NrL2ludGVybmFsL0ludm9jYXRpb25EaXNwYXRjaGVyOwEAD25ld1N0YXRlTWFjaGluZQEANShMamF2YS9sYW5nL1N0cmluZzspTG9yZy9qbW9jay9pbnRlcm5hbC9TdGF0ZU1hY2hpbmU7AQAEbmFtZQEAEkxqYXZhL2xhbmcvU3RyaW5nOwEADHN0YXRlTWFjaGluZQEAIUxvcmcvam1vY2svaW50ZXJuYWwvU3RhdGVNYWNoaW5lOwEAA2FkZAEAHihMb3JnL2ptb2NrL2FwaS9FeHBlY3RhdGlvbjspVgEAC2V4cGVjdGF0aW9uAQAbTG9yZy9qbW9jay9hcGkvRXhwZWN0YXRpb247AQAKZGVzY3JpYmVUbwEAHShMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOylWAQALZGVzY3JpcHRpb24BABpMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOwEAC2lzU2F0aXNmaWVkAQADKClaAQACaSQBABRMamF2YS91dGlsL0l0ZXJhdG9yOwEACGRpc3BhdGNoAQAuKExvcmcvam1vY2svYXBpL0ludm9jYXRpb247KUxqYXZhL2xhbmcvT2JqZWN0OwEACmludm9jYXRpb24BABpMb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uOwEACkV4Y2VwdGlvbnMHAGYBAApTb3VyY2VGaWxlAQAZSW52b2NhdGlvbkRpc3BhdGNoZXIuamF2YQwAJQAmAQATamF2YS91dGlsL0FycmF5TGlzdAwAHwAgDAAjACABAB9vcmcvam1vY2svaW50ZXJuYWwvU3RhdGVNYWNoaW5lDAAlAGcHAGgMADIAaQwAagA7AQCmbm8gZXhwZWN0YXRpb25zIHNwZWNpZmllZDogZGlkIHlvdS4uLgogLSBmb3JnZXQgdG8gc3RhcnQgYW4gZXhwZWN0YXRpb24gd2l0aCBhIGNhcmRpbmFsaXR5IGNsYXVzZT8KIC0gY2FsbCBhIG1vY2tlZCBtZXRob2QgdG8gc3BlY2lmeSB0aGUgcGFyYW1ldGVyIG9mIGFuIGV4cGVjdGF0aW9uPwcAawwAbABtAQAQZXhwZWN0YXRpb25zOgogIAEAAwogIAEAAAwAbgBvAQALCnN0YXRlczoKICAMAHAAcQcAcgwAcwA7DAB0AHUBABlvcmcvam1vY2svYXBpL0V4cGVjdGF0aW9uDAA6ADsMAHYAdwwAeAA/AQAeb3JnL2ptb2NrL2FwaS9FeHBlY3RhdGlvbkVycm9yAQAVdW5leHBlY3RlZCBpbnZvY2F0aW9uDAAlAHkBACdvcmcvam1vY2svaW50ZXJuYWwvSW52b2NhdGlvbkRpc3BhdGNoZXIBABBqYXZhL2xhbmcvT2JqZWN0AQAnb3JnL2ptb2NrL2ludGVybmFsL0V4cGVjdGF0aW9uQ29sbGVjdG9yAQAbb3JnL2hhbWNyZXN0L1NlbGZEZXNjcmliaW5nAQATamF2YS9sYW5nL1Rocm93YWJsZQEAFShMamF2YS9sYW5nL1N0cmluZzspVgEADmphdmEvdXRpbC9MaXN0AQAVKExqYXZhL2xhbmcvT2JqZWN0OylaAQAHaXNFbXB0eQEAGG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbgEACmFwcGVuZFRleHQBAC4oTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb247AQAKYXBwZW5kTGlzdAEAZihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL0l0ZXJhYmxlOylMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOwEACGl0ZXJhdG9yAQAWKClMamF2YS91dGlsL0l0ZXJhdG9yOwEAEmphdmEvdXRpbC9JdGVyYXRvcgEAB2hhc05leHQBAARuZXh0AQAUKClMamF2YS9sYW5nL09iamVjdDsBAAdtYXRjaGVzAQAdKExvcmcvam1vY2svYXBpL0ludm9jYXRpb247KVoBAAZpbnZva2UBAC8oTGphdmEvbGFuZy9TdHJpbmc7TG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbjspVgAhABsAHAACAB0AHgACAAIAHwAgAAEAIQAAAAIAIgACACMAIAABACEAAAACACQABgABACUAJgABACcAAABNAAMAAQAAABsqtwABKrsAAlm3AAO1AAQquwACWbcAA7UABbEAAAACACgAAAAOAAMAAAAMAAQADQAPAA4AKQAAAAwAAQAAABsAKgArAAAAAQAsAC0AAQAnAAAAXAADAAMAAAAWuwAGWSu3AAdNKrQABSy5AAgCAFcssAAAAAIAKAAAAA4AAwAAABEACQASABQAEwApAAAAIAADAAAAFgAqACsAAAAAABYALgAvAAEACQANADAAMQACAAEAMgAzAAEAJwAAAEQAAgACAAAADCq0AAQruQAIAgBXsQAAAAIAKAAAAAoAAgAAABcACwAYACkAAAAWAAIAAAAMACoAKwAAAAAADAA0ADUAAQABADYANwABACcAAACTAAUAAgAAAEcqtAAEuQAJAQCZAA8rEgq5AAsCAFenADErEgwSDRIOKrQABLkADwUAVyq0AAW5AAkBAJoAFCsSEBINEg4qtAAFuQAPBQBXsQAAAAIAKAAAAB4ABwAAABsADAAcABUAHwAYACEAKQAiADUAIwBGACYAKQAAABYAAgAAAEcAKgArAAAAAABHADgAOQABAAEAOgA7AAEAJwAAAHsAAQADAAAALSq0AAS5ABEBAEwruQASAQCZABsruQATAQDAABRNLLkAFQEAmgAFA6yn/+IErAAAAAIAKAAAABYABQAAACkAHQAqACYAKwAoAC0AKwAuACkAAAAgAAMAHQALADQANQACAAoAIQA8AD0AAQAAAC0AKgArAAAAAQA+AD8AAgAnAAAAlQAEAAQAAAA9KrQABLkAEQEATSy5ABIBAJkAIiy5ABMBAMAAFE4tK7kAFgIAmQALLSu5ABcCALCn/9u7ABhZEhkrtwAavwAAAAIAKAAAABYABQAAADIAHQAzACcANAAvADYAMgA4ACkAAAAqAAQAHQASADQANQADAAoAKAA8AD0AAgAAAD0AKgArAAAAAAA9AEAAQQABAEIAAAAEAAEAQwABAEQAAAACAEVQSwMECgAAAAAAeVgYOcsGagouBgAALgYAACsAAABvcmcvam1vY2svaW50ZXJuYWwvSW52b2NhdGlvbkRpdmVydGVyLmNsYXNzyv66vgAAADEAQwoACwArCQAKACwJAAoALQkACgAuCgALAC8KADAAMQoAMgAzCgAwADQLAAwANQcANgcANwcAOAEADWRlY2xhcmluZ1R5cGUBABFMamF2YS9sYW5nL0NsYXNzOwEACVNpZ25hdHVyZQEAFkxqYXZhL2xhbmcvQ2xhc3M8VFQ7PjsBAAZ0YXJnZXQBABJMamF2YS9sYW5nL09iamVjdDsBAANUVDsBAARuZXh0AQAZTG9yZy9qbW9jay9hcGkvSW52b2thYmxlOwEABjxpbml0PgEAPyhMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvT2JqZWN0O0xvcmcvam1vY2svYXBpL0ludm9rYWJsZTspVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAnTG9yZy9qbW9jay9pbnRlcm5hbC9JbnZvY2F0aW9uRGl2ZXJ0ZXI7AQAWTG9jYWxWYXJpYWJsZVR5cGVUYWJsZQEALExvcmcvam1vY2svaW50ZXJuYWwvSW52b2NhdGlvbkRpdmVydGVyPFRUOz47AQA1KExqYXZhL2xhbmcvQ2xhc3M8VFQ7PjtUVDtMb3JnL2ptb2NrL2FwaS9JbnZva2FibGU7KVYBAAh0b1N0cmluZwEAFCgpTGphdmEvbGFuZy9TdHJpbmc7AQAGaW52b2tlAQAuKExvcmcvam1vY2svYXBpL0ludm9jYXRpb247KUxqYXZhL2xhbmcvT2JqZWN0OwEACmludm9jYXRpb24BABpMb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uOwEACkV4Y2VwdGlvbnMHADkBAEE8VDpMamF2YS9sYW5nL09iamVjdDs+TGphdmEvbGFuZy9PYmplY3Q7TG9yZy9qbW9jay9hcGkvSW52b2thYmxlOwEAClNvdXJjZUZpbGUBABdJbnZvY2F0aW9uRGl2ZXJ0ZXIuamF2YQwAFgA6DAANAA4MABEAEgwAFAAVDAAgACEHADsMADwAPQcAPgwAPwBADABBAEIMACIAIwEAJW9yZy9qbW9jay9pbnRlcm5hbC9JbnZvY2F0aW9uRGl2ZXJ0ZXIBABBqYXZhL2xhbmcvT2JqZWN0AQAXb3JnL2ptb2NrL2FwaS9JbnZva2FibGUBABNqYXZhL2xhbmcvVGhyb3dhYmxlAQADKClWAQAYb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uAQAQZ2V0SW52b2tlZE1ldGhvZAEAHCgpTGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZDsBABhqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2QBABFnZXREZWNsYXJpbmdDbGFzcwEAEygpTGphdmEvbGFuZy9DbGFzczsBAAdhcHBseVRvAQAmKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsAIQAKAAsAAQAMAAMAEgANAA4AAQAPAAAAAgAQABIAEQASAAEADwAAAAIAEwASABQAFQAAAAMAAQAWABcAAgAYAAAAkgACAAQAAAAUKrcAASortQACKiy1AAMqLbUABLEAAAADABkAAAAWAAUAAAALAAQADAAJAA0ADgAOABMADwAaAAAAKgAEAAAAFAAbABwAAAAAABQADQAOAAEAAAAUABEAEgACAAAAFAAUABUAAwAdAAAAIAADAAAAFAAbAB4AAAAAABQADQAQAAEAAAAUABEAEwACAA8AAAACAB8AAQAgACEAAQAYAAAARAABAAEAAAAIKrQABLYABbAAAAADABkAAAAGAAEAAAATABoAAAAMAAEAAAAIABsAHAAAAB0AAAAMAAEAAAAIABsAHgAAAAEAIgAjAAIAGAAAAHAAAgACAAAAIiu2AAa2AAcqtAACpgAMKyq0AAO2AAiwKrQABCu5AAkCALAAAAADABkAAAAOAAMAAAAXAA4AGAAXABsAGgAAABYAAgAAACIAGwAcAAAAAAAiACQAJQABAB0AAAAMAAEAAAAiABsAHgAAACYAAAAEAAEAJwACAA8AAAACACgAKQAAAAIAKlBLAwQKAAAAAAB5WBg57ZcgN/sTAAD7EwAALgAAAG9yZy9qbW9jay9pbnRlcm5hbC9JbnZvY2F0aW9uRXhwZWN0YXRpb24uY2xhc3PK/rq+AAAAMQDXCgA0AHwJAH0AfgkAMwB/CgCAAIEJADMAgggAgwoAgACECQAzAIUIAIYJADMAhwcAiAoACwB8CQAzAIkHAIoKAA4AfAkAMwCLCQAzAIwJADMAjQsAjgCPCgB9AJAIAJELAJIAkwgAlAgAlQoAlgCXCACYCwCZAJAIAJoLAI4AmwsAnACdCwCcAJ4HAJ8IAKALACAAkAsAoQCQBwCiCwAkAJAKAH0AowoAfQCkCgAzAKUKAKYApwsAmQCoCgCmAKkKAKYAqgoAMwCrCwAgAKwKADMArQsAoQCuCgCmAK8LACQAsAcAsQcAsgcAswEAC2NhcmRpbmFsaXR5AQAgTG9yZy9qbW9jay9pbnRlcm5hbC9DYXJkaW5hbGl0eTsBAA1vYmplY3RNYXRjaGVyAQAWTG9yZy9oYW1jcmVzdC9NYXRjaGVyOwEACVNpZ25hdHVyZQEAGUxvcmcvaGFtY3Jlc3QvTWF0Y2hlcjwqPjsBAA1tZXRob2RNYXRjaGVyAQAyTG9yZy9oYW1jcmVzdC9NYXRjaGVyPExqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7PjsBABFwYXJhbWV0ZXJzTWF0Y2hlcgEAK0xvcmcvaGFtY3Jlc3QvTWF0Y2hlcjxbTGphdmEvbGFuZy9PYmplY3Q7PjsBAAZhY3Rpb24BABZMb3JnL2ptb2NrL2FwaS9BY3Rpb247AQATb3JkZXJpbmdDb25zdHJhaW50cwEAEExqYXZhL3V0aWwvTGlzdDsBADlMamF2YS91dGlsL0xpc3Q8TG9yZy9qbW9jay9pbnRlcm5hbC9PcmRlcmluZ0NvbnN0cmFpbnQ7PjsBAAtzaWRlRWZmZWN0cwEAMUxqYXZhL3V0aWwvTGlzdDxMb3JnL2ptb2NrL2ludGVybmFsL1NpZGVFZmZlY3Q7PjsBAA9pbnZvY2F0aW9uQ291bnQBAAFJAQAGPGluaXQ+AQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBACpMb3JnL2ptb2NrL2ludGVybmFsL0ludm9jYXRpb25FeHBlY3RhdGlvbjsBAA5zZXRDYXJkaW5hbGl0eQEAIyhMb3JnL2ptb2NrL2ludGVybmFsL0NhcmRpbmFsaXR5OylWAQAQc2V0T2JqZWN0TWF0Y2hlcgEAGShMb3JnL2hhbWNyZXN0L01hdGNoZXI7KVYBABZMb2NhbFZhcmlhYmxlVHlwZVRhYmxlAQAcKExvcmcvaGFtY3Jlc3QvTWF0Y2hlcjwqPjspVgEAEHNldE1ldGhvZE1hdGNoZXIBADUoTG9yZy9oYW1jcmVzdC9NYXRjaGVyPExqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7PjspVgEAFHNldFBhcmFtZXRlcnNNYXRjaGVyAQAuKExvcmcvaGFtY3Jlc3QvTWF0Y2hlcjxbTGphdmEvbGFuZy9PYmplY3Q7PjspVgEAFWFkZE9yZGVyaW5nQ29uc3RyYWludAEAKihMb3JnL2ptb2NrL2ludGVybmFsL09yZGVyaW5nQ29uc3RyYWludDspVgEAEm9yZGVyaW5nQ29uc3RyYWludAEAJ0xvcmcvam1vY2svaW50ZXJuYWwvT3JkZXJpbmdDb25zdHJhaW50OwEADWFkZFNpZGVFZmZlY3QBACIoTG9yZy9qbW9jay9pbnRlcm5hbC9TaWRlRWZmZWN0OylWAQAKc2lkZUVmZmVjdAEAH0xvcmcvam1vY2svaW50ZXJuYWwvU2lkZUVmZmVjdDsBAAlzZXRBY3Rpb24BABkoTG9yZy9qbW9jay9hcGkvQWN0aW9uOylWAQAKZGVzY3JpYmVUbwEAHShMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOylWAQACaSQBABRMamF2YS91dGlsL0l0ZXJhdG9yOwEAC2Rlc2NyaXB0aW9uAQAaTG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbjsBAAtpc1NhdGlzZmllZAEAAygpWgEAFWFsbG93c01vcmVJbnZvY2F0aW9ucwEAB21hdGNoZXMBAB0oTG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbjspWgEACmludm9jYXRpb24BABpMb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uOwEAEGlzSW5Db3JyZWN0T3JkZXIBAApjb25zdHJhaW50AQAGaW52b2tlAQAuKExvcmcvam1vY2svYXBpL0ludm9jYXRpb247KUxqYXZhL2xhbmcvT2JqZWN0OwEABnJlc3VsdAEAEkxqYXZhL2xhbmcvT2JqZWN0OwEACkV4Y2VwdGlvbnMHALQBABJwZXJmb3JtU2lkZUVmZmVjdHMBAApTb3VyY2VGaWxlAQAaSW52b2NhdGlvbkV4cGVjdGF0aW9uLmphdmEMAEkASgcAtQwAtgA3DAA2ADcHALcMALgAuQwAOAA5AQAMPGFueSBtZXRob2Q+DAC4ALoMADwAOQEAEig8YW55IHBhcmFtZXRlcnM+KQwAPgA5AQAfb3JnL2ptb2NrL2xpYi9hY3Rpb24vVm9pZEFjdGlvbgwAQABBAQATamF2YS91dGlsL0FycmF5TGlzdAwAQgBDDABFAEMMAEcASAcAuwwAvAC9DABkAGUBAAIsIAcAvgwAvwDAAQANbmV2ZXIgaW52b2tlZAEAEGFscmVhZHkgaW52b2tlZCAHAMEMAMIAwwEAAjogBwDEAQABLgwAxQDGBwDHDADIAGsMAMkAygEAJW9yZy9qbW9jay9pbnRlcm5hbC9PcmRlcmluZ0NvbnN0cmFpbnQBAAI7IAcAywEAHW9yZy9qbW9jay9pbnRlcm5hbC9TaWRlRWZmZWN0DABqAMwMAGwAzAwAbABrBwDNDADOAMoMAG0AvQwAzwDQDADRANIMAHEAawwA0wBrDAB5AEoMAHMAdAwA1ADVDADWAEoBAChvcmcvam1vY2svaW50ZXJuYWwvSW52b2NhdGlvbkV4cGVjdGF0aW9uAQAQamF2YS9sYW5nL09iamVjdAEAGW9yZy9qbW9jay9hcGkvRXhwZWN0YXRpb24BABNqYXZhL2xhbmcvVGhyb3dhYmxlAQAeb3JnL2ptb2NrL2ludGVybmFsL0NhcmRpbmFsaXR5AQAIQUxMT1dJTkcBABxvcmcvaGFtY3Jlc3QvY29yZS9Jc0FueXRoaW5nAQAIYW55dGhpbmcBABgoKUxvcmcvaGFtY3Jlc3QvTWF0Y2hlcjsBACooTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvaGFtY3Jlc3QvTWF0Y2hlcjsBAA5qYXZhL3V0aWwvTGlzdAEAA2FkZAEAFShMamF2YS9sYW5nL09iamVjdDspWgEAGG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbgEACmFwcGVuZFRleHQBAC4oTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb247AQAdb3JnL2ptb2NrL2ludGVybmFsL0Zvcm1hdHRpbmcBAAV0aW1lcwEAFShJKUxqYXZhL2xhbmcvU3RyaW5nOwEAFG9yZy9oYW1jcmVzdC9NYXRjaGVyAQAIaXRlcmF0b3IBABYoKUxqYXZhL3V0aWwvSXRlcmF0b3I7AQASamF2YS91dGlsL0l0ZXJhdG9yAQAHaGFzTmV4dAEABG5leHQBABQoKUxqYXZhL2xhbmcvT2JqZWN0OwEAFG9yZy9qbW9jay9hcGkvQWN0aW9uAQAEKEkpWgEAGG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbgEAEGdldEludm9rZWRPYmplY3QBABBnZXRJbnZva2VkTWV0aG9kAQAcKClMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOwEAFGdldFBhcmFtZXRlcnNBc0FycmF5AQAVKClbTGphdmEvbGFuZy9PYmplY3Q7AQATYWxsb3dzSW52b2NhdGlvbk5vdwEAHGNoZWNrUmV0dXJuVHlwZUNvbXBhdGliaWxpdHkBABUoTGphdmEvbGFuZy9PYmplY3Q7KVYBAAdwZXJmb3JtACEAMwA0AAEANQAIAAIANgA3AAAAAgA4ADkAAQA6AAAAAgA7AAIAPAA5AAEAOgAAAAIAPQACAD4AOQABADoAAAACAD8AAgBAAEEAAAACAEIAQwABADoAAAACAEQAAgBFAEMAAQA6AAAAAgBGAAIARwBIAAAADwABAEkASgABAEsAAACVAAMAAQAAAEsqtwABKrIAArUAAyq4AAS1AAUqEga4AAe1AAgqEgm4AAe1AAoquwALWbcADLUADSq7AA5ZtwAPtQAQKrsADlm3AA+1ABEqA7UAErEAAAACAEwAAAAmAAkAAAAVAAQAFgALABcAEgAYABsAGQAkABoALwAbADoAHABFAB4ATQAAAAwAAQAAAEsATgBPAAAAAQBQAFEAAQBLAAAAPgACAAIAAAAGKiu1AAOxAAAAAgBMAAAACgACAAAAIQAFACIATQAAABYAAgAAAAYATgBPAAAAAAAGADYANwABAAEAUgBTAAIASwAAAFAAAgACAAAABiortQAFsQAAAAMATAAAAAoAAgAAACUABQAmAE0AAAAWAAIAAAAGAE4ATwAAAAAABgA4ADkAAQBUAAAADAABAAAABgA4ADsAAQA6AAAAAgBVAAEAVgBTAAIASwAAAFAAAgACAAAABiortQAIsQAAAAMATAAAAAoAAgAAACkABQAqAE0AAAAWAAIAAAAGAE4ATwAAAAAABgA8ADkAAQBUAAAADAABAAAABgA8AD0AAQA6AAAAAgBXAAEAWABTAAIASwAAAFAAAgACAAAABiortQAKsQAAAAMATAAAAAoAAgAAAC0ABQAuAE0AAAAWAAIAAAAGAE4ATwAAAAAABgA+ADkAAQBUAAAADAABAAAABgA+AD8AAQA6AAAAAgBZAAEAWgBbAAEASwAAAEQAAgACAAAADCq0ABAruQATAgBXsQAAAAIATAAAAAoAAgAAADEACwAyAE0AAAAWAAIAAAAMAE4ATwAAAAAADABcAF0AAQABAF4AXwABAEsAAABEAAIAAgAAAAwqtAARK7kAEwIAV7EAAAACAEwAAAAKAAIAAAA1AAsANgBNAAAAFgACAAAADABOAE8AAAAAAAwAYABhAAEAAQBiAGMAAQBLAAAAPgACAAIAAAAGKiu1AA2xAAAAAgBMAAAACgACAAAAOQAFADoATQAAABYAAgAAAAYATgBPAAAAAAAGAEAAQQABAAEAZABlAAEASwAAAZMAAgAEAAAA3yq0AAMrtgAUKxIVuQAWAgBXKrQAEpoADysSF7kAFgIAV6cAGisSGLkAFgIAVysqtAASuAAZuQAWAgBXKxIauQAWAgBXKrQABSu5ABsCACsSHLkAFgIAVyq0AAgruQAbAgAqtAAKK7kAGwIAKrQAELkAHQEATSy5AB4BAJkAICy5AB8BAMAAIE4rEiG5ABYCAFctK7kAIgIAp//dKxIhuQAWAgBXKrQADSu5ACMCACq0ABG5AB0BAE0suQAeAQCZACAsuQAfAQDAACROKxIhuQAWAgBXLSu5ACUCAKf/3bEAAAACAEwAAABeABcAAAA9AAgAPgARAD8AGABAACEAQQAkAEMALQBEADsARgBEAEcATgBIAFcASQBhAEoAawBLAIgATACRAE0AmABOAJsATwCkAFAArgBRAMsAUgDUAFMA2wBUAN4AVQBNAAAAPgAGAIgAEABcAF0AAwB1ACYAZgBnAAIAywAQAGAAYQADALgAJgBmAGcAAgAAAN8ATgBPAAAAAADfAGgAaQABAAEAagBrAAEASwAAADYAAgABAAAADCq0AAMqtAAStgAmrAAAAAIATAAAAAYAAQAAAFgATQAAAAwAAQAAAAwATgBPAAAAAQBsAGsAAQBLAAAANgACAAEAAAAMKrQAAyq0ABK2ACesAAAAAgBMAAAABgABAAAAXABNAAAADAABAAAADABOAE8AAAABAG0AbgABAEsAAAB4AAIAAgAAAEQqtgAomQA+KrQABSu2ACm5ACoCAJkALiq0AAgrtgAruQAqAgCZAB4qtAAKK7YALLkAKgIAmQAOKrcALZkABwSnAAQDrAAAAAIATAAAAAYAAQAAAGAATQAAABYAAgAAAEQATgBPAAAAAABEAG8AcAABAAIAcQBrAAEASwAAAHcAAQADAAAALSq0ABC5AB0BAEwruQAeAQCZABsruQAfAQDAACBNLLkALgEAmgAFA6yn/+IErAAAAAIATAAAABIABAAAAGkAHQBqACgAawArAGwATQAAACAAAwAdAAsAcgBdAAIACgAhAGYAZwABAAAALQBOAE8AAAABAHMAdAACAEsAAABuAAMAAwAAACAqWbQAEgRgtQASKrcALyq0AA0ruQAwAgBNKyy2ADEssAAAAAIATAAAABYABQAAAHAACgBxAA4AcgAZAHMAHgB0AE0AAAAgAAMAAAAgAE4ATwAAAAAAIABvAHAAAQAZAAcAdQB2AAIAdwAAAAQAAQB4AAIAeQBKAAEASwAAAHEAAQADAAAAJyq0ABG5AB0BAEwruQAeAQCZABYruQAfAQDAACRNLLkAMgEAp//nsQAAAAIATAAAABIABAAAAHgAHQB5ACMAegAmAHsATQAAACAAAwAdAAYAYABhAAIACgAcAGYAZwABAAAAJwBOAE8AAAABAHoAAAACAHtQSwMECgAAAAAAeVgYOTO+mArQFwAA0BcAADUAAABvcmcvam1vY2svaW50ZXJuYWwvSW52b2NhdGlvbkV4cGVjdGF0aW9uQnVpbGRlci5jbGFzc8r+ur4AAAAxAN0KADIAigcAiwoAAgCKCQAxAIwJADEAjQkAMQCOBwCPCgAHAIoJADEAkAoAAgCRCgACAJILAJMAlAoAAgCVCwCWAJcKAAIAmAcAmQcAmggAmwoAEQCcBwCdCgAUAJ4KAAIAnwsAEACgCgAxAKEHAKIKAKMApAoAGQClCgACAKYLAJMApwcAqAoAowCpCgAeAKoKAAIAqwoAMQCsCgAeAK0LAJMArgoAowCvCACwBwCxCACyCgAnAJwKADEAswcAtAoAKwCcCgAxALUKALYAtwcAuAoAMQC5BwC6BwC7BwC8BwC9BwC+BwC/AQALZXhwZWN0YXRpb24BACpMb3JnL2ptb2NrL2ludGVybmFsL0ludm9jYXRpb25FeHBlY3RhdGlvbjsBABBpc0Z1bGx5U3BlY2lmaWVkAQABWgEAEm5lZWRzRGVmYXVsdEFjdGlvbgEAGWNhcHR1cmVkUGFyYW1ldGVyTWF0Y2hlcnMBABBMamF2YS91dGlsL0xpc3Q7AQAJU2lnbmF0dXJlAQArTGphdmEvdXRpbC9MaXN0PExvcmcvaGFtY3Jlc3QvTWF0Y2hlcjwqPjs+OwEABjxpbml0PgEAAygpVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAxTG9yZy9qbW9jay9pbnRlcm5hbC9JbnZvY2F0aW9uRXhwZWN0YXRpb25CdWlsZGVyOwEADXRvRXhwZWN0YXRpb24BADMoTG9yZy9qbW9jay9hcGkvQWN0aW9uOylMb3JnL2ptb2NrL2FwaS9FeHBlY3RhdGlvbjsBAA1kZWZhdWx0QWN0aW9uAQAWTG9yZy9qbW9jay9hcGkvQWN0aW9uOwEADnNldENhcmRpbmFsaXR5AQAjKExvcmcvam1vY2svaW50ZXJuYWwvQ2FyZGluYWxpdHk7KVYBAAtjYXJkaW5hbGl0eQEAIExvcmcvam1vY2svaW50ZXJuYWwvQ2FyZGluYWxpdHk7AQATYWRkUGFyYW1ldGVyTWF0Y2hlcgEAGShMb3JnL2hhbWNyZXN0L01hdGNoZXI7KVYBAAdtYXRjaGVyAQAWTG9yZy9oYW1jcmVzdC9NYXRjaGVyOwEAFkxvY2FsVmFyaWFibGVUeXBlVGFibGUBABlMb3JnL2hhbWNyZXN0L01hdGNoZXI8Kj47AQAcKExvcmcvaGFtY3Jlc3QvTWF0Y2hlcjwqPjspVgEAFWFkZE9yZGVyaW5nQ29uc3RyYWludAEAKihMb3JnL2ptb2NrL2ludGVybmFsL09yZGVyaW5nQ29uc3RyYWludDspVgEACmNvbnN0cmFpbnQBACdMb3JnL2ptb2NrL2ludGVybmFsL09yZGVyaW5nQ29uc3RyYWludDsBAB9hZGRJblNlcXVlbmNlT3JkZXJpbmdDb25zdHJhaW50AQAXKExvcmcvam1vY2svU2VxdWVuY2U7KVYBAAhzZXF1ZW5jZQEAFExvcmcvam1vY2svU2VxdWVuY2U7AQAJc2V0QWN0aW9uAQAZKExvcmcvam1vY2svYXBpL0FjdGlvbjspVgEABmFjdGlvbgEADWFkZFNpZGVFZmZlY3QBACIoTG9yZy9qbW9jay9pbnRlcm5hbC9TaWRlRWZmZWN0OylWAQAKc2lkZUVmZmVjdAEAH0xvcmcvam1vY2svaW50ZXJuYWwvU2lkZUVmZmVjdDsBABVjYXB0dXJlRXhwZWN0ZWRPYmplY3QBACYoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OwEACm1vY2tPYmplY3QBABJMamF2YS9sYW5nL09iamVjdDsBABFjYXB0dXJpbmdJbXBvc3RlcgEAA1RUOwEAHjxUOkxqYXZhL2xhbmcvT2JqZWN0Oz4oVFQ7KVRUOwEADGFzTW9ja2VkVHlwZQEAOChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7AQAwPFQ6TGphdmEvbGFuZy9PYmplY3Q7PihUVDtMamF2YS9sYW5nL09iamVjdDspVFQ7AQAVY3JlYXRlRXhwZWN0YXRpb25Gcm9tAQAdKExvcmcvam1vY2svYXBpL0ludm9jYXRpb247KVYBAAppbnZvY2F0aW9uAQAaTG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbjsBABpjaGVja1BhcmFtZXRlck1hdGNoZXJDb3VudAEAFmNoZWNrV2FzRnVsbHlTcGVjaWZpZWQBAAJvZgEANyhMb3JnL2hhbWNyZXN0L01hdGNoZXI7KUxvcmcvam1vY2svc3ludGF4L01ldGhvZENsYXVzZTsBAA1vYmplY3RNYXRjaGVyAQA6KExvcmcvaGFtY3Jlc3QvTWF0Y2hlcjwqPjspTG9yZy9qbW9jay9zeW50YXgvTWV0aG9kQ2xhdXNlOwEABm1ldGhvZAEAOyhMb3JnL2hhbWNyZXN0L01hdGNoZXI7KUxvcmcvam1vY2svc3ludGF4L1BhcmFtZXRlcnNDbGF1c2U7AQANbWV0aG9kTWF0Y2hlcgEAMkxvcmcvaGFtY3Jlc3QvTWF0Y2hlcjxMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOz47AQBXKExvcmcvaGFtY3Jlc3QvTWF0Y2hlcjxMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOz47KUxvcmcvam1vY2svc3ludGF4L1BhcmFtZXRlcnNDbGF1c2U7AQA3KExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL2ptb2NrL3N5bnRheC9QYXJhbWV0ZXJzQ2xhdXNlOwEACW5hbWVSZWdleAEAEkxqYXZhL2xhbmcvU3RyaW5nOwEABHdpdGgBABooW0xvcmcvaGFtY3Jlc3QvTWF0Y2hlcjspVgEAEXBhcmFtZXRlck1hdGNoZXJzAQAXW0xvcmcvaGFtY3Jlc3QvTWF0Y2hlcjsBABpbTG9yZy9oYW1jcmVzdC9NYXRjaGVyPCo+OwEAHShbTG9yZy9oYW1jcmVzdC9NYXRjaGVyPCo+OylWAQAPd2l0aE5vQXJndW1lbnRzAQAKU291cmNlRmlsZQEAIUludm9jYXRpb25FeHBlY3RhdGlvbkJ1aWxkZXIuamF2YQwAQABBAQAob3JnL2ptb2NrL2ludGVybmFsL0ludm9jYXRpb25FeHBlY3RhdGlvbgwANwA4DAA5ADoMADsAOgEAE2phdmEvdXRpbC9BcnJheUxpc3QMADwAPQwAXgBfDABLAEwHAMAMAMEAwgwAVgBXBwDDDADEAMUMAGEAYgEAIW9yZy9qbW9jay9pbnRlcm5hbC9DYXB0dXJlQ29udHJvbAEAImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24BACljYW4gb25seSBzZXQgZXhwZWN0YXRpb25zIG9uIG1vY2sgb2JqZWN0cwwAQADGAQAsb3JnL2ptb2NrL2ludGVybmFsL21hdGNoZXIvTW9ja09iamVjdE1hdGNoZXIMAEAAxwwAyABQDADJAMoMAGwAbQEAKG9yZy9qbW9jay9pbnRlcm5hbC9tYXRjaGVyL01ldGhvZE1hdGNoZXIHAMsMAMwAzQwAQADODADPAFAMANAA0QEALG9yZy9qbW9jay9pbnRlcm5hbC9tYXRjaGVyL1BhcmFtZXRlcnNNYXRjaGVyDADSANMMAEAA1AwA1QBQDABzAHAMAEAA1gwA1wDYDADZANgBAKtub3QgYWxsIHBhcmFtZXRlcnMgd2VyZSBnaXZlbiBleHBsaWNpdCBtYXRjaGVyczogZWl0aGVyIGFsbCBwYXJhbWV0ZXJzIG11c3QgYmUgc3BlY2lmaWVkIGJ5IG1hdGNoZXJzIG9yIGFsbCBtdXN0IGJlIHNwZWNpZmllZCBieSB2YWx1ZXMsIHlvdSBjYW5ub3QgbWl4IG1hdGNoZXJzIGFuZCB2YWx1ZXMBAB9qYXZhL2xhbmcvSWxsZWdhbFN0YXRlRXhjZXB0aW9uAQAjZXhwZWN0YXRpb24gd2FzIG5vdCBmdWxseSBzcGVjaWZpZWQMAGUAZgEALG9yZy9qbW9jay9pbnRlcm5hbC9tYXRjaGVyL01ldGhvZE5hbWVNYXRjaGVyDAB5AHoHANoMANsA3AEAFG9yZy9oYW1jcmVzdC9NYXRjaGVyDACBAIIBAC9vcmcvam1vY2svaW50ZXJuYWwvSW52b2NhdGlvbkV4cGVjdGF0aW9uQnVpbGRlcgEAEGphdmEvbGFuZy9PYmplY3QBACVvcmcvam1vY2svaW50ZXJuYWwvRXhwZWN0YXRpb25DYXB0dXJlAQAfb3JnL2ptb2NrL3N5bnRheC9SZWNlaXZlckNsYXVzZQEAHW9yZy9qbW9jay9zeW50YXgvTWV0aG9kQ2xhdXNlAQAhb3JnL2ptb2NrL3N5bnRheC9QYXJhbWV0ZXJzQ2xhdXNlAQAOamF2YS91dGlsL0xpc3QBAANhZGQBABUoTGphdmEvbGFuZy9PYmplY3Q7KVoBABJvcmcvam1vY2svU2VxdWVuY2UBABljb25zdHJhaW5Bc05leHRJblNlcXVlbmNlAQAtKExvcmcvam1vY2svaW50ZXJuYWwvSW52b2NhdGlvbkV4cGVjdGF0aW9uOylWAQAVKExqYXZhL2xhbmcvU3RyaW5nOylWAQAVKExqYXZhL2xhbmcvT2JqZWN0OylWAQAQc2V0T2JqZWN0TWF0Y2hlcgEAFGNhcHR1cmVFeHBlY3RhdGlvblRvAQA7KExvcmcvam1vY2svaW50ZXJuYWwvRXhwZWN0YXRpb25DYXB0dXJlOylMamF2YS9sYW5nL09iamVjdDsBABhvcmcvam1vY2svYXBpL0ludm9jYXRpb24BABBnZXRJbnZva2VkTWV0aG9kAQAcKClMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOwEAHShMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOylWAQAQc2V0TWV0aG9kTWF0Y2hlcgEAB2lzRW1wdHkBAAMoKVoBABRnZXRQYXJhbWV0ZXJzQXNBcnJheQEAFSgpW0xqYXZhL2xhbmcvT2JqZWN0OwEAFihbTGphdmEvbGFuZy9PYmplY3Q7KVYBABRzZXRQYXJhbWV0ZXJzTWF0Y2hlcgEAEyhMamF2YS91dGlsL0xpc3Q7KVYBAARzaXplAQADKClJAQARZ2V0UGFyYW1ldGVyQ291bnQBABBqYXZhL3V0aWwvQXJyYXlzAQAGYXNMaXN0AQAlKFtMamF2YS9sYW5nL09iamVjdDspTGphdmEvdXRpbC9MaXN0OwAhADEAMgAEADMANAA1ADYABAASADcAOAAAAAIAOQA6AAAAAgA7ADoAAAACADwAPQABAD4AAAACAD8AEwABAEAAQQABAEIAAABfAAMAAQAAACUqtwABKrsAAlm3AAO1AAQqA7UABSoEtQAGKrsAB1m3AAi1AAmxAAAA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hwBBAAEAQgAAADcAAgABAAAACSoDvQAvtgAwsQAAAAIAQwAAAAoAAgAAAIkACACKAEQAAAAMAAEAAAAJAEUARgAAAAEAiAAAAAIAiVBLAwQKAAAAAAB5WBg5Z7nomvcDAAD3AwAAOgAAAG9yZy9qbW9jay9pbnRlcm5hbC9JbnZvY2F0aW9uVG9FeHBlY3RhdGlvblRyYW5zbGF0b3IuY2xhc3PK/rq+AAAAMQAsCgAHABwJAAYAHQkABgAeCwAfACALACEAIgcAIwcAJAcAJQEAB2NhcHR1cmUBACdMb3JnL2ptb2NrL2ludGVybmFsL0V4cGVjdGF0aW9uQ2FwdHVyZTsBAA1kZWZhdWx0QWN0aW9uAQAWTG9yZy9qbW9jay9hcGkvQWN0aW9uOwEABjxpbml0PgEAQChMb3JnL2ptb2NrL2ludGVybmFsL0V4cGVjdGF0aW9uQ2FwdHVyZTtMb3JnL2ptb2NrL2FwaS9BY3Rpb247KVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEANkxvcmcvam1vY2svaW50ZXJuYWwvSW52b2NhdGlvblRvRXhwZWN0YXRpb25UcmFuc2xhdG9yOwEABmludm9rZQEALihMb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uOylMamF2YS9sYW5nL09iamVjdDsBAAppbnZvY2F0aW9uAQAaTG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbjsBAApFeGNlcHRpb25zBwAmAQAKU291cmNlRmlsZQEAJkludm9jYXRpb25Ub0V4cGVjdGF0aW9uVHJhbnNsYXRvci5qYXZhDAANACcMAAkACgwACwAMBwAoDAApACoHACsMABQAFQEANG9yZy9qbW9jay9pbnRlcm5hbC9JbnZvY2F0aW9uVG9FeHBlY3RhdGlvblRyYW5zbGF0b3IBABBqYXZhL2xhbmcvT2JqZWN0AQAXb3JnL2ptb2NrL2FwaS9JbnZva2FibGUBABNqYXZhL2xhbmcvVGhyb3dhYmxlAQADKClWAQAlb3JnL2ptb2NrL2ludGVybmFsL0V4cGVjdGF0aW9uQ2FwdHVyZQEAFWNyZWF0ZUV4cGVjdGF0aW9uRnJvbQEAHShMb3JnL2ptb2NrL2FwaS9J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bmFtZQEAEkxqYXZhL2xhbmcvU3RyaW5nOwEACGVsZW1lbnRzAQAQTGphdmEvdXRpbC9MaXN0OwEACVNpZ25hdHVyZQEALUxqYXZhL3V0aWwvTGlzdDxMb3JnL2ptb2NrL2FwaS9FeHBlY3RhdGlvbjs+OwEABjxpbml0PgEAFShMamF2YS9sYW5nL1N0cmluZzspVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAiTG9yZy9qbW9jay9pbnRlcm5hbC9OYW1lZFNlcXVlbmNlOwEAGWNvbnN0cmFpbkFzTmV4dEluU2VxdWVuY2UBAC0oTG9yZy9qbW9jay9pbnRlcm5hbC9JbnZvY2F0aW9uRXhwZWN0YXRpb247KVYBAAtleHBlY3RhdGlvbgEAKkxvcmcvam1vY2svaW50ZXJuYWwvSW52b2NhdGlvbkV4cGVjdGF0aW9uOwEABWluZGV4AQABSQEAEmlzU2F0aXNmaWVkVG9JbmRleAEABChJKVoBAAFpAQAKYWNjZXNzJDAwMAEAJihMb3JnL2ptb2NrL2ludGVybmFsL05hbWVkU2VxdWVuY2U7SSlaAQACeDABAAJ4MQEACmFjY2VzcyQxMDABADYoTG9yZy9qbW9jay9pbnRlcm5hbC9OYW1lZFNlcXVlbmNlOylMamF2YS9sYW5nL1N0cmluZzsBAApTb3VyY2VGaWxlAQASTmFtZWRTZXF1ZW5jZS5qYXZhDAAUABUMACcAKAwAGgBEAQATamF2YS91dGlsL0FycmF5TGlzdAwAFgAXBwBFDABGAEcMAEgASQEAPW9yZy9qbW9jay9pbnRlcm5hbC9OYW1lZFNlcXVlbmNlJEluU2VxdWVuY2VPcmRlcmluZ0NvbnN0cmFpbnQMABoASgcASwwATABNDABOAE8BABlvcmcvam1vY2svYXBpL0V4cGVjdGF0aW9uDABQAFEBACBvcmcvam1vY2svaW50ZXJuYWwvTmFtZWRTZXF1ZW5jZQEAEGphdmEvbGFuZy9PYmplY3QBABJvcmcvam1vY2svU2VxdWVuY2UBAAMoKVYBAA5qYXZhL3V0aWwvTGlzdAEABHNpemUBAAMoKUkBAANhZGQBABUoTGphdmEvbGFuZy9PYmplY3Q7KVoBACYoTG9yZy9qbW9jay9pbnRlcm5hbC9OYW1lZFNlcXVlbmNlO0kpVgEAKG9yZy9qbW9jay9pbnRlcm5hbC9JbnZvY2F0aW9uRXhwZWN0YXRpb24BABVhZGRPcmRlcmluZ0NvbnN0cmFpbnQBACooTG9yZy9qbW9jay9pbnRlcm5hbC9PcmRlcmluZ0NvbnN0cmFpbnQ7KVYBAANnZXQBABUoSSlMamF2YS9sYW5nL09iamVjdDsBAAtpc1NhdGlzZmllZAEAAygpWgAhAA8AEAABABEAAgASABQAFQAAAAIAFgAXAAEAGAAAAAIAGQAFAAEAGgAbAAEAHAAAAFUAAwACAAAAFSq3AAMquwAEWbcABbUABiortQABsQAAAAIAHQAAABIABAAAABUABAATAA8AFgAUABcAHgAAABYAAgAAABUAHwAgAAAAAAAVABQAFQABAAEAIQAiAAEAHAAAAG0ABQADAAAAIyq0AAa5AAcBAD0qtAAGK7kACAIAVyu7AAlZKhy3AAq2AAuxAAAAAgAdAAAAEgAEAAAAGgAKABsAFQAcACIAHQAeAAAAIAADAAAAIwAfACAAAAAAACMAIwAkAAEACgAZACUAJgACAAIAJwAoAAEAHAAAAHAAAgADAAAAJgM9HBuiACAqtAAGHLkADAIAwAANuQAOAQCaAAUDrIQCAaf/4QSsAAAAAgAdAAAAEgAEAAAAIAAHACEAHgAgACQAIwAeAAAAIAADAAIAIgApACYAAgAAACYAHwAgAAAAAAAmACUAJgABEAgAKgArAAEAHAAAADoAAgACAAAABiobtwACrAAAAAIAHQAAAAYAAQAAABEAHgAAABYAAgAAAAYALAAgAAAAAAAGAC0AJgABEAgALgAvAAEAHAAAAC8AAQABAAAABSq0AAGwAAAAAgAdAAAABgABAAAAEQAeAAAADAABAAAABQAsACAAAAACADAAAAACADEAEwAAAAoAAQAJAA8AEgAKUEsDBAoAAAAAAHlYGDncpzHJ9QQAAPUEAAA3AAAAb3JnL2ptb2NrL2ludGVybmFsL09iamVjdE1ldGhvZEV4cGVjdGF0aW9uQm91bmNlci5jbGFzc8r+ur4AAAAxACgKAAcAIAoABgAhBwAiCAAjCgADACQHACUHACYBAAY8aW5pdD4BABwoTG9yZy9qbW9jay9hcGkvSW52b2thYmxlOylWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBADNMb3JnL2ptb2NrL2ludGVybmFsL09iamVjdE1ldGhvZEV4cGVjdGF0aW9uQm91bmNlcjsBAARuZXh0AQAZTG9yZy9qbW9jay9hcGkvSW52b2thYmxlOwEACmZha2VFcXVhbHMBACcoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVoBAA1pbnZva2VkT2JqZWN0AQASTGphdmEvbGFuZy9PYmplY3Q7AQAFb3RoZXIBAAxmYWtlRmluYWxpemUBABUoTGphdmEvbGFuZy9PYmplY3Q7KVYBAAxmYWtlSGFzaENvZGUBABUoTGphdmEvbGFuZy9PYmplY3Q7KUkBAAxmYWtlVG9TdHJpbmcBACYoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvU3RyaW5nOwEAF2Nhbm5vdERlZmluZUV4cGVjdGF0aW9uAQAmKClMamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjsBAApTb3VyY2VGaWxlAQAjT2JqZWN0TWV0aG9kRXhwZWN0YXRpb25Cb3VuY2VyLmphdmEMAAgACQwAHAAdAQAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgEARnlvdSBjYW5ub3QgZGVmaW5lIGV4cGVjdGF0aW9ucyBmb3IgbWV0aG9kcyBkZWZpbmVkIGJ5IHRoZSBPYmplY3QgY2xhc3MMAAgAJwEAMW9yZy9qbW9jay9pbnRlcm5hbC9PYmplY3RNZXRob2RFeHBlY3RhdGlvbkJvdW5jZXIBACRvcmcvam1vY2svaW50ZXJuYWwvRmFrZU9iamVjdE1ldGhvZHMBABUoTGphdmEvbGFuZy9TdHJpbmc7KVYAIQAGAAcAAAAAAAYAAQAIAAkAAQAKAAAAPgACAAIAAAAGKiu3AAGxAAAAAgALAAAACgACAAAABwAFAAgADAAAABYAAgAAAAYADQAOAAAAAAAGAA8AEAABAAQAEQASAAEACgAAAEMAAQADAAAABSq3AAK/AAAAAgALAAAABgABAAAADAAMAAAAIAADAAAABQANAA4AAAAAAAUAEwAUAAEAAAAFABUAFAACAAQAFgAXAAEACgAAADkAAQACAAAABSq3AAK/AAAAAgALAAAABgABAAAAEQAMAAAAFgACAAAABQANAA4AAAAAAAUAEwAUAAEABAAYABkAAQAKAAAAOQABAAIAAAAFKrcAAr8AAAACAAsAAAAGAAEAAAAWAAwAAAAWAAIAAAAFAA0ADgAAAAAABQATABQAAQAEABoAGwABAAoAAAA5AAEAAgAAAAUqtwACvwAAAAIACwAAAAYAAQAAABsADAAAABYAAgAAAAUADQAOAAAAAAAFABMAFAABAAIAHAAdAAEACgAAADQAAwABAAAACrsAA1kSBLcABbAAAAACAAsAAAAGAAEAAAAfAAwAAAAMAAEAAAAKAA0ADgAAAAEAHgAAAAIAH1BLAwQKAAAAAAB5WBg5E4fEXM8AAADPAAAAKwAAAG9yZy9qbW9jay9pbnRlcm5hbC9PcmRlcmluZ0NvbnN0cmFpbnQuY2xhc3PK/rq+AAAAMQALBwAIBwAJBwAKAQATYWxsb3dzSW52b2NhdGlvbk5vdwEAAygpWgEAClNvdXJjZUZpbGUBABdPcmRlcmluZ0NvbnN0cmFpbnQuamF2YQEAJW9yZy9qbW9jay9pbnRlcm5hbC9PcmRlcmluZ0NvbnN0cmFpbnQBABBqYXZhL2xhbmcvT2JqZWN0AQAbb3JnL2hhbWNyZXN0L1NlbGZEZXNjcmliaW5nBgEAAQACAAEAAwAAAAEEAQAEAAUAAAABAAYAAAACAAdQSwMECgAAAAAAeVgYOdRPhaYWBAAAFgQAAC4AAABvcmcvam1vY2svaW50ZXJuYWwvUHJveGllZE9iamVjdElkZW50aXR5LmNsYXNzyv66vgAAADEAJgoABQAcCgAEAB0KAB4AHwcAIAcAIQEABjxpbml0PgEAHChMb3JnL2ptb2NrL2FwaS9JbnZva2FibGU7KVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAKkxvcmcvam1vY2svaW50ZXJuYWwvUHJveGllZE9iamVjdElkZW50aXR5OwEABG5leHQBABlMb3JnL2ptb2NrL2FwaS9JbnZva2FibGU7AQAMZmFrZUZpbmFsaXplAQAVKExqYXZhL2xhbmcvT2JqZWN0OylWAQANaW52b2tlZE9iamVjdAEAEkxqYXZhL2xhbmcvT2JqZWN0OwEACmZha2VFcXVhbHMBACcoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVoBAAVvdGhlcgEADGZha2VUb1N0cmluZwEAJihMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9TdHJpbmc7AQAMZmFrZUhhc2hDb2RlAQAVKExqYXZhL2xhbmcvT2JqZWN0OylJAQAKU291cmNlRmlsZQEAGlByb3hpZWRPYmplY3RJZGVudGl0eS5qYXZhDAAGAAcMACIAIwcAJAwAJQAZAQAob3JnL2ptb2NrL2ludGVybmFsL1Byb3hpZWRPYmplY3RJZGVudGl0eQEAJG9yZy9qbW9jay9pbnRlcm5hbC9GYWtlT2JqZWN0TWV0aG9kcwEACHRvU3RyaW5nAQAUKClMamF2YS9sYW5nL1N0cmluZzsBABBqYXZhL2xhbmcvU3lzdGVtAQAQaWRlbnRpdHlIYXNoQ29kZQAhAAQABQAAAAAABQABAAYABwABAAgAAAA+AAIAAgAAAAYqK7cAAbEAAAACAAkAAAAKAAIAAAAIAAUACQAKAAAAFgACAAAABgALAAwAAAAAAAYADQAOAAEABAAPABAAAQAIAAAANQAAAAIAAAABsQAAAAIACQAAAAYAAQAAAA0ACgAAABYAAgAAAAEACwAMAAAAAAABABEAEgABAAQAEwAUAAEACAAAAEkAAgADAAAACywrpgAHBKcABAOsAAAAAgAJAAAABgABAAAAEQAKAAAAIAADAAAACwALAAwAAAAAAAsAEQASAAEAAAALABUAEgACAAQAFgAXAAEACAAAADkAAQACAAAABSq2AAKwAAAAAgAJAAAABgABAAAAFgAKAAAAFgACAAAABQALAAwAAAAAAAUAEQASAAEABAAYABkAAQAIAAAAOQABAAIAAAAFK7gAA6wAAAACAAkAAAAGAAEAAAAbAAoAAAAWAAIAAAAFAAsADAAAAAAABQARABIAAQABABoAAAACABtQSwMECgAAAAAAeVgYOQlUqQW2DQAAtg0AADEAAABvcmcvam1vY2svaW50ZXJuYWwvUmV0dXJuRGVmYXVsdFZhbHVlQWN0aW9uLmNsYXNzyv66vgAAADEAtgoAMwBdBwBeCgACAF0JADQAXwkANABgCgA0AGEHAGIKAAcAXQoANABjCABkCwBlAGYLAGcAaAoAaQBqCgBrAGwLAGcAbQsAZwBuCgAVAG8KABUAcAoAcQByCwBzAHQHAHULAHMAdgkAMAB3CQAwAHgKADQAeQkAegB3CQAcAHcHAHsKABwAfAkAHwB3BwB9CgAfAH4JACIAdwcAfwoAIgCACQAlAHcHAIEKACUAggkAKAB3BwCDCgAoAIQJACsAdwcAhQoAKwCGCQAuAHcHAIcKAC4AiAcAiQcAiggAiwcAjAcAjQcAjgEAEnJlc3VsdFZhbHVlc0J5VHlwZQEAD0xqYXZhL3V0aWwvTWFwOwEACVNpZ25hdHVyZQEAN0xqYXZhL3V0aWwvTWFwPExqYXZhL2xhbmcvQ2xhc3M8Kj47TGphdmEvbGFuZy9PYmplY3Q7PjsBAAxpbXBvc3RlcmlzZXIBABxMb3JnL2ptb2NrL2FwaS9JbXBvc3RlcmlzZXI7AQAGPGluaXQ+AQAfKExvcmcvam1vY2svYXBpL0ltcG9zdGVyaXNlcjspVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAtTG9yZy9qbW9jay9pbnRlcm5hbC9SZXR1cm5EZWZhdWx0VmFsdWVBY3Rpb247AQADKClWAQAPc2V0SW1wb3N0ZXJpc2VyAQAPbmV3SW1wb3N0ZXJpc2VyAQAKZGVzY3JpYmVUbwEAHShMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOylWAQALZGVzY3JpcHRpb24BABpMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOwEACWFkZFJlc3VsdAEAJihMamF2YS9sYW5nL0NsYXNzO0xqYXZhL2xhbmcvT2JqZWN0OylWAQAKcmVzdWx0VHlwZQEAEUxqYXZhL2xhbmcvQ2xhc3M7AQALcmVzdWx0VmFsdWUBABJMamF2YS9sYW5nL09iamVjdDsBABZMb2NhbFZhcmlhYmxlVHlwZVRhYmxlAQAUTGphdmEvbGFuZy9DbGFzczwqPjsBACkoTGphdmEvbGFuZy9DbGFzczwqPjtMamF2YS9sYW5nL09iamVjdDspVgEABmludm9rZQEALihMb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uOylMamF2YS9sYW5nL09iamVjdDsBAAppbnZvY2F0aW9uAQAaTG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbjsBAApyZXR1cm5UeXBlAQAKRXhjZXB0aW9ucwcAjwEAFGNyZWF0ZURlZmF1bHRSZXN1bHRzAQAKU291cmNlRmlsZQEAHVJldHVybkRlZmF1bHRWYWx1ZUFjdGlvbi5qYXZhDAA8AEMBABFqYXZhL3V0aWwvSGFzaE1hcAwANgA3DAA6ADsMAFoAQwEAKG9yZy9qbW9jay9saWIvSmF2YVJlZmxlY3Rpb25JbXBvc3RlcmlzZXIMADwAPQEAF3JldHVybnMgYSBkZWZhdWx0IHZhbHVlBwCQDACRAJIHAJMMAJQAlQcAlgwAlwCYBwCZDACaAJsMAJwAnQwAngCfDACgAKEMAKIAmwcAowwApAClBwCmDACnAKgBAA9qYXZhL2xhbmcvQ2xhc3MMAKkAqgwAqwBNDACsAK0MAEoASwcArgEADmphdmEvbGFuZy9CeXRlDAA8AK8BAA9qYXZhL2xhbmcvU2hvcnQMADwAsAEAEWphdmEvbGFuZy9JbnRlZ2VyDAA8ALEBAA5qYXZhL2xhbmcvTG9uZwwAPACyAQATamF2YS9sYW5nL0NoYXJhY3RlcgwAPACzAQAPamF2YS9sYW5nL0Zsb2F0DAA8ALQBABBqYXZhL2xhbmcvRG91YmxlDAA8ALUBABFqYXZhL2xhbmcvQm9vbGVhbgEAEGphdmEvbGFuZy9TdHJpbmcBAAABABBqYXZhL2xhbmcvT2JqZWN0AQArb3JnL2ptb2NrL2ludGVybmFsL1JldHVybkRlZmF1bHRWYWx1ZUFjdGlvbgEAFG9yZy9qbW9jay9hcGkvQWN0aW9uAQATamF2YS9sYW5nL1Rocm93YWJsZQEAGG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbgEACmFwcGVuZFRleHQBAC4oTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb247AQANamF2YS91dGlsL01hcAEAA3B1dAEAOChMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7AQAYb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uAQAQ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AE8AUQcAUgcAUwoACABUCgAIAFUHAFYKAAsAVwoAWABZCgAIAFoKAFsAXAoAWwBdCgAHAF4LAE8AXwsATwBgCgAHAGEKAAcAYgEADG5leHRUb1NlYXJjaAEAF0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7AQAGPGluaXQ+AQAxKExqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7TGphdmEvbGFuZy9DbGFzc0xvYWRlcjspVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQApTG9yZy9qbW9jay9pbnRlcm5hbC9TZWFyY2hpbmdDbGFzc0xvYWRlcjsBAAZwYXJlbnQBAAdjb21iaW5lAQAxKFtMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylMamF2YS9sYW5nL0NsYXNzTG9hZGVyOwEADXBhcmVudExvYWRlcnMBABhbTGphdmEvbGFuZy9DbGFzc0xvYWRlcjsBACkoTGphdmEvdXRpbC9MaXN0OylMamF2YS9sYW5nL0NsYXNzTG9hZGVyOwEAAWkBAAFJAQAQTGphdmEvdXRpbC9MaXN0OwEABmxvYWRlcgEAFkxvY2FsVmFyaWFibGVUeXBlVGFibGUBAClMamF2YS91dGlsL0xpc3Q8TGphdmEvbGFuZy9DbGFzc0xvYWRlcjs+OwEACVNpZ25hdHVyZQEAQihMamF2YS91dGlsL0xpc3Q8TGphdmEvbGFuZy9DbGFzc0xvYWRlcjs+OylMamF2YS9sYW5nL0NsYXNzTG9hZGVyOwEAEGNvbWJpbmVMb2FkZXJzT2YBACsoW0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7AQAHY2xhc3NlcwEAEltMamF2YS9sYW5nL0NsYXNzOwEAFVtMamF2YS9sYW5nL0NsYXNzPCo+OwEALihbTGphdmEvbGFuZy9DbGFzczwqPjspTGphdmEvbGFuZy9DbGFzc0xvYWRlcjsBADwoTGphdmEvbGFuZy9DbGFzcztbTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9DbGFzc0xvYWRlcjsBAAFjAQARTGphdmEvbGFuZy9DbGFzczsBAARhcnIkAQAEbGVuJAEAAmkkAQAFZmlyc3QBAAZvdGhlcnMBAAdsb2FkZXJzAQAUTGphdmEvbGFuZy9DbGFzczwqPjsBAEIoTGphdmEvbGFuZy9DbGFzczwqPjtbTGphdmEvbGFuZy9DbGFzczwqPjspTGphdmEvbGFuZy9DbGFzc0xvYWRlcjsBAA9hZGRJZk5ld0VsZW1lbnQBACooTGphdmEvdXRpbC9MaXN0O0xqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7KVYBAEMoTGphdmEvdXRpbC9MaXN0PExqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7PjtMamF2YS9sYW5nL0NsYXNzTG9hZGVyOylWAQAJZmluZENsYXNzAQAlKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL0NsYXNzOwEABG5hbWUBABJMamF2YS9sYW5nL1N0cmluZzsBAApFeGNlcHRpb25zBwBjAQAoKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL0NsYXNzPCo+OwEAClNvdXJjZUZpbGUBABlTZWFyY2hpbmdDbGFzc0xvYWRlci5qYXZhDAAYAGQMABYAFwcAZQwAZgBnDAAgACQHAGgMAGkAagwAawBsAQAVamF2YS9sYW5nL0NsYXNzTG9hZGVyAQAnb3JnL2ptb2NrL2ludGVybmFsL1NlYXJjaGluZ0NsYXNzTG9hZGVyDAAYABkMAC0AMwEAE2phdmEvdXRpbC9BcnJheUxpc3QMABgAbQcAbgwAbwBwDAA+AD8HAHEMAHIAcwwAdABwDAB1AHAMAHYAdwwAeAB3DAB5AEIMAEEAQgEAIGphdmEvbGFuZy9DbGFzc05vdEZvdW5kRXhjZXB0aW9uAQAaKExqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7KVYBABBqYXZhL3V0aWwvQXJyYXlzAQAGYXNMaXN0AQAlKFtMamF2YS9sYW5nL09iamVjdDspTGphdmEvdXRpbC9MaXN0OwEADmphdmEvdXRpbC9MaXN0AQAEc2l6ZQEAAygpSQEAA2dldAEAFShJKUxqYXZhL2xhbmcvT2JqZWN0OwEAAygpVgEAD2phdmEvbGFuZy9DbGFzcwEADmdldENsYXNzTG9hZGVyAQAZKClMamF2YS9sYW5nL0NsYXNzTG9hZGVyOwEAEGphdmEvbGFuZy9UaHJlYWQBAA1jdXJy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dGF0ZU1hY2hpbmU7AQAGPGluaXQ+AQA2KExvcmcvam1vY2svaW50ZXJuYWwvU3RhdGVNYWNoaW5lO0xqYXZhL2xhbmcvU3RyaW5nOylWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBAAABAAxJbm5lckNsYXNzZXMBACNMb3JnL2ptb2NrL2ludGVybmFsL1N0YXRlTWFjaGluZSQxOwEACGFjdGl2YXRlAQADKClWAQAIaXNBY3RpdmUBAAMoKVoBAApkZXNjcmliZVRvAQAdKExvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb247KVYBAAtkZXNjcmlwdGlvbgEAGkxvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb247AQAKU291cmNlRmlsZQEAEVN0YXRlTWFjaGluZS5qYXZhAQAPRW5jbG9zaW5nTWV0aG9kBwA1DAA2ADcMAA8AEAwADQAODAARABsMADgAOQwAOgA7BwA8DAA9AD4MAD8AOwcAQAwAQQBCAQAEIGlzIAEAIW9yZy9qbW9jay9pbnRlcm5hbC9TdGF0ZU1hY2hpbmUkMQEAEGphdmEvbGFuZy9PYmplY3QBABhvcmcvam1vY2svaW50ZXJuYWwvU3RhdGUBAB9vcmcvam1vY2svaW50ZXJuYWwvU3RhdGVNYWNoaW5lAQACaXMBAC4oTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvam1vY2svaW50ZXJuYWwvU3RhdGU7AQAKYWNjZXNzJDAwMgEARyhMb3JnL2ptb2NrL2ludGVybmFsL1N0YXRlTWFjaGluZTtMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7AQAKYWNjZXNzJDAwMAEANShMb3JnL2ptb2NrL2ludGVybmFsL1N0YXRlTWFjaGluZTspTGphdmEvbGFuZy9TdHJpbmc7AQAQamF2YS9sYW5nL1N0cmluZwEABmVxdWFscwEAFShMamF2YS9sYW5nL09iamVjdDspWgEACmFjY2VzcyQxMDABABhvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb24BAAphcHBlbmRUZXh0AQAuKExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9u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ADUKABEANgoAEAA3BwA4CgAFADsHADwKAAcAOwsAPQA+CAA/BwBACgALADYIAEEKAAsAQgoACwBDBwBEBwBFBwBGAQAEbmFtZQEAEkxqYXZhL2xhbmcvU3RyaW5nOwEADGN1cnJlbnRTdGF0ZQEABjxpbml0PgEAFShMamF2YS9sYW5nL1N0cmluZzspVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAhTG9yZy9qbW9jay9pbnRlcm5hbC9TdGF0ZU1hY2hpbmU7AQAIc3RhcnRzQXMBACYoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvam1vY2svU3RhdGVzOwEADGluaXRpYWxTdGF0ZQEABmJlY29tZQEACW5leHRTdGF0ZQEAAmlzAQAuKExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL2ptb2NrL2ludGVybmFsL1N0YXRlOwEABXN0YXRlAQAFaXNOb3QBADcoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvam1vY2svaW50ZXJuYWwvU3RhdGVQcmVkaWNhdGU7AQAKZGVzY3JpYmVUbwEAHShMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOylWAQALZGVzY3JpcHRpb24BABpMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOwEACmFjY2VzcyQwMDIBAEcoTG9yZy9qbW9jay9pbnRlcm5hbC9TdGF0ZU1hY2hpbmU7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nOwEAAngwAQACeDEBAAphY2Nlc3MkMDAwAQA1KExvcmcvam1vY2svaW50ZXJuYWwvU3RhdGVNYWNoaW5lOylMamF2YS9sYW5nL1N0cmluZzsBAAphY2Nlc3MkMTAwAQAKU291cmNlRmlsZQEAEVN0YXRlTWFjaGluZS5qYXZhDAATABQMABUAFAwAFgBHDAAgABcBACFvcmcvam1vY2svaW50ZXJuYWwvU3RhdGVNYWNoaW5lJDEBAAABAAxJbm5lckNsYXNzZXMMABYASAEAIW9yZy9qbW9jay9pbnRlcm5hbC9TdGF0ZU1hY2hpbmUkMgcASQwASgBLAQAVIGhhcyBubyBjdXJyZW50IHN0YXRlAQAXamF2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ZXRob2ROYW1lTWF0Y2hlci5jbGFzc8r+ur4AAAAxAEUKAAwAJwoAKAApCQALACoKAAkAKwoAKAAsCgAtAC4KACgALwsAMAAxBwAyCgALADMHADQHADUBAAtuYW1lUGF0dGVybgEAGUxqYXZhL3V0aWwvcmVnZXgvUGF0dGVybjsBAAY8aW5pdD4BABUoTGphdmEvbGFuZy9TdHJpbmc7KVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEALkxvcmcvam1vY2svaW50ZXJuYWwvbWF0Y2hlci9NZXRob2ROYW1lTWF0Y2hlcjsBAAluYW1lUmVnZXgBABJMamF2YS9sYW5nL1N0cmluZzsBAA1tYXRjaGVzU2FmZWx5AQAdKExqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7KVoBAAZtZXRob2QBABpMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOwEACmRlc2NyaWJlVG8BAB0oTG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbjspVgEAC2Rlc2NyaXB0aW9uAQAaTG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbjsBABUoTGphdmEvbGFuZy9PYmplY3Q7KVoBAAJ4MAEAEkxqYXZhL2xhbmcvT2JqZWN0OwEACVNpZ25hdHVyZQEAOkxvcmcvaGFtY3Jlc3QvVHlwZVNhZmVNYXRjaGVyPExqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7PjsBAApTb3VyY2VGaWxlAQAWTWV0aG9kTmFtZU1hdGNoZXIuamF2YQwADwA2BwA3DAA4ADkMAA0ADgwAOgA7DAA8AD0HAD4MAD8AQAwAQQA7BwBCDABDAEQBABhqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2QMABgAGQEALG9yZy9qbW9jay9pbnRlcm5hbC9tYXRjaGVyL01ldGhvZE5hbWVNYXRjaGVyAQAcb3JnL2hhbWNyZXN0L1R5cGVTYWZlTWF0Y2hlcgEAAygpVgEAF2phdmEvdXRpbC9yZWdleC9QYXR0ZXJuAQAHY29tcGlsZQEALShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvdXRpbC9yZWdleC9QYXR0ZXJuOwEAB2dldE5hbWUBABQoKUxqYXZhL2xhbmcvU3RyaW5nOwEAB21hdGNoZXIBADMoTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7KUxqYXZhL3V0aWwvcmVnZXgvTWF0Y2hlcjsBABdqYXZhL3V0aWwvcmVnZXgvTWF0Y2hlcgEAB21hdGNoZXMBAAMoKVoBAAh0b1N0cmluZwEAGG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbgEACmFwcGVuZFRleHQBAC4oTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb247ACEACwAMAAAAAQAAAA0ADgAAAAQAAQAPABAAAQARAAAASQACAAIAAAANKrcAASoruAACtQADsQAAAAIAEgAAAA4AAwAAAA8ABAAQAAwAEQATAAAAFgACAAAADQAUABUAAAAAAA0AFgAXAAEAAQAYABkAAQARAAAAQwACAAIAAAAPKrQAAyu2AAS2AAW2AAasAAAAAgASAAAABgABAAAAFQATAAAAFgACAAAADwAUABUAAAAAAA8AGgAbAAEAAQAcAB0AAQARAAAARwACAAIAAAAPKyq0AAO2AAe5AAgCAFexAAAAAgASAAAACgACAAAAGQAOABoAEwAAABYAAgAAAA8AFAAVAAAAAAAPAB4AHwABEEEAGAAgAAEAEQAAAD0AAgACAAAACSorwAAJtgAKrAAAAAIAEgAAAAYAAQAAAAwAEwAAABYAAgAAAAkAFAAVAAAAAAAJACEAIgABAAIAIwAAAAIAJAAlAAAAAgAmUEsDBAoAAAAAAHpYGDlWQ6ixxQMAAMUDAAAyAAAAb3JnL2ptb2NrL2ludGVybmFsL21hdGNoZXIvTW9ja09iamVjdE1hdGNoZXIuY2xhc3PK/rq+AAAAMQAqCgAGABsJAAUAHAoAHQAeCwAfACAHACEHACIBAAptb2NrT2JqZWN0AQASTGphdmEvbGFuZy9PYmplY3Q7AQAGPGluaXQ+AQAVKExqYXZhL2xhbmcvT2JqZWN0OylWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBAC5Mb3JnL2ptb2NrL2ludGVybmFsL21hdGNoZXIvTW9ja09iamVjdE1hdGNoZXI7AQAHbWF0Y2hlcwEAFShMamF2YS9sYW5nL09iamVjdDspWgEAAW8BAApkZXNjcmliZVRvAQAdKExvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb247KVYBAAtkZXNjcmlwdGlvbgEAGkxvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb247AQAJU2lnbmF0dXJlAQAuTG9yZy9oYW1jcmVzdC9CYXNlTWF0Y2hlcjxMamF2YS9sYW5nL09iamVjdDs+OwEAClNvdXJjZUZpbGUBABZNb2NrT2JqZWN0TWF0Y2hlci5qYXZhDAAJACMMAAcACAcAJAwAJQAmBwAnDAAoACkBACxvcmcvam1vY2svaW50ZXJuYWwvbWF0Y2hlci9Nb2NrT2JqZWN0TWF0Y2hlcgEAGG9yZy9oYW1jcmVzdC9CYXNlTWF0Y2hlcgEAAygpVgEAEGphdmEvbGFuZy9PYmplY3QBAAh0b1N0cmluZwEAFCgpTGphdmEvbGFuZy9TdHJpbmc7AQAYb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uAQAKYXBwZW5kVGV4dAEALihMamF2YS9sYW5nL1N0cmluZzspTG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbjsAIQAFAAYAAAABAAIABwAIAAAAAwABAAkACgABAAsAAABGAAIAAgAAAAoqtwABKiu1AAKxAAAAAgAMAAAADgADAAAACQAEAAoACQALAA0AAAAWAAIAAAAKAA4ADwAAAAAACgAHAAgAAQABABAAEQABAAsAAABCAAIAAgAAAA4rKrQAAqYABwSnAAQDrAAAAAIADAAAAAYAAQAAAA4ADQAAABYAAgAAAA4ADgAPAAAAAAAOABIACAABAAEAEwAUAAEACwAAAEcAAgACAAAADysqtAACtgADuQAEAgBXsQAAAAIADAAAAAoAAgAAABIADgATAA0AAAAWAAIAAAAPAA4ADwAAAAAADwAVABYAAQACABcAAAACABgAGQAAAAIAGlBLAwQKAAAAAAB6WBg5kSGWPSgGAAAoBgAAMgAAAG9yZy9qbW9jay9pbnRlcm5hbC9tYXRjaGVyL1BhcmFtZXRlcnNNYXRjaGVyLmNsYXNzyv66vgAAADEAOgoACgAqCgALACsHACwHAC0KAAQALgsALwAwBwAaCAAxCAAyBwAzBwA0AQAGPGluaXQ+AQAWKFtMamF2YS9sYW5nL09iamVjdDspVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAuTG9yZy9qbW9jay9pbnRlcm5hbC9tYXRjaGVyL1BhcmFtZXRlcnNNYXRjaGVyOwEADmV4cGVjdGVkVmFsdWVzAQATW0xqYXZhL2xhbmcvT2JqZWN0OwEAEGVxdWFsTWF0Y2hlcnNGb3IBACwoW0xqYXZhL2xhbmcvT2JqZWN0OylbTG9yZy9oYW1jcmVzdC9NYXRjaGVyOwEAAWkBAAFJAQAIbWF0Y2hlcnMBABdbTG9yZy9oYW1jcmVzdC9NYXRjaGVyOwEAFkxvY2FsVmFyaWFibGVUeXBlVGFibGUBACtbTG9yZy9oYW1jcmVzdC9NYXRjaGVyPExqYXZhL2xhbmcvT2JqZWN0Oz47AQAJU2lnbmF0dXJlAQBAKFtMamF2YS9sYW5nL09iamVjdDspW0xvcmcvaGFtY3Jlc3QvTWF0Y2hlcjxMamF2YS9sYW5nL09iamVjdDs+OwEAEyhMamF2YS91dGlsL0xpc3Q7KVYBABFwYXJhbWV0ZXJNYXRjaGVycwEAEExqYXZhL3V0aWwvTGlzdDsBACtMamF2YS91dGlsL0xpc3Q8TG9yZy9oYW1jcmVzdC9NYXRjaGVyPCo+Oz47AQAuKExqYXZhL3V0aWwvTGlzdDxMb3JnL2hhbWNyZXN0L01hdGNoZXI8Kj47PjspVgEAEGRlc2NyaXB0aW9uU3RhcnQBABQoKUxqYXZhL2xhbmcvU3RyaW5nOwEADmRlc2NyaXB0aW9uRW5kAQA1TG9yZy9oYW1jcmVzdC9jb2xsZWN0aW9uL0lzQXJyYXk8TGphdmEvbGFuZy9PYmplY3Q7PjsBAApTb3VyY2VGaWxlAQAWUGFyYW1ldGVyc01hdGNoZXIuamF2YQwAFQAWDAAMADUBABRvcmcvaGFtY3Jlc3QvTWF0Y2hlcgEAGW9yZy9oYW1jcmVzdC9jb3JlL0lzRXF1YWwMAAwANgcANwwAOAA5AQABKAEAASkBACxvcmcvam1vY2svaW50ZXJuYWwvbWF0Y2hlci9QYXJhbWV0ZXJzTWF0Y2hlcgEAH29yZy9oYW1jcmVzdC9jb2xsZWN0aW9uL0lzQXJyYXkBABooW0xvcmcvaGFtY3Jlc3QvTWF0Y2hlcjspVgEA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c3M7KUxqYXZhL2xhbmcvU3RyaW5nOwEACnR5cGVUb01vY2sBABFMamF2YS9sYW5nL0NsYXNzOwEACnNpbXBsZU5hbWUBABJMamF2YS9sYW5nL1N0cmluZzsBAANsY2kBAAFJAQAHY2Fwc0VuZAEABGNhcHMBAARyZXN0AQAWTG9jYWxWYXJpYWJsZVR5cGVUYWJsZQEAFExqYXZhL2xhbmcvQ2xhc3M8Kj47AQAJU2lnbmF0dXJlAQAoKExqYXZhL2xhbmcvQ2xhc3M8Kj47KUxqYXZhL2xhbmcvU3RyaW5nOwEAG2luZGV4T2ZGaXJzdExvd2VyQ2FzZUxldHRlcgEAFShMamF2YS9sYW5nL1N0cmluZzspSQEAAWkBAAg8Y2xpbml0PgEAClNvdXJjZUZpbGUBABpDYW1lbENhc2VOYW1pbmdTY2hlbWUuamF2YQwAFQAWBwBDDABEAEUMACoAKwcARgwARwBIDABJAEoMAEkASwEAF2phdmEvbGFuZy9TdHJpbmdCdWlsZGVyDABMAEUMAE0ATgwATwBFDABQAFEHAFIMAFMAVAEAI29yZy9qbW9jay9saWIvQ2FtZWxDYXNlTmFtaW5nU2NoZW1lDAATABQBABBqYXZhL2xhbmcvT2JqZWN0AQAkb3JnL2ptb2NrL2FwaS9Nb2NrT2JqZWN0TmFtaW5nU2NoZW1lAQAPamF2YS9sYW5nL0NsYXNzAQANZ2V0U2ltcGxlTmFtZQEAFCgpTGphdmEvbGFuZy9TdHJpbmc7AQAQamF2YS9sYW5nL1N0cmluZwEABmxlbmd0aAEAAygpSQEACXN1YnN0cmluZwEAFihJSSlMamF2YS9sYW5nL1N0cmluZzsBABUoSSlMamF2YS9sYW5nL1N0cmluZzsBAAt0b0xvd2VyQ2FzZQEABmFwcGVuZAEALShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOwEACHRvU3RyaW5nAQAGY2hhckF0AQAEKEkpQwEAE2phdmEvbGFuZy9DaGFyYWN0ZXIBAAtpc0xvd2VyQ2FzZQEABChDKVoAIQAOABEAAQASAAEAGQATABQAAAAEAAEAFQAWAAEAFwAAAC8AAQABAAAABSq3AAGxAAAAAgAYAAAABgABAAAAEAAZAAAADAABAAAABQAaABQAAAABABsAHAACABcAAADkAAMABwAAAFArtgACTSostwADPh2aAAUssB0EnwALHSy2AASgAAcdpwAGHQRkNgQsAxUEtgAFOgUsFQS2AAY6BrsAB1m3AAgZBbYACbYAChkGtgAKtgALsAAAAAMAGAAAACIACAAAABQABQAVAAsAFwAPABgAEQAbACcAHQAwAB4AOAAgABkAAABIAAcAAABQABoAFAAAAAAAUAAdAB4AAQAFAEsAHwAgAAIACwBFACEAIgADACcAKQAjACIABAAwACAAJAAgAAUAOAAYACUAIAAGACYAAAAMAAEAAABQAB0AJwABACgAAAACACkAAgAqACsAAQAXAAAAawACAAMAAAAdAz0cK7YABKIAFCsctgAMuAANmgAJhAIBp//qHKwAAAACABgAAAAWAAUAAAAkAAIAJgAVACcAGAAoABsAKgAZAAAAIAADAAAAHQAaABQAAAAAAB0AHwAgAAEAAgAbACwAIgACAAgALQAWAAEAFwAAACMAAgAAAAAAC7sADlm3AA+zABCxAAAAAQAYAAAABgABAAAAEQABAC4AAAACAC9QSwMECgAAAAAAelgYORFFDqKeAgAAngIAADYAAABvcmcvam1vY2svbGliL0lkZW50aXR5RXhwZWN0YXRpb25FcnJvclRyYW5zbGF0b3IuY2xhc3PK/rq+AAAAMQAbCgAFABYHABcKAAIAFgkAAgAYBwAZBwAaAQAISU5TVEFOQ0UBADJMb3JnL2ptb2NrL2xpYi9JZGVudGl0eUV4cGVjdGF0aW9uRXJyb3JUcmFuc2xhdG9yOwEABjxpbml0PgEAAygpVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAJdHJhbnNsYXRlAQAzKExvcmcvam1vY2svYXBpL0V4cGVjdGF0aW9uRXJyb3I7KUxqYXZhL2xhbmcvRXJyb3I7AQABZQEAIExvcmcvam1vY2svYXBpL0V4cGVjdGF0aW9uRXJyb3I7AQAIPGNsaW5pdD4BAApTb3VyY2VGaWxlAQAnSWRlbnRpdHlFeHBlY3RhdGlvbkVycm9yVHJhbnNsYXRvci5qYXZhDAAJAAoBADBvcmcvam1vY2svbGliL0lkZW50aXR5RXhwZWN0YXRpb25FcnJvclRyYW5zbGF0b3IMAAcACAEAEGphdmEvbGFuZy9PYmplY3QBAChvcmcvam1vY2svYXBpL0V4cGVjdGF0aW9uRXJyb3JUcmFuc2xhdG9yACEAAgAFAAEABgABABkABwAIAAAAAwACAAkACgABAAsAAAAvAAEAAQAAAAUqtwABsQAAAAIADAAAAAYAAQAAABIADQAAAAwAAQAAAAUADgAIAAAAAQAPABAAAQALAAAANgABAAIAAAACK7AAAAACAAwAAAAGAAEAAAAVAA0AAAAWAAIAAAACAA4ACAAAAAAAAgARABIAAQAIABMACgABAAsAAAAjAAIAAAAAAAu7AAJZtwADswAEsQAAAAEADAAAAAYAAQAAABAAAQAUAAAAAgAVUEsDBAoAAAAAAHpYGDkRJFTeTgUAAE4FAAAwAAAAb3JnL2ptb2NrL2xpYi9KYXZhUmVmbGVjdGlvbkltcG9zdGVyaXNlciQxLmNsYXNzyv66vgAAADEAOAkABwAmCQAHACcKAAgAKAcAKQoABAAqCwArACwHAC0HAC4HAC8BAA52YWwkbW9ja09iamVjdAEAGUxvcmcvam1vY2svYXBpL0ludm9rYWJsZTsBAAZ0aGlzJDABACpMb3JnL2ptb2NrL2xpYi9KYXZhUmVmbGVjdGlvbkltcG9zdGVyaXNlcjsBAAY8aW5pdD4BAEYoTG9yZy9qbW9jay9saWIvSmF2YVJlZmxlY3Rpb25JbXBvc3RlcmlzZXI7TG9yZy9qbW9jay9hcGkvSW52b2thYmxlOylWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBAAABAAxJbm5lckNsYXNzZXMBACxMb3JnL2ptb2NrL2xpYi9KYXZhUmVmbGVjdGlvbkltcG9zdGVyaXNlciQxOwEACkV4Y2VwdGlvbnMHADABAAZpbnZva2UBAFMoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZDtbTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OwEABXByb3h5AQASTGphdmEvbGFuZy9PYmplY3Q7AQAGbWV0aG9kAQAaTGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZDsBAARhcmdzAQATW0xqYXZhL2xhbmcvT2JqZWN0OwEAClNvdXJjZUZpbGUBAB9KYXZhUmVmbGVjdGlvbkltcG9zdGVyaXNlci5qYXZhAQAPRW5jbG9zaW5nTWV0aG9kBwAxDAAyADMMAAwADQwACgALDAAOADQBABhvcmcvam1vY2svYXBpL0ludm9jYXRpb24MAA4ANQcANgwAGQA3AQAqb3JnL2ptb2NrL2xpYi9KYXZhUmVmbGVjdGlvbkltcG9zdGVyaXNlciQxAQAQamF2YS9sYW5nL09iamVjdAEAI2phdmEvbGFuZy9yZWZsZWN0L0ludm9jYXRpb25IYW5kbGVyAQATamF2YS9sYW5nL1Rocm93YWJsZQEAKG9yZy9qbW9jay9saWIvSmF2YVJlZmxlY3Rpb25JbXBvc3RlcmlzZXIBAAtpbXBvc3RlcmlzZQEAUChMb3JnL2ptb2NrL2FwaS9JbnZva2FibGU7TGphdmEvbGFuZy9DbGFzcztbTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9PYmplY3Q7AQADKClWAQBCKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7W0xqYXZhL2xhbmcvT2JqZWN0OylWAQAXb3JnL2ptb2NrL2FwaS9JbnZva2FibGUBAC4oTG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbjspTGphdmEvbGFuZy9PYmplY3Q7ACAABwAIAAEACQACEBAACgALAAAQEAAMAA0AAAACAAAADgAPAAIAEAAAADkAAgADAAAADyortQABKiy1AAIqtwADsQAAAAIAEQAAAAYAAQAAACAAEgAAAAwAAQAAAA8AEwAWAAAAFwAAAAQAAQAYAAEAGQAaAAIAEAAAAFwABgAEAAAAFCq0AAK7AARZKywttwAFuQAGAgCwAAAAAgARAAAABgABAAAAIQASAAAAKgAEAAAAFAATABYAAAAAABQAGwAcAAEAAAAUAB0AHgACAAAAFAAfACAAAwAXAAAABAABABgAAwAhAAAAAgAiACMAAAAEACQAJQAVAAAACgABAAcAAAAAAABQSwMECgAAAAAAelgYOWXZ1qW9CAAAvQgAAC4AAABvcmcvam1vY2svbGliL0phdmFSZWZsZWN0aW9uSW1wb3N0ZXJpc2VyLmNsYXNzyv66vgAAADEAUwoADQA1CgAIADYKAAoANwoAOAA5BwA6CgAFAD0KAD4APwcAQAoAQQBCBwBDCgAKADUJAAoARAcARQcARgEACElOU1RBTkNFAQAcTG9yZy9qbW9jay9hcGkvSW1wb3N0ZXJpc2VyOwEABjxpbml0PgEAAygpVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAqTG9yZy9qbW9jay9saWIvSmF2YVJlZmxlY3Rpb25JbXBvc3RlcmlzZXI7AQAOY2FuSW1wb3N0ZXJpc2UBABQoTGphdmEvbGFuZy9DbGFzczspWgEABHR5cGUBABFMamF2YS9sYW5nL0NsYXNzOwEAFkxvY2FsVmFyaWFibGVUeXBlVGFibGUBABRMamF2YS9sYW5nL0NsYXNzPCo+OwEACVNpZ25hdHVyZQEAFyhMamF2YS9sYW5nL0NsYXNzPCo+OylaAQALaW1wb3N0ZXJpc2UBAFAoTG9yZy9qbW9jay9hcGkvSW52b2thYmxlO0xqYXZhL2xhbmcvQ2xhc3M7W0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvT2JqZWN0OwEACm1vY2tPYmplY3QBABlMb3JnL2ptb2NrL2FwaS9JbnZva2FibGU7AQAKbW9ja2VkVHlwZQEAD2FuY2lsbGlhcnlUeXBlcwEAEltMamF2YS9sYW5nL0NsYXNzOwEADnByb3hpZWRDbGFzc2VzAQALY2xhc3NMb2FkZXIBABdMamF2YS9sYW5nL0NsYXNzTG9hZGVyOwEAFkxqYXZhL2xhbmcvQ2xhc3M8VFQ7PjsBABVbTGphdmEvbGFuZy9DbGFzczwqPjsBAF88VDpMamF2YS9sYW5nL09iamVjdDs+KExvcmcvam1vY2svYXBpL0ludm9rYWJsZTtMamF2YS9sYW5nL0NsYXNzPFRUOz47W0xqYXZhL2xhbmcvQ2xhc3M8Kj47KVRUOwEAB3ByZXBlbmQBADcoTGphdmEvbGFuZy9DbGFzcztbTGphdmEvbGFuZy9DbGFzczspW0xqYXZhL2xhbmcvQ2xhc3M7AQAFZmlyc3QBAARyZXN0AQBAKExqYXZhL2xhbmcvQ2xhc3M8Kj47W0xqYXZhL2xhbmcvQ2xhc3M8Kj47KVtMamF2YS9sYW5nL0NsYXNzPCo+OwEACDxjbGluaXQ+AQAKU291cmNlRmlsZQEAH0phdmFSZWZsZWN0aW9uSW1wb3N0ZXJpc2VyLmphdmEMABEAEgwARwBIDAAtAC4HAEkMAEoASwEAKm9yZy9qbW9jay9saWIvSmF2YVJlZmxlY3Rpb25JbXBvc3RlcmlzZXIkMQEAAAEADElubmVyQ2xhc3NlcwwAEQBMBwBNDABOAE8BAA9qYXZhL2xhbmcvQ2xhc3MHAFAMAFEAUgEAKG9yZy9qbW9jay9saWIvSmF2YVJlZmxlY3Rpb25JbXBvc3RlcmlzZXIMAA8AEAEAEGphdmEvbGFuZy9PYmplY3QBABpvcmcvam1vY2svYXBpL0ltcG9zdGVyaXNlcgEAC2lzSW50ZXJmYWNlAQADKClaAQAnb3JnL2ptb2NrL2ludGVybmFsL1NlYXJjaGluZ0NsYXNzTG9hZGVyAQAQY29tYmluZUxvYWRlcnNPZgEAKyhbTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9DbGFzc0xvYWRlcjsBAEYoTG9yZy9qbW9jay9saWIvSmF2YVJlZmxlY3Rpb25JbXBvc3RlcmlzZXI7TG9yZy9qbW9jay9hcGkvSW52b2thYmxlOylWAQAXamF2YS9sYW5nL3JlZmxlY3QvUHJveHkBABBuZXdQcm94eUluc3RhbmNlAQBiKExqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7W0xqYXZhL2xhbmcvQ2xhc3M7TGphdmEvbGFuZy9yZWZsZWN0L0ludm9jYXRpb25IYW5kbGVyOylMamF2YS9sYW5nL09iamVjdDsBABBqYXZhL2xhbmcvU3lzdGVtAQAJYXJyYXljb3B5AQAqKExqYXZhL2xhbmcvT2JqZWN0O0lMamF2YS9sYW5nL09iamVjdDtJSSlWACEACgANAAEADgABABkADwAQAAAABQABABEAEgABABMAAAAvAAEAAQAAAAUqtwABsQAAAAIAFAAAAAYAAQAAABMAFQAAAAwAAQAAAAUAFgAXAAAAAQAYABkAAgATAAAASwABAAIAAAAFK7YAAqwAAAADABQAAAAGAAEAAAAXABUAAAAWAAIAAAAFABYAFwAAAAAABQAaABsAAQAcAAAADAABAAAABQAaAB0AAQAeAAAAAgAfAIEAIAAhAAIAEwAAAKoABgAGAAAAICosLbcAAzoEGQS4AAQ6BRkFGQS7AAVZKiu3AAa4AAewAAAAAwAUAAAADgADAAAAHAAIAB0ADwAfABUAAAA+AAYAAAAgABYAFwAAAAAAIAAiACMAAQAAACAAJAAbAAIAAAAgACUAJgADAAgAGAAnACYABAAPABEAKAApAAUAHAAAACAAAwAAACAAJAAqAAIAAAAgACUAKwADAAgAGAAnACsABAAeAAAAAgAsAIIALQAuAAIAEwAAAJEABQAEAAAAFyy+BGC9AAhOLQMrUywDLQQsvrgACS2wAAAAAwAUAAAAEgAEAAAAJwAIACkADAAqABUALAAVAAAAKgAEAAAAFwAWABcAAAAAABcALwAbAAEAAAAXADAAJgACAAgADwAnACYAAwAcAAAAIAADAAAAFwAvAB0AAQAAABcAMAArAAIACAAPACcAKwADAB4AAAACADEACAAyABIAAQATAAAAIwACAAAAAAALuwAKWbcAC7MADLEAAAABABQAAAAGAAEAAAAUAAIAMwAAAAIANAA8AAAACgABAAUAAAAAAABQSwMECgAAAAAAelgYOVRiIEM1BwAANQcAACgAAABvcmcvam1vY2svbGliL0xhc3RXb3JkTmFtaW5nU2NoZW1lLmNsYXNzyv66vgAAADEAWgoAMgAzCgAOADQKADUANgoANwA4CgAOADkKAA4AOgoAOwA8CgA1AD0KADUAPgoANQA/CgA3AEAKADcAQQoAEQBCBwBDCgAOAEIJAA4ARAcARQcARgEACElOU1RBTkNFAQAmTG9yZy9qbW9jay9hcGkvTW9ja09iamVjdE5hbWluZ1NjaGVtZTsBAA5kZWZhdWx0TmFtZUZvcgEAJShMamF2YS9sYW5nL0NsYXNzOylMamF2YS9sYW5nL1N0cmluZzsBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAFc3RhcnQBAAFJAQAEdGhpcwEAJExvcmcvam1vY2svbGliL0xhc3RXb3JkTmFtaW5nU2NoZW1lOwEACnR5cGVUb01vY2sBABFMamF2YS9sYW5nL0NsYXNzOwEACnNpbXBsZU5hbWUBABJMamF2YS9sYW5nL1N0cmluZzsBAAd3b3JkRW5kAQAWTG9jYWxWYXJpYWJsZVR5cGVUYWJsZQEAFExqYXZhL2xhbmcvQ2xhc3M8Kj47AQAJU2lnbmF0dXJlAQAoKExqYXZhL2xhbmcvQ2xhc3M8Kj47KUxqYXZhL2xhbmcvU3RyaW5nOwEAEWluZGV4T2ZMYXN0TGV0dGVyAQAVKExqYXZhL2xhbmcvU3RyaW5nOylJAQABaQEAGGluZGV4T2ZMYXN0VXBwZXJDYXNlQ2hhcgEAFihMamF2YS9sYW5nL1N0cmluZztJKUkBABhpbmRleE9mTGFzdExvd2VyQ2FzZUNoYXIBAAY8aW5pdD4BAAMoKVYBAAg8Y2xpbml0PgEAClNvdXJjZUZpbGUBABlMYXN0V29yZE5hbWluZ1NjaGVtZS5qYXZhBwBHDABIAEkMACcAKAcASgwASwBMBwBNDABOAE8MACwAKwwAKgArBwBQDABRAFIMAFMAVAwAVQBJDABWAFcMAFgATwwAWQBPDAAtAC4BACJvcmcvam1vY2svbGliL0xhc3RXb3JkTmFtaW5nU2NoZW1lDAATABQBABBqYXZhL2xhbmcvT2JqZWN0AQAkb3JnL2ptb2NrL2FwaS9Nb2NrT2JqZWN0TmFtaW5nU2NoZW1lAQAPamF2YS9sYW5nL0NsYXNzAQANZ2V0U2ltcGxlTmFtZQEAFCgpTGphdmEvbGFuZy9TdHJpbmc7AQAQamF2YS9sYW5nL1N0cmluZwEABmNoYXJBdAEABChJKUMBABNqYXZhL2xhbmcvQ2hhcmFjdGVyAQALaXNVcHBlckNhc2UBAAQoQylaAQAOamF2YS9sYW5nL01hdGgBAANtYXgBAAUoSUkpSQEACXN1YnN0cmluZwEAFShJKUxqYXZhL2xhbmcvU3RyaW5nOwEAC3RvTG93ZXJDYXNlAQAGbGVuZ3RoAQADKClJAQAIaXNMZXR0ZXIBAAtpc0xvd2VyQ2FzZQAhAA4AEQABABIAAQAJABMAFAAAAAYAAQAVABYAAgAXAAAAvwADAAUAAAA5K7YAAU0qLLcAAj4sHbYAA7gABJkAECosHbcABQRgNgSnAAsqLB23AAY2BCwDFQS4AAe2AAi2AAmwAAAAAwAYAAAAHgAHAAAAGAAFABkACwAcABYAHQAgAB4AIwAfACsAIgAZAAAAPgAGACAAAwAaABsABAAAADkAHAAdAAAAAAA5AB4AHwAB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ay9hcGkvQWN0aW9uOz47AQAIaXRlcmF0b3IBABRMamF2YS91dGlsL0l0ZXJhdG9yOwEALExqYXZhL3V0aWwvSXRlcmF0b3I8TG9yZy9qbW9jay9hcGkvQWN0aW9uOz47AQAGPGluaXQ+AQAaKFtMb3JnL2ptb2NrL2FwaS9BY3Rpb247KVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAJUxvcmcvam1vY2svbGliL2FjdGlvbi9BY3Rpb25TZXF1ZW5jZTsBABdbTG9yZy9qbW9jay9hcGkvQWN0aW9uOwEABmludm9rZQEALihMb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uOylMamF2YS9sYW5nL09iamVjdDsBAAppbnZvY2F0aW9uAQAaTG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbjsBAApFeGNlcHRpb25zBwBGAQAKZGVzY3JpYmVUbwEAHShMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOylWAQALZGVzY3JpcHRpb24BABpMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOwEAClNvdXJjZUZpbGUBABNBY3Rpb25TZXF1ZW5jZS5qYXZhDAAbAEcBABNqYXZhL3V0aWwvQXJyYXlMaXN0BwBIDABJAEoMABsASwwAFAAVBwBMDAAYAE0MABgAGQcATgwATwBQDABRAFIBABRvcmcvam1vY2svYXBpL0FjdGlvbgwAIwAkAQAeb3JnL2ptb2NrL2FwaS9FeHBlY3RhdGlvbkVycm9yAQAZbm8gbW9yZSBhY3Rpb25zIGF2YWlsYWJsZQwAGwBTAQAAAQALLCBhbmQgdGhlbiAHAFQMAFUAVgEAI29yZy9qbW9jay9saWIvYWN0aW9uL0FjdGlvblNlcXVlbmNlAQAQamF2YS9sYW5nL09iamVjdAEAE2phdmEvbGFuZy9UaHJvd2FibGUBAAMoKVYBABBqYXZhL3V0aWwvQXJyYXlzAQAGYXNMaXN0AQAlKFtMamF2YS9sYW5nL09iamVjdDspTGphdmEvdXRpbC9MaXN0OwEAGShMamF2YS91dGlsL0NvbGxlY3Rpb247KVYBAA5qYXZhL3V0aWwvTGlzdAEAFigpTGphdmEvdXRpbC9JdGVyYXRvcjsBABJqYXZhL3V0aWwvSXRlcmF0b3IBAAdoYXNOZXh0AQADKClaAQAEbmV4dAEAFCgpTGphdmEvbGFuZy9PYmplY3Q7AQAvKExqYXZhL2xhbmcvU3RyaW5nO0xvcmcvam1vY2svYXBpL0ludm9jYXRpb247KVYBABhvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb24BAAphcHBlbmRMaXN0AQBmKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvSXRlcmFibGU7KUxvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb247ACEAEgATAAEACgACAAAAFAAVAAEAFgAAAAIAFwAAABgAGQABABYAAAACABoAAwCBABsAHAABAB0AAABhAAQAAgAAACEqtwABKrsAAlkruAADtwAEtQAFKiq0AAW5AAYBALUAB7EAAAACAB4AAAASAAQAAAAZAAQAGgATABsAIAAcAB8AAAAWAAIAAAAhACAAIQAAAAAAIQAUACIAAQABACMAJAACAB0AAABmAAQAAgAAACoqtAAHuQAIAQCZABYqtAAHuQAJAQDAAAoruQALAgCwuwAMWRINK7cADr8AAAACAB4AAAAOAAMAAAAfAAwAIAAfACIAHwAAABYAAgAAACoAIAAhAAAAAAAqACUAJgABACcAAAAEAAEAKAABACkAKgABAB0AAABKAAUAAgAAABIrEg8SEBIPKrQABbkAEQUAV7EAAAACAB4AAAAKAAIAAAAmABEAJwAfAAAAFgACAAAAEgAgACEAAAAAABIAKwAsAAEAAQAtAAAAAgAuUEsDBAoAAAAAAHpYGDkCl7Z9sQIAALECAAAnAAAAb3JnL2ptb2NrL2xpYi9hY3Rpb24vQ3VzdG9tQWN0aW9uLmNsYXNzyv66vgAAADEAIAoABQAVCQAEABYLABcAGAcAGQcAGgcAGwEAC2Rlc2NyaXB0aW9uAQASTGphdmEvbGFuZy9TdHJpbmc7AQAGPGluaXQ+AQAVKExqYXZhL2xhbmcvU3RyaW5nOylWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBACNMb3JnL2ptb2NrL2xpYi9hY3Rpb24vQ3VzdG9tQWN0aW9uOwEACmRlc2NyaWJlVG8BAB0oTG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbjspVgEAGkxvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb247AQAKU291cmNlRmlsZQEAEUN1c3RvbUFjdGlvbi5qYXZhDAAJABwMAAcACAcAHQwAHgAfAQAhb3JnL2ptb2NrL2xpYi9hY3Rpb24vQ3VzdG9tQWN0aW9uAQAQamF2YS9sYW5nL09iamVjdAEAFG9yZy9qbW9jay9hcGkvQWN0aW9uAQADKClWAQAYb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uAQAKYXBwZW5kVGV4dAEALihMamF2YS9sYW5nL1N0cmluZzspTG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbjsEIQAEAAUAAQAGAAEAAgAHAAgAAAACAAEACQAKAAEACwAAAEYAAgACAAAACiq3AAEqK7UAArEAAAACAAwAAAAOAAMAAAAQAAQAEQAJABIADQAAABYAAgAAAAoADgAPAAAAAAAKAAcACAABAAEAEAARAAEACwAAAEQAAgACAAAADCsqtAACuQADAgBXsQAAAAIADAAAAAoAAgAAABUACwAWAA0AAAAWAAIAAAAMAA4ADwAAAAAADAAHABIAAQABABMAAAACABRQSwMECgAAAAAAelgYOQhKWzzzBAAA8wQAACYAAABvcmcvam1vY2svbGliL2FjdGlvbi9Eb0FsbEFjdGlvbi5jbGFzc8r+ur4AAAAxAEAKAAwAJwoAKAApBwAPCQALACoLAA0AKwgALAgALQgALgoALwAwCwAxADIHADMHADQHADUBAAdhY3Rpb25zAQAXW0xvcmcvam1vY2svYXBpL0FjdGlvbjsBAAY8aW5pdD4BABooW0xvcmcvam1vY2svYXBpL0FjdGlvbjspVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAiTG9yZy9qbW9jay9saWIvYWN0aW9uL0RvQWxsQWN0aW9uOwEABmludm9rZQEALihMb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uOylMamF2YS9sYW5nL09iamVjdDsBAAFpAQABSQEACmludm9jYXRpb24BABpMb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uOwEABnJlc3VsdAEAEkxqYXZhL2xhbmcvT2JqZWN0OwEACkV4Y2VwdGlvbnMHADYBAApkZXNjcmliZVRvAQAdKExvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb247KVYBAAtkZXNjcmlwdGlvbgEAGkxvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb247AQAKU291cmNlRmlsZQEAEERvQWxsQWN0aW9uLmphdmEMABAANwcADwwAOAA5DAAOAA8MABcAGAEACmRvIGFsbCBvZiABAAIsIAEAAAcAOgwAOwA8BwA9DAA+AD8BACBvcmcvam1vY2svbGliL2FjdGlvbi9Eb0FsbEFjdGlvbgEAEGphdmEvbGFuZy9PYmplY3QBABRvcmcvam1vY2svYXBpL0FjdGlvbgEAE2phdmEvbGFuZy9UaHJvd2FibGUBAAMoKVYBAAVjbG9uZQEAFCgpTGphdmEvbGFuZy9PYmplY3Q7AQAQamF2YS91dGlsL0FycmF5cwEABmFzTGlzdAEAJShbTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL3V0aWwvTGlzdDsBABhvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb24BAAphcHBlbmRMaXN0AQBmKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvSXRlcmFibGU7KUxvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb247ACEACwAMAAEADQABABIADgAPAAAAAwCBABAAEQABABIAAABMAAIAAgAAABAqtwABKiu2AALAAAO1AASxAAAAAgATAAAADgADAAAAEgAEABMADwAUABQAAAAWAAIAAAAQABUAFgAAAAAAEAAOAA8AAQABABcAGAACABIAAAB6AAIABAAAACIBTQM+HSq0AAS+ogAWKrQABB0yK7kABQIATYQDAaf/5yywAAAAAgATAAAAFgAFAAAAFwACABkADQAaABoAGQAgAB0AFAAAACoABAAEABwAGQAaAAMAAAAiABUAFgAAAAAAIgAbABwAAQACACAAHQAeAAIAHwAAAAQAAQAgAAEAIQAiAAEAEgAAAE0ABQACAAAAFSsSBhIHEggqtAAEuAAJuQAKBQBXsQAAAAIAEwAAAAoAAgAAACEAFAAiABQAAAAWAAIAAAAVABUAFgAAAAAAFQAjACQAAQABACUAAAACACZQSwMECgAAAAAAelgYOcA5xpLSBgAA0gYAADIAAABvcmcvam1vY2svbGliL2FjdGlvbi9SZXR1cm5FbnVtZXJhdGlvbkFjdGlvbi5jbGFzc8r+ur4AAAAxAEYKAAsALAkACgAtCgAuAC8KADAAMQgAMggAMwgANAsANQA2CgAKADcHADgHADkHADoBAApjb2xsZWN0aW9uAQAWTGphdmEvdXRpbC9Db2xsZWN0aW9uOwEACVNpZ25hdHVyZQEAGUxqYXZhL3V0aWwvQ29sbGVjdGlvbjwqPjsBAAY8aW5pdD4BABkoTGphdmEvdXRpbC9Db2xsZWN0aW9uOylWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBAC5Mb3JnL2ptb2NrL2xpYi9hY3Rpb24vUmV0dXJuRW51bWVyYXRpb25BY3Rpb247AQAWTG9jYWxWYXJpYWJsZVR5cGVUYWJsZQEAHChMamF2YS91dGlsL0NvbGxlY3Rpb248Kj47KVYBABYoW0xqYXZhL2xhbmcvT2JqZWN0OylWAQAFYXJyYXkBABNbTGphdmEvbGFuZy9PYmplY3Q7AQAGaW52b2tlAQAzKExvcmcvam1vY2svYXBpL0ludm9jYXRpb247KUxqYXZhL3V0aWwvRW51bWVyYXRpb247AQAKaW52b2NhdGlvbgEAGkxvcmcvam1vY2svYXBpL0ludm9jYXRpb247AQAKRXhjZXB0aW9ucwcAOwEANihMb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uOylMamF2YS91dGlsL0VudW1lcmF0aW9uPCo+OwEACmRlc2NyaWJlVG8BAB0oTG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbjspVgEAC2Rlc2NyaXB0aW9uAQAaTG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbjsBAC4oTG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbjspTGphdmEvbGFuZy9PYmplY3Q7AQACeDABAApTb3VyY2VGaWxlAQAcUmV0dXJuRW51bWVyYXRpb25BY3Rpb24uamF2YQwAEQA8DAANAA4HAD0MAD4APwcAQAwAQQBCAQAYcmV0dXJuIGVudW1lcmF0aW9uIG92ZXIgAQACLCABAAAHAEMMAEQARQwAHQAeAQAsb3JnL2ptb2NrL2xpYi9hY3Rpb24vUmV0dXJuRW51bWVyYXRpb25BY3Rpb24BABBqYXZhL2xhbmcvT2JqZWN0AQAUb3JnL2ptb2NrL2FwaS9BY3Rpb24BABNqYXZhL2xhbmcvVGhyb3dhYmxlAQADKClWAQAQamF2YS91dGlsL0FycmF5cwEABmFzTGlzdAEAJShbTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL3V0aWwvTGlzdDsBABVqYXZhL3V0aWwvQ29sbGVjdGlvbnMBAAtlbnVtZXJhdGlvbgEALyhMamF2YS91dGlsL0NvbGxlY3Rpb247KUxqYXZhL3V0aWwvRW51bWVyYXRpb247AQAYb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uAQAPYXBwZW5kVmFsdWVMaXN0AQBmKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvSXRlcmFibGU7KUxvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb247ACEACgALAAEADAABAAIADQAOAAEADwAAAAIAEAAFAAEAEQASAAIAEwAAAFgAAgACAAAACiq3AAEqK7UAArEAAAADABQAAAAOAAMAAAAVAAQAFgAJABcAFQAAABYAAgAAAAoAFgAXAAAAAAAKAA0ADgABABgAAAAMAAEAAAAKAA0AEAABAA8AAAACABkAgQARABoAAQATAAAASQACAAIAAAANKrcAASoruAADtQACsQAAAAIAFAAAAA4AAwAAABkABAAaAAwAGwAVAAAAFgACAAAADQAWABcAAAAAAA0AGwAcAAEAAQAdAB4AAwATAAAAPAABAAIAAAAIKrQAArgABLAAAAACABQAAAAGAAEAAAAeABUAAAAWAAIAAAAIABYAFwAAAAAACAAfACAAAQAhAAAABAABACIADwAAAAIAIwABACQAJQABABMAAABKAAUAAgAAABIrEgUSBhIHKrQAArkACAUAV7EAAAACABQAAAAKAAIAAAAiABEAIwAVAAAAFgACAAAAEgAWABcAAAAAABIAJgAnAAEQQQAdACgAAgATAAAAOgACAAIAAAAGKiu2AAmwAAAAAgAUAAAABgABAAAAEgAVAAAAFgACAAAABgAWABcAAAAAAAYAKQAgAAEAIQAAAAQAAQAiAAEAKgAAAAIAK1BLAwQKAAAAAAB6WBg5rv0sKKUGAAClBgAALwAAAG9yZy9qbW9jay9saWIvYWN0aW9uL1JldHVybkl0ZXJhdG9yQWN0aW9uLmNsYXNzyv66vgAAADEARgoACwAsCQAKAC0KAC4ALwsAMAAxCAAyCAAzCAA0CwA1ADYKAAoANwcAOAcAOQcAOgEACmNvbGxlY3Rpb24BABZMamF2YS91dGlsL0NvbGxlY3Rpb247AQAJU2lnbmF0dXJlAQAZTGphdmEvdXRpbC9Db2xsZWN0aW9uPCo+OwEABjxpbml0PgEAGShMamF2YS91dGlsL0NvbGxlY3Rpb247KVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAK0xvcmcvam1vY2svbGliL2FjdGlvbi9SZXR1cm5JdGVyYXRvckFjdGlvbjsBABZMb2NhbFZhcmlhYmxlVHlwZVRhYmxlAQAcKExqYXZhL3V0aWwvQ29sbGVjdGlvbjwqPjspVgEAFihbTGphdmEvbGFuZy9PYmplY3Q7KVYBAAVhcnJheQEAE1tMamF2YS9sYW5nL09iamVjdDsBAAZpbnZva2UBADAoTG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbjspTGphdmEvdXRpbC9JdGVyYXRvcjsBAAppbnZvY2F0aW9uAQAaTG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbjsBAApFeGNlcHRpb25zBwA7AQAzKExvcmcvam1vY2svYXBpL0ludm9jYXRpb247KUxqYXZhL3V0aWwvSXRlcmF0b3I8Kj47AQAKZGVzY3JpYmVUbwEAHShMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOylWAQALZGVzY3JpcHRpb24BABpMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOwEALihMb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uOylMamF2YS9sYW5nL09iamVjdDsBAAJ4MAEAClNvdXJjZUZpbGUBABlSZXR1cm5JdGVyYXRvckFjdGlvbi5qYXZhDAARADwMAA0ADgcAPQwAPgA/BwBADABBAEIBABVyZXR1cm4gaXRlcmF0b3Igb3ZlciABAAIsIAEAAAcAQwwARABFDAAdAB4BAClvcmcvam1vY2svbGliL2FjdGlvbi9SZXR1cm5JdGVyYXRvckFjdGlvbgEAEGphdmEvbGFuZy9PYmplY3QBABRvcmcvam1vY2svYXBpL0FjdGlvbgEAE2phdmEvbGFuZy9UaHJvd2FibGUBAAMoKVYBABBqYXZhL3V0aWwvQXJyYXlzAQAGYXNMaXN0AQAlKFtMamF2YS9sYW5nL09iamVjdDspTGphdmEvdXRpbC9MaXN0OwEAFGphdmEvdXRpbC9Db2xsZWN0aW9uAQAIaXRlcmF0b3IBABYoKUxqYXZhL3V0aWwvSXRlcmF0b3I7AQAYb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uAQAPYXBwZW5kVmFsdWVMaXN0AQBmKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvSXRlcmFibGU7KUxvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb247ACEACgALAAEADAABAAIADQAOAAEADwAAAAIAEAAFAAEAEQASAAIAEwAAAFgAAgACAAAACiq3AAEqK7UAArEAAAADABQAAAAOAAMAAAATAAQAFAAJABUAFQAAABYAAgAAAAoAFgAXAAAAAAAKAA0ADgABABgAAAAMAAEAAAAKAA0AEAABAA8AAAACABkAgQARABoAAQATAAAASQACAAIAAAANKrcAASoruAADtQACsQAAAAIAFAAAAA4AAwAAABcABAAYAAwAGQAVAAAAFgACAAAADQAWABcAAAAAAA0AGwAcAAEAAQAdAB4AAwATAAAAPgABAAIAAAAKKrQAArkABAEAsAAAAAIAFAAAAAYAAQAAABwAFQAAABYAAgAAAAoAFgAXAAAAAAAKAB8AIAABACEAAAAEAAEAIgAPAAAAAgAjAAEAJAAlAAEAEwAAAEoABQACAAAAEisSBRIGEgcqtAACuQAIBQBXsQAAAAIAFAAAAAoAAgAAACAAEQAhABUAAAAWAAIAAAASABYAFwAAAAAAEgAmACcAARBBAB0AKAACABMAAAA6AAIAAgAAAAYqK7YACbAAAAACABQAAAAGAAEAAAAQABUAAAAWAAIAAAAGABYAFwAAAAAABgApACAAAQAhAAAABAABACIAAQAqAAAAAgArUEsDBAoAAAAAAHpYGDmd3NhACAQAAAgEAAAsAAAAb3JnL2ptb2NrL2xpYi9hY3Rpb24vUmV0dXJuVmFsdWVBY3Rpb24uY2xhc3PK/rq+AAAAMQAuCgAHAB4JAAYAHwgAIAsAIQAiCwAhACMHACQHACUHACYBAAZyZXN1bHQBABJMamF2YS9sYW5nL09iamVjdDsBAAY8aW5pdD4BABUoTGphdmEvbGFuZy9PYmplY3Q7KVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAKExvcmcvam1vY2svbGliL2FjdGlvbi9SZXR1cm5WYWx1ZUFjdGlvbjsBAAZpbnZva2UBAC4oTG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbjspTGphdmEvbGFuZy9PYmplY3Q7AQAKaW52b2NhdGlvbgEAGkxvcmcvam1vY2svYXBpL0ludm9jYXRpb247AQAKRXhjZXB0aW9ucwcAJwEACmRlc2NyaWJlVG8BAB0oTG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbjspVgEAC2Rlc2NyaXB0aW9uAQAaTG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbjsBAApTb3VyY2VGaWxlAQAWUmV0dXJuVmFsdWVBY3Rpb24uamF2YQwACwAoDAAJAAoBAAhyZXR1cm5zIAcAKQwAKgArDAAsAC0BACZvcmcvam1vY2svbGliL2FjdGlvbi9SZXR1cm5WYWx1ZUFjdGlvbgEAEGphdmEvbGFuZy9PYmplY3QBABRvcmcvam1vY2svYXBpL0FjdGlvbgEAE2phdmEvbGFuZy9UaHJvd2FibGUBAAMoKVYBABhvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb24BAAphcHBlbmRUZXh0AQAuKExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOwEAC2FwcGVuZFZhbHVlAQAuKExqYXZhL2xhbmcvT2JqZWN0OylMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOwAhAAYABwABAAgAAQACAAkACgAAAAMAAQALAAwAAQANAAAARgACAAIAAAAKKrcAASortQACsQAAAAIADgAAAA4AAwAAABIABAATAAkAFAAPAAAAFgACAAAACgAQABEAAAAAAAoACQAKAAEAAQASABMAAgANAAAAOQABAAIAAAAFKrQAArAAAAACAA4AAAAGAAEAAAAXAA8AAAAWAAIAAAAFABAAEQAAAAAABQAUABUAAQAWAAAABAABABcAAQAYABkAAQANAAAAUQACAAIAAAAVKxIDuQAEAgBXKyq0AAK5AAUCAFexAAAAAgAOAAAADgADAAAAGwAJABwAFAAdAA8AAAAWAAIAAAAVABAAEQAAAAAAFQAaABsAAQABABwAAAACAB1QSwMECgAAAAAAelgYOYAIytcxCgAAMQoAACYAAABvcmcvam1vY2svbGliL2FjdGlvbi9UaHJvd0FjdGlvbi5jbGFzc8r+ur4AAAAxAH0KABwAQwkAGwBECgAbAEUKAEYARwoASABJCgAbAEoKACwASwgATAsATQBOCwBNAE8KAFAAUQoAGwBSBwBTCgANAEMIAFQKAA0AVQoAHABWCgBQAFcIAFgIAFkIAFoHAFsKAA0AXAoAFgBdBwBeBwBfBwBgBwBhBwBiAQAJdGhyb3dhYmxlAQAVTGphdmEvbGFuZy9UaHJvd2FibGU7AQAGPGluaXQ+AQAYKExqYXZhL2xhbmcvVGhyb3dhYmxlOylWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBACJMb3JnL2ptb2NrL2xpYi9hY3Rpb24vVGhyb3dBY3Rpb247AQAGaW52b2tlAQAuKExvcmcvam1vY2svYXBpL0ludm9jYXRpb247KUxqYXZhL2xhbmcvT2JqZWN0OwEACmludm9jYXRpb24BABpMb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uOwEACkV4Y2VwdGlvbnMHAGMBAApkZXNjcmliZVRvAQAdKExvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb247KVYBAAtkZXNjcmlwdGlvbgEAGkxvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb247AQAVY2hlY2tUeXBlQ29tcGF0aWJsaXR5AQAVKFtMamF2YS9sYW5nL0NsYXNzOylWAQABaQEAAUkBABVhbGxvd2VkRXhjZXB0aW9uVHlwZXMBABJbTGphdmEvbGFuZy9DbGFzczsBABZMb2NhbFZhcmlhYmxlVHlwZVRhYmxlAQAVW0xqYXZhL2xhbmcvQ2xhc3M8Kj47AQAJU2lnbmF0dXJlAQAYKFtMamF2YS9sYW5nL0NsYXNzPCo+OylWAQAicmVwb3J0SW5jb21wYXRpYmxlQ2hlY2tlZEV4Y2VwdGlvbgEADGFsbG93ZWRUeXBlcwEAB21lc3NhZ2UBABhMamF2YS9sYW5nL1N0cmluZ0J1ZmZlcjsBABppc1Rocm93aW5nQ2hlY2tlZEV4Y2VwdGlvbgEAAygpWgEAClNvdXJjZUZpbGUBABBUaHJvd0FjdGlvbi5qYXZhDAAgAGQMAB4AHwwAPwBABwBlDABmAGcHAGgMAGkAagwAMQAyDABrAGwBAAd0aHJvd3MgBwBtDABuAG8MAHAAcQcAcgwAcwB0DAA7ADIBABZqYXZhL2xhbmcvU3RyaW5nQnVmZmVyAQARdHJpZWQgdG8gdGhyb3cgYSAMAHUAdgwAdwB4DAB5AHoBABsgZnJvbSBhIG1ldGhvZCB0aGF0IHRocm93cyABAA1ubyBleGNlcHRpb25zAQABLAEAH2phdmEvbGFuZy9JbGxlZ2FsU3RhdGVFeGNlcHRpb24MAHsAegwAIAB8AQAaamF2YS9sYW5nL1J1bnRpbWVFeGNlcHRpb24BAA9qYXZhL2xhbmcvRXJyb3IBACBvcmcvam1vY2svbGliL2FjdGlvbi9UaHJvd0FjdGlvbgEAEGphdmEvbGFuZy9PYmplY3QBABRvcmcvam1vY2svYXBpL0FjdGlvbgEAE2phdmEvbGFuZy9UaHJvd2FibGUBAAMoKVYBABhvcmcvam1vY2svYXBpL0ludm9jYXRpb24BABBnZXRJbnZva2VkTWV0aG9kAQAcKClMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOwEAGGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZAEAEWdldEV4Y2VwdGlvblR5cGVzAQAUKClbTGphdmEvbGFuZy9DbGFzczsBABBmaWxsSW5TdGFja1RyYWNlAQAXKClMamF2YS9sYW5nL1Rocm93YWJsZTsBABhvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb24BAAphcHBlbmRUZXh0AQAuKExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOwEAC2FwcGVuZFZhbHVlAQAuKExqYXZhL2xhbmcvT2JqZWN0OylMb3JnL2hhbWNyZXN0L0Rlc2NyaXB0aW9uOwEAD2phdmEvbGFuZy9DbGFzcwEACmlzSW5zdGFuY2UBABUoTGphdmEvbGFuZy9PYmplY3Q7KVoBAAZhcHBlbmQBACwoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nQnVmZmVyOwEACGdldENsYXNzAQATKClMamF2YS9sYW5nL0NsYXNzOwEAB2dldE5hbWUBABQoKUxqYXZhL2xhbmcvU3RyaW5nOwEACHRvU3RyaW5nAQAVKExqYXZhL2xhbmcvU3RyaW5nOylWACEAGwAcAAEAHQABAAIAHgAfAAAABgABACAAIQABACIAAABGAAIAAgAAAAoqtwABKiu1AAKxAAAAAgAjAAAADgADAAAAEgAEABMACQAUACQAAAAWAAIAAAAKACUAJgAAAAAACgAeAB8AAQABACcAKAACACIAAABfAAIAAgAAAB8qtwADmQAOKiu2AAS2AAW3AAYqtAACtgAHVyq0AAK/AAAAAgAjAAAAEgAEAAAAFwAHABgAEgAbABoAHAAkAAAAFgACAAAAHwAlACYAAAAAAB8AKQAqAAEAKwAAAAQAAQAsAAEALQAuAAEAIgAAAFEAAgACAAAAFSsSCLkACQIAVysqtAACuQAKAgBXsQAAAAIAIwAAAA4AAwAAACAACQAhABQAIgAkAAAAFgACAAAAFQAlACYAAAAAABUALwAwAAEAAgAxADIAAgAiAAAAhgACAAMAAAAiAz0cK76iABcrHDIqtAACtgALmQAEsYQCAaf/6SortwAMsQAAAAMAIwAAABoABgAAACUACAAmABUAJwAWACUAHAAqACEAKwAkAAAAIAADAAIAGgAzADQAAgAAACIAJQAmAAAAAAAiADUANgABADcAAAAMAAEAAAAiADUAOAABADkAAAACADoAAgA7ADIAAgAiAAAA7gADAAQAAABkuwANWbcADk0sEg+2ABBXLCq0AAK2ABG2ABK2ABBXLBITtgAQVyu+mgANLBIUtgAQV6cAJwM+HSu+ogAfHZ4ACiwSFbYAEFcsKx0ytgAStgAQV4QDAaf/4bsAFlkstgAXtwAYvwAAAAMAIwAAADYADQAAAC4ACAAwAA8AMQAeADIAJQA0ACoANQAxADYANAA3ADwAOABAADkARwA6AFIANwBYAD4AJAAAACoABAA2ACIAMwA0AAMAAABkACUAJgAAAAAAZAA8ADYAAQAIAFwAPQA+AAIANwAAAAwAAQAAAGQAPAA4AAEAOQAAAAIAOgACAD8AQAABACIAAABEAAEAAQAAABoqtAACwQAZmgARKrQAAsEAGpoABwSnAAQDrAAAAAIAIwAAAAYAAQAAAEIAJAAAAAwAAQAAABoAJQAmAAAAAQBBAAAAAgBCUEsDBAoAAAAAAHpYGDmR03b3lgMAAJYDAAAlAAAAb3JnL2ptb2NrL2xpYi9hY3Rpb24vVm9pZEFjdGlvbi5jbGFzc8r+ur4AAAAxACoKAAcAHggAHwsAIAAhBwAiCgAEAB4JAAQAIwcAJAcAJQEACElOU1RBTkNFAQAhTG9yZy9qbW9jay9saWIvYWN0aW9uL1ZvaWRBY3Rpb247AQAGPGluaXQ+AQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBAAZpbnZva2UBAC4oTG9yZy9qbW9jay9hcGkvSW52b2NhdGlvbjspTGphdmEvbGFuZy9PYmplY3Q7AQAKaW52b2NhdGlvbgEAGkxvcmcvam1vY2svYXBpL0ludm9jYXRpb247AQAKRXhjZXB0aW9ucwcAJgEACmRlc2NyaWJlVG8BAB0oTG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbjspVgEAC2Rlc2NyaXB0aW9uAQAaTG9yZy9oYW1jcmVzdC9EZXNjcmlwdGlvbjsBAAg8Y2xpbml0PgEAClNvdXJjZUZpbGUBAA9Wb2lkQWN0aW9uLmphdmEMAAsADAEAB2lzIHZvaWQHACcMACgAKQEAH29yZy9qbW9jay9saWIvYWN0aW9uL1ZvaWRBY3Rpb24MAAkACgEAEGphdmEvbGFuZy9PYmplY3QBABRvcmcvam1vY2svYXBpL0FjdGlvbgEAE2phdmEvbGFuZy9UaHJvd2FibGUBABhvcmcvaGFtY3Jlc3QvRGVzY3JpcHRpb24BAAphcHBlbmRUZXh0AQAuKExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL2hhbWNyZXN0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AAAAAHpYGDkGZrMK0wUAANMFAABNAAAAb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L0RldGVybWluaXN0aWNTY2hlZHVsZXIkQ2FsbGFibGVSdW5uYWJsZUFkYXB0ZXIuY2xhc3PK/rq+AAAAMQA4CQAHACgKAAgAKQkABwAqCQAHACsKAAgALAsALQAuBwAwBwAxBwAyAQAIcnVubmFibGUBABRMamF2YS9sYW5nL1J1bm5hYmxlOwEABnJlc3VsdAEAEkxqYXZhL2xhbmcvT2JqZWN0OwEACVNpZ25hdHVyZQEAA1RUOwEABnRoaXMkMAEAMUxvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvRGV0ZXJtaW5pc3RpY1NjaGVkdWxlcjsBAAY8aW5pdD4BAFooTG9yZy9qbW9jay9saWIvY29uY3VycmVudC9EZXRlcm1pbmlzdGljU2NoZWR1bGVyO0xqYXZhL2xhbmcvUnVubmFibGU7TGphdmEvbGFuZy9PYmplY3Q7KVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAF0NhbGxhYmxlUnVubmFibGVBZGFwdGVyAQAMSW5uZXJDbGFzc2VzAQBJTG9yZy9qbW9jay9saWIvY29uY3VycmVudC9EZXRlcm1pbmlzdGljU2NoZWR1bGVyJENhbGxhYmxlUnVubmFibGVBZGFwdGVyOwEAFkxvY2FsVmFyaWFibGVUeXBlVGFibGUBAE5Mb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L0RldGVybWluaXN0aWNTY2hlZHVsZXIkQ2FsbGFibGVSdW5uYWJsZUFkYXB0ZXI8VFQ7PjsBABooTGphdmEvbGFuZy9SdW5uYWJsZTtUVDspVgEACHRvU3RyaW5nAQAUKClMamF2YS9sYW5nL1N0cmluZzsBAARjYWxsAQAUKClMamF2YS9sYW5nL09iamVjdDsBAApFeGNlcHRpb25zBwAzAQAFKClUVDsBAEw8VDpMamF2YS9sYW5nL09iamVjdDs+TGphdmEvbGFuZy9PYmplY3Q7TGphdmEvdXRpbC9jb25jdXJyZW50L0NhbGxhYmxlPFRUOz47AQAKU291cmNlRmlsZQEAG0RldGVybWluaXN0aWNTY2hlZHVsZXIuamF2YQwAEAARDAASADQMAAoACwwADAANDAAeAB8HADUMADYANAcANwEAR29yZy9qbW9jay9saWIvY29uY3VycmVudC9EZXRlcm1pbmlzdGljU2NoZWR1bGVyJENhbGxhYmxlUnVubmFibGVBZGFwdGVyAQAQamF2YS9sYW5nL09iamVjdAEAHWphdmEvdXRpbC9jb25jdXJyZW50L0NhbGxhYmxlAQATamF2YS9sYW5nL0V4Y2VwdGlvbgEAAygpVgEAEmphdmEvbGFuZy9SdW5uYWJsZQEAA3J1bgEAL29yZy9qbW9jay9saWIvY29uY3VycmVudC9EZXRlcm1pbmlzdGljU2NoZWR1bGVyADAABwAIAAEACQADABIACgALAAAAEgAMAA0AAQAOAAAAAgAPEBAAEAARAAAAAwABABIAEwACABQAAAB6AAIABAAAABQqK7UAASq3AAIqLLUAAyottQAEsQAAAAMAFQAAABIABAAAAKUACQCmAA4ApwATAKgAFgAAACAAAwAAABQAFwAaAAAAAAAUAAoACwACAAAAFAAMAA0AAwAbAAAAFgACAAAAFAAXABwAAAAAABQADAAPAAMADgAAAAIAHQABAB4AHwABABQAAABEAAEAAQAAAAgqtAADtgAFsAAAAAMAFQAAAAYAAQAAAKwAFgAAAAwAAQAAAAgAFwAaAAAAGwAAAAwAAQAAAAgAFwAcAAAAAQAgACEAAwAUAAAATgABAAEAAAAOKrQAA7kABgEAKrQABLAAAAADABUAAAAKAAIAAACwAAkAsQAWAAAADAABAAAADgAXABoAAAAbAAAADAABAAAADgAXABwAAAAiAAAABAABACMADgAAAAIAJAADAA4AAAACACUAJgAAAAIAJwAZAAAACgABAAcALwAYABJQSwMECgAAAAAAelgYOYMXNeX4EQAA+BEAAEMAAABvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvRGV0ZXJtaW5pc3RpY1NjaGVkdWxlciRTY2hlZHVsZWRUYXNrLmNsYXNzyv66vgAAADEAnAkAIgBlCgAjAGYJACIAZwkAIgBoCQAiAGkF//////////8JACIAagkAIgBrCgAiAGwHAG4KAAsAcAcAcQoADQBmCgAjAHIKAA0AcwgAdAoADQB1CgANAHIHAHYIAHcKABQAeAoAbQB5CgB6AHsKAG0AfAcAfQoAGgB+CQAiAH8KACIAgAsAgQCCBwCDBwCECgAiAIUHAIYHAIcHAIgHAIkBAAtyZXBlYXREZWxheQEAAUoBAAdjb21tYW5kAQAfTGphdmEvdXRpbC9jb25jdXJyZW50L0NhbGxhYmxlOwEACVNpZ25hdHVyZQEAJExqYXZhL3V0aWwvY29uY3VycmVudC9DYWxsYWJsZTxUVDs+OwEAC2lzQ2FuY2VsbGVkAQABWgEABmlzRG9uZQEADGZ1dHVyZVJlc3VsdAEAEkxqYXZhL2xhbmcvT2JqZWN0OwEAA1RUOwEAB2ZhaWx1cmUBABVMamF2YS9sYW5nL0V4Y2VwdGlvbjsBAAZ0aGlzJDABADFMb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L0RldGVybWluaXN0aWNTY2hlZHVsZXI7AQAGPGluaXQ+AQBTKExvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvRGV0ZXJtaW5pc3RpY1NjaGVkdWxlcjtMamF2YS91dGlsL2NvbmN1cnJlbnQvQ2FsbGFibGU7KVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEADVNjaGVkdWxlZFRhc2sBAAxJbm5lckNsYXNzZXMBAD9Mb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L0RldGVybWluaXN0aWNTY2hlZHVsZXIkU2NoZWR1bGVkVGFzazsBABZMb2NhbFZhcmlhYmxlVHlwZVRhYmxlAQBETG9yZy9qbW9jay9saWIvY29uY3VycmVudC9EZXRlcm1pbmlzdGljU2NoZWR1bGVyJFNjaGVkdWxlZFRhc2s8VFQ7PjsBACcoTGphdmEvdXRpbC9jb25jdXJyZW50L0NhbGxhYmxlPFRUOz47KVYBAEgoTG9yZy9qbW9jay9saWIvY29uY3VycmVudC9EZXRlcm1pbmlzdGljU2NoZWR1bGVyO0xqYXZhL2xhbmcvUnVubmFibGU7KVYBABRMamF2YS9sYW5nL1J1bm5hYmxlOwEASShMb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L0RldGVybWluaXN0aWNTY2hlZHVsZXI7SkxqYXZhL2xhbmcvUnVubmFibGU7KVYBAAh0b1N0cmluZwEAFCgpTGphdmEvbGFuZy9TdHJpbmc7AQAHcmVwZWF0cwEAAygpWgEACGdldERlbGF5AQAiKExqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspSgEABHVuaXQBAB9MamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7AQAJY29tcGFyZVRvAQAhKExqYXZhL3V0aWwvY29uY3VycmVudC9EZWxheWVkOylJAQABbwEAHkxqYXZhL3V0aWwvY29uY3VycmVudC9EZWxheWVkOwEABmNhbmNlbAEABChaKVoBABVtYXlJbnRlcnJ1cHRJZlJ1bm5pbmcBAANnZXQBABQoKUxqYXZhL2xhbmcvT2JqZWN0OwEACkV4Y2VwdGlvbnMHAIoBAAUoKVRUOwEANChKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylMamF2YS9sYW5nL09iamVjdDsBAAd0aW1lb3V0BwCLAQAlKEpMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7KVRUOwEAA3J1bgEAAygpVgEAAWUBABUoTGphdmEvbGFuZy9PYmplY3Q7KUkBAAJ4MAEAZzxUOkxqYXZhL2xhbmcvT2JqZWN0Oz5MamF2YS9sYW5nL09iamVjdDtMamF2YS91dGlsL2NvbmN1cnJlbnQvU2NoZWR1bGVkRnV0dXJlPFRUOz47TGphdmEvbGFuZy9SdW5uYWJsZTsBAApTb3VyY2VGaWxlAQAbRGV0ZXJtaW5pc3RpY1NjaGVkdWxlci5qYXZhDAA0ADUMADYAXgwALAAtDAAuAC0MADIAMwwAJgAnDAAoACkMADYARAcAjAEAR29yZy9qbW9jay9saWIvY29uY3VycmVudC9EZXRlcm1pbmlzdGljU2NoZWR1bGVyJENhbGxhYmxlUnVubmFibGVBZGFwdGVyAQAXQ2FsbGFibGVSdW5uYWJsZUFkYXB0ZXIMADYAjQEAF2phdmEvbGFuZy9TdHJpbmdCdWlsZGVyDABFAEYMAI4AjwEADSByZXBlYXREZWxheT0MAI4AkAEAJ2phdmEvbGFuZy9VbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbgEADW5vdCBzdXBwb3J0ZWQMADYAkQwAkgCTBwCUDACVAJYMAJcAmAEAJ2phdmEvdXRpbC9jb25jdXJyZW50L0V4ZWN1dGlvbkV4Y2VwdGlvbgwANgCZDAAvADAMAFQAVQcAmgwAmwBVAQATamF2YS9sYW5nL0V4Y2VwdGlvbgEAHGphdmEvdXRpbC9jb25jdXJyZW50L0RlbGF5ZWQMAE0ATgEAPW9yZy9qbW9jay9saWIvY29uY3VycmVudC9EZXRlcm1pbmlzdGljU2NoZWR1bGVyJFNjaGVkdWxlZFRhc2sBABBqYXZhL2xhbmcvT2JqZWN0AQAkamF2YS91dGlsL2NvbmN1cnJlbnQvU2NoZWR1bGVkRnV0dXJlAQASamF2YS9sYW5nL1J1bm5hYmxlAQAeamF2YS9sYW5nL0ludGVycnVwdGVkRXhjZXB0aW9uAQAlamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZW91dEV4Y2VwdGlvbgEAL29yZy9qbW9jay9saWIvY29uY3VycmVudC9EZXRlcm1pbmlzdGljU2NoZWR1bGVyAQBaKExvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvRGV0ZXJtaW5pc3RpY1NjaGVkdWxlcjtMamF2YS9sYW5nL1J1bm5hYmxlO0xqYXZhL2xhbmcvT2JqZWN0OylWAQAGYXBwZW5kAQAtKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7AQAcKEopTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOwEAFShMamF2YS9sYW5nL1N0cmluZzspVgEACmFjY2VzcyQwMDABAGEoTG9yZy9qbW9jay9saWIvY29uY3VycmVudC9EZXRlcm1pbmlzdGljU2NoZWR1bGVyOylMb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L2ludGVybmFsL0RlbHRhUXVldWU7AQAsb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L2ludGVybmFsL0RlbHRhUXVldWUBAAZyZW1vdmUBABUoTGphdmEvbGFuZy9PYmplY3Q7KVoBAAphY2Nlc3MkMTAwAQB2KExvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvRGV0ZXJtaW5pc3RpY1NjaGVkdWxlcjspTG9yZy9qbW9jay9saWIvY29uY3VycmVudC9VbnN1cHBvcnRlZFN5bmNocm9ub3Vz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WBg5khuxge0gAADtIAAANQAAAG9yZy9qbW9jay9saWIvY29uY3VycmVudC9EZXRlcm1pbmlzdGljU2NoZWR1bGVyLmNsYXNzyv66vgAAADEA4goAJwCXCQAnAJgKAC4AmQcAmgoABACZCgAnAJsKAAQAnAoAJwCdCgAEAJ4KACcAnwoAJwCgCgAEAKEHAKIKAA0AowoADQCkCQANAKUKAAQApgoABACnCgAEAKgJAKkAqgoAJwCrCgANAKwKAA0ArQoAJwCuCgANAK8KACcAsAoAJwCxCgAnALIHALMKAB0AtAoAJwC1CQCpALYKAKkAtwcAuAcAuQoAIwCZCAC6CgAjALsHALwKAL0AvgoAIwC/CgAiAMAHAMEIAMIKACsAwAcAwwcAxAEADVNjaGVkdWxlZFRhc2sBAAxJbm5lckNsYXNzZXMBABdDYWxsYWJsZVJ1bm5hYmxlQWRhcHRlcgEACmRlbHRhUXVldWUBAC5Mb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L2ludGVybmFsL0RlbHRhUXVldWU7AQAJU2lnbmF0dXJlAQByTG9yZy9qbW9jay9saWIvY29uY3VycmVudC9pbnRlcm5hbC9EZWx0YVF1ZXVlPExvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvRGV0ZXJtaW5pc3RpY1NjaGVkdWxlciRTY2hlZHVsZWRUYXNrPCo+Oz47AQAGPGluaXQ+AQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBADFMb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L0RldGVybWluaXN0aWNTY2hlZHVsZXI7AQAEdGljawEAIyhKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylWAQAIZHVyYXRpb24BAAFKAQAIdGltZVVuaXQBAB9MamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7AQAJcmVtYWluaW5nAQAMcnVuVW50aWxJZGxlAQAVcnVuTmV4dFBlbmRpbmdDb21tYW5kAQANc2NoZWR1bGVkVGFzawEAP0xvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvRGV0ZXJtaW5pc3RpY1NjaGVkdWxlciRTY2hlZHVsZWRUYXNrOwEAFkxvY2FsVmFyaWFibGVUeXBlVGFibGUBAEJMb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L0RldGVybWluaXN0aWNTY2hlZHVsZXIkU2NoZWR1bGVkVGFzazwqPjsBAAZpc0lkbGUBAAMoKVoBAAdleGVjdXRlAQAXKExqYXZhL2xhbmcvUnVubmFibGU7KVYBAAdjb21tYW5kAQAUTGphdmEvbGFuZy9SdW5uYWJsZTsBAAhzY2hlZHVsZQEAXChMamF2YS9sYW5nL1J1bm5hYmxlO0pMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7KUxqYXZhL3V0aWwvY29uY3VycmVudC9TY2hlZHVsZWRGdXR1cmU7AQAFZGVsYXkBAAR1bml0AQAEdGFzawEAUUxvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvRGV0ZXJtaW5pc3RpY1NjaGVkdWxlciRTY2hlZHVsZWRUYXNrPExqYXZhL2xhbmcvVm9pZDs+OwEAXyhMamF2YS9sYW5nL1J1bm5hYmxlO0pMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7KUxqYXZhL3V0aWwvY29uY3VycmVudC9TY2hlZHVsZWRGdXR1cmU8Kj47AQBnKExqYXZhL3V0aWwvY29uY3VycmVudC9DYWxsYWJsZTtKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylMamF2YS91dGlsL2NvbmN1cnJlbnQvU2NoZWR1bGVkRnV0dXJlOwEACGNhbGxhYmxlAQAfTGphdmEvdXRpbC9jb25jdXJyZW50L0NhbGxhYmxlOwEAJExqYXZhL3V0aWwvY29uY3VycmVudC9DYWxsYWJsZTxUVjs+OwEARExvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvRGV0ZXJtaW5pc3RpY1NjaGVkdWxlciRTY2hlZHVsZWRUYXNrPFRWOz47AQCHPFY6TGphdmEvbGFuZy9PYmplY3Q7PihMamF2YS91dGlsL2NvbmN1cnJlbnQvQ2FsbGFibGU8VFY7PjtKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylMamF2YS91dGlsL2NvbmN1cnJlbnQvU2NoZWR1bGVkRnV0dXJlPFRWOz47AQATc2NoZWR1bGVBdEZpeGVkUmF0ZQEAXShMamF2YS9sYW5nL1J1bm5hYmxlO0pKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylMamF2YS91dGlsL2NvbmN1cnJlbnQvU2NoZWR1bGVkRnV0dXJlOwEADGluaXRpYWxEZWxheQEABnBlcmlvZAEAYChMamF2YS9sYW5nL1J1bm5hYmxlO0pKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylMamF2YS91dGlsL2NvbmN1cnJlbnQvU2NoZWR1bGVkRnV0dXJlPCo+OwEAFnNjaGVkdWxlV2l0aEZpeGVkRGVsYXkBAFNMb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L0RldGVybWluaXN0aWNTY2hlZHVsZXIkU2NoZWR1bGVkVGFzazxMamF2YS9sYW5nL09iamVjdDs+OwEAEGF3YWl0VGVybWluYXRpb24BACMoSkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspWgEAB3RpbWVvdXQBAApFeGNlcHRpb25zBwDFAQAJaW52b2tlQWxsAQAoKExqYXZhL3V0aWwvQ29sbGVjdGlvbjspTGphdmEvdXRpbC9MaXN0OwEABXRhc2tzAQAWTGphdmEvdXRpbC9Db2xsZWN0aW9uOwEAPExqYXZhL3V0aWwvQ29sbGVjdGlvbjxMamF2YS91dGlsL2NvbmN1cnJlbnQvQ2FsbGFibGU8VFQ7Pjs+OwEAiDxUOkxqYXZhL2xhbmcvT2JqZWN0Oz4oTGphdmEvdXRpbC9Db2xsZWN0aW9uPExqYXZhL3V0aWwvY29uY3VycmVudC9DYWxsYWJsZTxUVDs+Oz47KUxqYXZhL3V0aWwvTGlzdDxMamF2YS91dGlsL2NvbmN1cnJlbnQvRnV0dXJlPFRUOz47PjsBAEgoTGphdmEvdXRpbC9Db2xsZWN0aW9uO0pMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7KUxqYXZhL3V0aWwvTGlzdDsBAKg8VDpMamF2YS9sYW5nL09iamVjdDs+KExqYXZhL3V0aWwvQ29sbGVjdGlvbjxMamF2YS91dGlsL2NvbmN1cnJlbnQvQ2FsbGFibGU8VFQ7Pjs+O0pMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7KUxqYXZhL3V0aWwvTGlzdDxMamF2YS91dGlsL2NvbmN1cnJlbnQvRnV0dXJlPFRUOz47PjsBAAlpbnZva2VBbnkBACooTGphdmEvdXRpbC9Db2xsZWN0aW9uOylMamF2YS9sYW5nL09iamVjdDsHAMYBAFc8VDpMamF2YS9sYW5nL09iamVjdDs+KExqYXZhL3V0aWwvQ29sbGVjdGlvbjxMamF2YS91dGlsL2NvbmN1cnJlbnQvQ2FsbGFibGU8VFQ7Pjs+OylUVDsBAEooTGphdmEvdXRpbC9Db2xsZWN0aW9uO0pMamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQ7KUxqYXZhL2xhbmcvT2JqZWN0OwcAxwEAdzxUOkxqYXZhL2xhbmcvT2JqZWN0Oz4oTGphdmEvdXRpbC9Db2xsZWN0aW9uPExqYXZhL3V0aWwvY29uY3VycmVudC9DYWxsYWJsZTxUVDs+Oz47SkxqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lVW5pdDspVFQ7AQAKaXNTaHV0ZG93bgEADGlzVGVybWluYXRlZAEACHNodXRkb3duAQALc2h1dGRvd25Ob3cBABIoKUxqYXZhL3V0aWwvTGlzdDsBACgoKUxqYXZhL3V0aWwvTGlzdDxMamF2YS9sYW5nL1J1bm5hYmxlOz47AQAGc3VibWl0AQA+KExqYXZhL3V0aWwvY29uY3VycmVudC9DYWxsYWJsZTspTGphdmEvdXRpbC9jb25jdXJyZW50L0Z1dHVyZTsBACRMamF2YS91dGlsL2NvbmN1cnJlbnQvQ2FsbGFibGU8VFQ7PjsBAF48VDpMamF2YS9sYW5nL09iamVjdDs+KExqYXZhL3V0aWwvY29uY3VycmVudC9DYWxsYWJsZTxUVDs+OylMamF2YS91dGlsL2NvbmN1cnJlbnQvRnV0dXJlPFRUOz47AQAzKExqYXZhL2xhbmcvUnVubmFibGU7KUxqYXZhL3V0aWwvY29uY3VycmVudC9GdXR1cmU7AQA2KExqYXZhL2xhbmcvUnVubmFibGU7KUxqYXZhL3V0aWwvY29uY3VycmVudC9GdXR1cmU8Kj47AQBFKExqYXZhL2xhbmcvUnVubmFibGU7TGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL3V0aWwvY29uY3VycmVudC9GdXR1cmU7AQAGcmVzdWx0AQASTGphdmEvbGFuZy9PYmplY3Q7AQADVFQ7AQBRPFQ6TGphdmEvbGFuZy9PYmplY3Q7PihMamF2YS9sYW5nL1J1bm5hYmxlO1RUOylMamF2YS91dGlsL2NvbmN1cnJlbnQvRnV0dXJlPFRUOz47AQAHdG9UaWNrcwEAIyhKTGphdmEvdXRpbC9jb25jdXJyZW50L1RpbWVVbml0OylKAQAeYmxvY2tpbmdPcGVyYXRpb25zTm90U3VwcG9ydGVkAQBFKClMb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L1Vuc3VwcG9ydGVkU3luY2hyb25vdXNPcGVyYXRpb25FeGNlcHRpb247AQAUc2h1dGRvd25Ob3RTdXBwb3J0ZWQBACsoKUxqYXZhL2xhbmcvVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb247AQAKYWNjZXNzJDAwMAEAYShMb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L0RldGVybWluaXN0aWNTY2hlZHVsZXI7KUxvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvaW50ZXJuYWwvRGVsdGFRdWV1ZTsBAAJ4MAEACmFjY2VzcyQxMDABAHYoTG9yZy9qbW9jay9saWIvY29uY3VycmVudC9EZXRlcm1pbmlzdGljU2NoZWR1bGVyOylMb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L1Vuc3VwcG9ydGVkU3luY2hyb25vdXNPcGVyYXRpb25FeGNlcHRpb247AQAKU291cmNlRmlsZQEAG0RldGVybWluaXN0aWNTY2hlZHVsZXIuamF2YQwAjACNDAAzADQMADcAOAEALG9yZy9qbW9jay9saWIvY29uY3VycmVudC9pbnRlcm5hbC9EZWx0YVF1ZXVlDACKAIsMAD4AyAwARQA4DADJAEwMAEsATAwARgA4DADKAMsBAD1vcmcvam1vY2svbGliL2NvbmN1cnJlbnQvRGV0ZXJtaW5pc3RpY1NjaGVkdWxlciRTY2hlZHVsZWRUYXNrDADMADgMAM0ATAwAzgBBDADPANAMANEATAwAUwDSBwDTDADUAEMMAFEAUgwANwDVDAA3ANYMAGMAXwwANwDXDACOAI8MAFEAWAwAfwCFAQBHb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L0RldGVybWluaXN0aWNTY2hlZHVsZXIkQ2FsbGFibGVSdW5uYWJsZUFkYXB0ZXIMADcA2AwAfwCADADZAEMMANoAiwEAQW9yZy9qbW9jay9saWIvY29uY3VycmVudC9VbnN1cHBvcnRlZFN5bmNocm9ub3VzT3BlcmF0aW9uRXhjZXB0aW9uAQAXamF2YS9sYW5nL1N0cmluZ0J1aWxkZXIBADZjYW5ub3QgcGVyZm9ybSBibG9ja2luZyB3YWl0IG9uIGEgdGFzayBzY2hlZHVsZWQgb24gYSAMANsA3AEAL29yZy9qbW9jay9saWIvY29uY3VycmVudC9EZXRlcm1pbmlzdGljU2NoZWR1bGVyBwDdDADeAN8MAOAA3wwANwDhAQAnamF2YS9sYW5nL1Vuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uAQAWc2h1dGRvd24gbm90IHN1cHBvcnRlZAEAEGphdmEvbGFuZy9PYmplY3QBAC1qYXZhL3V0aWwvY29uY3VycmVudC9TY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UBAB5qYXZhL2xhbmcvSW50ZXJydXB0ZWRFeGNlcHRpb24BACdqYXZhL3V0aWwvY29uY3VycmVudC9FeGVjdXRpb25FeGNlcHRpb24BACVqYXZhL3V0aWwvY29uY3VycmVudC9UaW1lb3V0RXhjZXB0aW9uAQAEKEopSgEACmlzTm90RW1wdHkBAANwb3ABABQoKUxqYXZhL2xhbmcvT2JqZWN0OwEAA3J1bgEAB3JlcGVhdHMBAAtyZXBlYXREZWxheQEAA2FkZAEAFihKTGphdmEvbGFuZy9PYmplY3Q7KVYBAAdpc0VtcHR5AQADKClKAQAdamF2YS91dGlsL2NvbmN1cnJlbnQvVGltZVVuaXQBAAdTRUNPTkRTAQBIKExvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvRGV0ZXJtaW5pc3RpY1NjaGVkdWxlcjtMamF2YS9sYW5nL1J1bm5hYmxlOylWAQBTKExvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvRGV0ZXJtaW5pc3RpY1NjaGVkdWxlcjtMamF2YS91dGlsL2NvbmN1cnJlbnQvQ2FsbGFibGU7KVYBAEkoTG9y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AAQABQABAAYAAAA+AAIAAgAAAAYqK7cAAbEAAAACAAcAAAAKAAIAAAAMAAUADQAIAAAAFgACAAAABgAJAAoAAAAAAAYACwAMAAEAAQANAAAAAgAOUEsDBAoAAAAAAHpYGDl6Qym2NgMAADYDAAA3AAAAb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L2ludGVybmFsL0RlbHRhUXVldWUkTm9kZS5jbGFzc8r+ur4AAAAxACcKAAYAHgkABQAfCQAFACAJAAUAIQcAIwcAJAEABXZhbHVlAQASTGphdmEvbGFuZy9PYmplY3Q7AQAJU2lnbmF0dXJlAQADVFQ7AQAFZGVsYXkBAAFKAQAEbmV4dAEABE5vZGUBAAxJbm5lckNsYXNzZXMBADNMb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L2ludGVybmFsL0RlbHRhUXVldWUkTm9kZTsBADhMb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L2ludGVybmFsL0RlbHRhUXVldWUkTm9kZTxUVDs+OwEABjxpbml0PgEAFihMamF2YS9sYW5nL09iamVjdDtKKVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEABW5hbm9zAQAWTG9jYWxWYXJpYWJsZVR5cGVUYWJsZQEAByhUVDtKKVYBACg8VDpMamF2YS9sYW5nL09iamVjdDs+TGphdmEvbGFuZy9PYmplY3Q7AQAKU291cmNlRmlsZQEAD0RlbHRhUXVldWUuamF2YQwAEgAlDAANABAMAAcACAwACwAMBwAmAQAxb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L2ludGVybmFsL0RlbHRhUXVldWUkTm9kZQEAEGphdmEvbGFuZy9PYmplY3QBAAMoKVYBACxvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvaW50ZXJuYWwvRGVsdGFRdWV1ZQAgAAUABgAAAAMAEQAHAAgAAQAJAAAAAgAKAAEACwAMAAAAAQANABAAAQAJAAAAAgARAAEAAQASABMAAgAUAAAAfgADAAQAAAAUKrcAASoBtQACKiu1AAMqILUABLEAAAADABUAAAAWAAUAAAAKAAQACAAJAAsADgAMABMADQAWAAAAIAADAAAAFAAXABAAAAAAABQABwAIAAEAAAAUABgADAACABkAAAAWAAIAAAAUABcAEQAAAAAAFAAHAAoAAQAJAAAAAgAaAAMACQAAAAIAGwAcAAAAAgAdAA8AAAAKAAEABQAiAA4AClBLAwQKAAAAAAB6WBg5TcoYbHIMAAByDAAAMgAAAG9yZy9qbW9jay9saWIvY29uY3VycmVudC9pbnRlcm5hbC9EZWx0YVF1ZXVlLmNsYXNzyv66vgAAADEAcQoAGgBNCQAZAE4KABkATwkABgBQCQAGAFEHAFIKAAYAUwkABgBUBwBVCABWCgAJAFcHAFgKAAwATQoAGgBZCgBaAFsKAAwAXAgAXQgAXggAXwoADABgCABhCgAMAGIIAGMKAAwAZAcAZQcAZgEABE5vZGUBAAxJbm5lckNsYXNzZXMBAARoZWFkAQAzTG9yZy9qbW9jay9saWIvY29uY3VycmVudC9pbnRlcm5hbC9EZWx0YVF1ZXVlJE5vZGU7AQAJU2lnbmF0dXJlAQA4TG9yZy9qbW9jay9saWIvY29uY3VycmVudC9pbnRlcm5hbC9EZWx0YVF1ZXVlJE5vZGU8VFQ7PjsBAAY8aW5pdD4BAAMoKVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEALkxvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvaW50ZXJuYWwvRGVsdGFRdWV1ZTsBABZMb2NhbFZhcmlhYmxlVHlwZVRhYmxlAQAzTG9yZy9qbW9jay9saWIvY29uY3VycmVudC9pbnRlcm5hbC9EZWx0YVF1ZXVlPFRUOz47AQAHaXNFbXB0eQEAAygpWgEACmlzTm90RW1wdHkBAARuZXh0AQAUKClMamF2YS9sYW5nL09iamVjdDsBAAUoKVRUOwEABWRlbGF5AQADKClKAQADYWRkAQAWKEpMamF2YS9sYW5nL09iamVjdDspVgEAAUoBAAV2YWx1ZQEAEkxqYXZhL2xhbmcvT2JqZWN0OwEAB25ld05vZGUBAARwcmV2AQADVFQ7AQAHKEpUVDspVgEABHRpY2sBAAQoSilKAQAIbGVmdG92ZXIBAAl0aW1lVW5pdHMBAANwb3ABAAZwb3BwZWQBAAZyZW1vdmUBABUoTGphdmEvbGFuZy9PYmplY3Q7KVoBAAdlbGVtZW50AQAEbm9kZQEABihUVDspWgEACHRvU3RyaW5nAQAUKClMamF2YS9sYW5nL1N0cmluZzsBAAJzYgEAGUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsBACg8VDpMamF2YS9sYW5nL09iamVjdDs+TGphdmEvbGFuZy9PYmplY3Q7AQAKU291cmNlRmlsZQEAD0RlbHRhUXVldWUuamF2YQwAIQAiDAAdAB4MACoAKwwANQA2DAAwADQBADFvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvaW50ZXJuYWwvRGVsdGFRdWV1ZSROb2RlDAAhAGcMAC0AHgEAH2phdmEvbGFuZy9JbGxlZ2FsU3RhdGVFeGNlcHRpb24BADhjYW5ub3QgcG9wIHRoZSBoZWFkIGVsZW1lbnQgd2hlbiBpdCBoYXMgYSBub24temVybyBkZWxheQwAIQBoAQAXamF2YS9sYW5nL1N0cmluZ0J1aWxkZXIMAGkAagcAawwAbABHDABtAG4BAAFbAQACLCABAAErDABtAG8BAAI6IAwAbQBwAQABXQwARgBHAQAsb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L2ludGVybmFsL0RlbHRhUXVldWUBABBqYXZhL2xhbmcvT2JqZWN0AQAWKExqYXZhL2xhbmcvT2JqZWN0O0opVgEAFShMamF2YS9sYW5nL1N0cmluZzspVgEACGdldENsYXNzAQATKClMamF2YS9sYW5nL0NsYXNzOwEAD2phdmEvbGFuZy9DbGFzcwEADWdldFNpbXBsZU5hbWUBAAZhcHBlbmQBAC0oTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsBABwoSilMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7AQAtKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL1N0cmluZ0J1aWxkZXI7ACEAGQAaAAAAAQACAB0AHgABAB8AAAACACAACgABACEAIgABACMAAABKAAIAAQAAAAoqtwABKgG1AAKxAAAAAwAkAAAACgACAAAABAAEABAAJQAAAAwAAQAAAAoAJgAnAAAAKAAAAAwAAQAAAAoAJgApAAAAAQAqACsAAQAjAAAASQABAAEAAAANKrQAAscABwSn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ORfMcC+dAwAAnQMAADAAAABvcmcvam1vY2svc3ludGF4L0FyZ3VtZW50Q29uc3RyYWludFBocmFzZXMuY2xhc3PK/rq+AAAAMQAZBwAXBwAYAQAEd2l0aAEAKihMb3JnL2hhbWNyZXN0L01hdGNoZXI7KUxqYXZhL2xhbmcvT2JqZWN0OwEACVNpZ25hdHVyZQEANjxUOkxqYXZhL2xhbmcvT2JqZWN0Oz4oTG9yZy9oYW1jcmVzdC9NYXRjaGVyPFRUOz47KVRUOwEAGShMb3JnL2hhbWNyZXN0L01hdGNoZXI7KVoBAC4oTG9yZy9oYW1jcmVzdC9NYXRjaGVyPExqYXZhL2xhbmcvQm9vbGVhbjs+OylaAQAZKExvcmcvaGFtY3Jlc3QvTWF0Y2hlcjspQgEAKyhMb3JnL2hhbWNyZXN0L01hdGNoZXI8TGphdmEvbGFuZy9CeXRlOz47KUIBABkoTG9yZy9oYW1jcmVzdC9NYXRjaGVyOylTAQAsKExvcmcvaGFtY3Jlc3QvTWF0Y2hlcjxMamF2YS9sYW5nL1Nob3J0Oz47KVMBABkoTG9yZy9oYW1jcmVzdC9NYXRjaGVyOylJAQAuKExvcmcvaGFtY3Jlc3QvTWF0Y2hlcjxMamF2YS9sYW5nL0ludGVnZXI7PjspSQEAGShMb3JnL2hhbWNyZXN0L01hdGNoZXI7KUoBACsoTG9yZy9oYW1jcmVzdC9NYXRjaGVyPExqYXZhL2xhbmcvTG9uZzs+OylKAQAZKExvcmcvaGFtY3Jlc3QvTWF0Y2hlcjspRgEALChMb3JnL2hhbWNyZXN0L01hdGNoZXI8TGphdmEvbGFuZy9GbG9hdDs+OylGAQAZKExvcmcvaGFtY3Jlc3QvTWF0Y2hlcjspRAEALShMb3JnL2hhbWNyZXN0L01hdGNoZXI8TGphdmEvbGFuZy9Eb3VibGU7PjspRAEAClNvdXJjZUZpbGUBAB5Bcmd1bWVudENvbnN0cmFpbnRQaHJhc2VzLmphdmEBACpvcmcvam1vY2svc3ludGF4L0FyZ3VtZW50Q29uc3RyYWludFBocmFzZXMBABBqYXZhL2xhbmcvT2JqZWN0BgEAAQACAAAAAAAIBAEAAwAEAAEABQAAAAIABgQBAAMABwABAAUAAAACAAgEAQADAAkAAQAFAAAAAgAKBAEAAwALAAEABQAAAAIADAQBAAMADQABAAUAAAACAA4EAQADAA8AAQAFAAAAAgAQBAEAAwARAAEABQAAAAIAEgQBAAMAEwABAAUAAAACABQAAQAVAAAAAgAWUEsDBAoAAAAAAHlYGDniK6TSawIAAGsCAAAoAAAAb3JnL2ptb2NrL3N5bnRheC9DYXJkaW5hbGl0eUNsYXVzZS5jbGFzc8r+ur4AAAAxABYHABQHABUBAAdleGFjdGx5AQAkKEkpTG9yZy9qbW9jay9zeW50YXgvUmVjZWl2ZXJDbGF1c2U7AQAHYXRMZWFzdAEAB2JldHdlZW4BACUoSUkpTG9yZy9qbW9jay9zeW50YXgvUmVjZWl2ZXJDbGF1c2U7AQAGYXRNb3N0AQADb25lAQAmKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsBAAlTaWduYXR1cmUBAB48VDpMamF2YS9sYW5nL09iamVjdDs+KFRUOylUVDsBAAhhbGxvd2luZwEANyhMb3JnL2hhbWNyZXN0L01hdGNoZXI7KUxvcmcvam1vY2svc3ludGF4L01ldGhvZENsYXVzZTsBADooTG9yZy9oYW1jcmVzdC9NYXRjaGVyPCo+OylMb3JnL2ptb2NrL3N5bnRheC9NZXRob2RDbGF1c2U7AQAIaWdub3JpbmcBAAVuZXZlcgEAClNvdXJjZUZpbGUBABZDYXJkaW5hbGl0eUNsYXVzZS5qYXZhAQAib3JnL2ptb2NrL3N5bnRheC9DYXJkaW5hbGl0eUNsYXVzZQEAEGphdmEvbGFuZy9PYmplY3QGAQABAAIAAAAAAAoEAQADAAQAAAQBAAUABAAABAEABgAHAAAEAQAIAAQAAAQBAAkACgABAAsAAAACAAwEAQANAAoAAQALAAAAAgAMBAEADQAOAAEACwAAAAIADwQBABAACgABAAsAAAACAAwEAQAQAA4AAQALAAAAAgAPBAEAEQAKAAEACwAAAAIADAABABIAAAACABNQSwMECgAAAAAAeVgYOT0f0SJ5AQAAeQEAACMAAABvcmcvam1vY2svc3ludGF4L01ldGhvZENsYXVzZS5jbGFzc8r+ur4AAAAxAAwHAAoHAAsBAAZtZXRob2QBADsoTG9yZy9oYW1jcmVzdC9NYXRjaGVyOylMb3JnL2ptb2NrL3N5bnRheC9QYXJhbWV0ZXJzQ2xhdXNlOwEACVNpZ25hdHVyZQEAVyhMb3JnL2hhbWNyZXN0L01hdGNoZXI8TGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZDs+OylMb3JnL2ptb2NrL3N5bnRheC9QYXJhbWV0ZXJzQ2xhdXNlOwEANyhMamF2YS9sYW5nL1N0cmluZzspTG9yZy9qbW9jay9zeW50YXgvUGFyYW1ldGVyc0NsYXVzZTsBAApTb3VyY2VGaWxlAQARTWV0aG9kQ2xhdXNlLmphdmEBAB1vcmcvam1vY2svc3ludGF4L01ldGhvZENsYXVzZQEAEGphdmEvbGFuZy9PYmplY3QGAQABAAIAAAAAAAIEAQADAAQAAQAFAAAAAgAGBAEAAwAHAAAAAQAIAAAAAgAJUEsDBAoAAAAAAHlYGDlG+YblJwEAACcBAAAnAAAAb3JnL2ptb2NrL3N5bnRheC9QYXJhbWV0ZXJzQ2xhdXNlLmNsYXNzyv66vgAAADEADwcADAcADQcADgEABHdpdGgBABooW0xvcmcvaGFtY3Jlc3QvTWF0Y2hlcjspVgEACVNpZ25hdHVyZQEAHShbTG9yZy9oYW1jcmVzdC9NYXRjaGVyPCo+OylWAQAPd2l0aE5vQXJndW1lbnRzAQADKClWAQAKU291cmNlRmlsZQEAFVBhcmFtZXRlcnNDbGF1c2UuamF2YQEAIW9yZy9qbW9jay9zeW50YXgvUGFyYW1ldGVyc0NsYXVzZQEAEGphdmEvbGFuZy9PYmplY3QBAB1vcmcvam1vY2svc3ludGF4L01ldGhvZENsYXVzZQYBAAEAAgABAAMAAAACBIEABAAFAAEABgAAAAIABwQBAAgACQAAAAEACgAAAAIAC1BLAwQKAAAAAAB5WBg5dl/xMXABAABwAQAAJQAAAG9yZy9qbW9jay9zeW50YXgvUmVjZWl2ZXJDbGF1c2UuY2xhc3PK/rq+AAAAMQANBwALBwAMAQACb2YBACYoTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OwEACVNpZ25hdHVyZQEAHjxUOkxqYXZhL2xhbmcvT2JqZWN0Oz4oVFQ7KVRUOwEANyhMb3JnL2hhbWNyZXN0L01hdGNoZXI7KUxvcmcvam1vY2svc3ludGF4L01ldGhvZENsYXVzZTsBADooTG9yZy9oYW1jcmVzdC9NYXRjaGVyPCo+OylMb3JnL2ptb2NrL3N5bnRheC9NZXRob2RDbGF1c2U7AQAKU291cmNlRmlsZQEAE1JlY2VpdmVyQ2xhdXNlLmphdmEBAB9vcmcvam1vY2svc3ludGF4L1JlY2VpdmVyQ2xhdXNlAQAQamF2YS9sYW5nL09iamVjdAYBAAEAAgAAAAAAAgQBAAMABAABAAUAAAACAAYEAQADAAcAAQAFAAAAAgAIAAEACQAAAAIAClBLAwQKAAAAAAB5WBg58DIk4gIBAAACAQAAIwAAAG9yZy9qbW9jay9zeW50YXgvU3RhdGVzQ2xhdXNlLmNsYXNzyv66vgAAADEACwcACQcACgEAAmlzAQAuKExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL2ptb2NrL2ludGVybmFsL1N0YXRlOwEABWlzTm90AQA3KExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL2ptb2NrL2ludGVybmFsL1N0YXRlUHJlZGljYXRlOwEAClNvdXJjZUZpbGUBABFTdGF0ZXNDbGF1c2UuamF2YQEAHW9yZy9qbW9jay9zeW50YXgvU3RhdGVzQ2xhdXNlAQAQamF2YS9sYW5nL09iamVjdAYBAAEAAgAAAAAAAgQBAAMABAAABAEABQAGAAAAAQAHAAAAAgAIUEsDBAoAAAAAAI9m4zgOz+qocSQAAHEkAAAbAAAAb3JnL2ptb2NrL0V4cGVjdGF0aW9ucy5qYXZhcGFja2FnZSBvcmcuam1vY2s7CgppbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwppbXBvcnQgamF2YS51dGlsLkxpc3Q7CgppbXBvcnQgb3JnLmhhbWNyZXN0Lk1hdGNoZXI7CmltcG9ydCBvcmcuaGFtY3Jlc3QuY29yZS5Jc0FueXRoaW5nOwppbXBvcnQgb3JnLmhhbWNyZXN0LmNvcmUuSXNFcXVhbDsKaW1wb3J0IG9yZy5oYW1jcmVzdC5jb3JlLklzSW5zdGFuY2VPZjsKaW1wb3J0IG9yZy5oYW1jcmVzdC5jb3JlLklzTm90OwppbXBvcnQgb3JnLmhhbWNyZXN0LmNvcmUuSXNOdWxsOwppbXBvcnQgb3JnLmhhbWNyZXN0LmNvcmUuSXNTYW1lOwppbXBvcnQgb3JnLmptb2NrLmFwaS5BY3Rpb247CmltcG9ydCBvcmcuam1vY2suaW50ZXJuYWwuQ2FyZGluYWxpdHk7CmltcG9ydCBvcmcuam1vY2suaW50ZXJuYWwuQ2hhbmdlU3RhdGVTaWRlRWZmZWN0OwppbXBvcnQgb3JnLmptb2NrLmludGVybmFsLkV4cGVjdGF0aW9uQnVpbGRlcjsKaW1wb3J0IG9yZy5qbW9jay5pbnRlcm5hbC5FeHBlY3RhdGlvbkNvbGxlY3RvcjsKaW1wb3J0IG9yZy5qbW9jay5pbnRlcm5hbC5JblN0YXRlT3JkZXJpbmdDb25zdHJhaW50OwppbXBvcnQgb3JnLmptb2NrLmludGVybmFsLkludm9jYXRpb25FeHBlY3RhdGlvbkJ1aWxkZXI7CmltcG9ydCBvcmcuam1vY2suaW50ZXJuYWwuU3RhdGU7CmltcG9ydCBvcmcuam1vY2suaW50ZXJuYWwuU3RhdGVQcmVkaWNhdGU7CmltcG9ydCBvcmcuam1vY2subGliLmFjdGlvbi5BY3Rpb25TZXF1ZW5jZTsKaW1wb3J0IG9yZy5qbW9jay5saWIuYWN0aW9uLkRvQWxsQWN0aW9uOwppbXBvcnQgb3JnLmptb2NrLmxpYi5hY3Rpb24uUmV0dXJuRW51bWVyYXRpb25BY3Rpb247CmltcG9ydCBvcmcuam1vY2subGliLmFjdGlvbi5SZXR1cm5JdGVyYXRvckFjdGlvbjsKaW1wb3J0IG9yZy5qbW9jay5saWIuYWN0aW9uLlJldHVyblZhbHVlQWN0aW9uOwppbXBvcnQgb3JnLmptb2NrLmxpYi5hY3Rpb24uVGhyb3dBY3Rpb247CmltcG9ydCBvcmcuam1vY2suc3ludGF4LkFjdGlvbkNsYXVzZTsKaW1wb3J0IG9yZy5qbW9jay5zeW50YXguQXJndW1lbnRDb25zdHJhaW50UGhyYXNlczsKaW1wb3J0IG9yZy5qbW9jay5zeW50YXguQ2FyZGluYWxpdHlDbGF1c2U7CmltcG9ydCBvcmcuam1vY2suc3ludGF4Lk1ldGhvZENsYXVzZTsKaW1wb3J0IG9yZy5qbW9jay5zeW50YXguUmVjZWl2ZXJDbGF1c2U7CmltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuSXNFcXVhbC4qOwoKLyoqCiAqIFByb3ZpZGVzIG1vc3Qgb2YgdGhlIHN5bnRheCBvZiBqTW9jaydzICJkb21haW4tc3BlY2lmaWMgbGFuZ3VhZ2UiIEFQSS4KICogVGhlIG1ldGhvZHMgb2YgdGhpcyBjbGFzcyBkb24ndCBtYWtlIGFueSBzZW5zZSBvbiB0aGVpciBvd24sIHNvIHRoZQogKiBKYXZhZG9jIGlzIHJhdGhlciBzcGFyc2UuICBDb25zdWx0IHRoZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBqTW9jayAKICogd2Vic2l0ZSBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZSB0aGlzIEFQSS4KICogCiAqIEBhdXRob3IgbmF0CiAqCiAqLwpwdWJsaWMgY2xhc3MgRXhwZWN0YXRpb25zIGltcGxlbWVudHMgRXhwZWN0YXRpb25CdWlsZGVyLAogICAgQ2FyZGluYWxpdHlDbGF1c2UsIEFyZ3VtZW50Q29uc3RyYWludFBocmFzZXMsIEFjdGlvbkNsYXVzZSAKewogICAgcHJpdmF0ZSBMaXN0PEludm9jYXRpb25FeHBlY3RhdGlvbkJ1aWxkZXI+IGJ1aWxkZXJzID0gbmV3IEFycmF5TGlzdDxJbnZvY2F0aW9uRXhwZWN0YXRpb25CdWlsZGVyPigpOwogICAgcHJpdmF0ZSBJbnZvY2F0aW9uRXhwZWN0YXRpb25CdWlsZGVyIGN1cnJlbnRCdWlsZGVyID0gbnVsbDsKICAgIAogICAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpc2VFeHBlY3RhdGlvbkNhcHR1cmUoQ2FyZGluYWxpdHkgY2FyZGluYWxpdHkpIHsKICAgICAgICBjaGVja0xhc3RFeHBlY3RhdGlvbldhc0Z1bGx5U3BlY2lmaWVkKCk7CiAgICAgICAgCiAgICAgICAgY3VycmVudEJ1aWxkZXIgPSBuZXcgSW52b2NhdGlvbkV4cGVjdGF0aW9uQnVpbGRlcigpOwogICAgICAgIGN1cnJlbnRCdWlsZGVyLnNldENhcmRpbmFsaXR5KGNhcmRpbmFsaXR5KTsKICAgICAgICBidWlsZGVycy5hZGQoY3VycmVudEJ1aWxkZXIpOwogICAgfQogICAgCiAgICBwdWJsaWMgdm9pZCBidWlsZEV4cGVjdGF0aW9ucyhBY3Rpb24gZGVmYXVsdEFjdGlvbiwgRXhwZWN0YXRpb25Db2xsZWN0b3IgY29sbGVjdG9yKSB7CiAgICAgICAgY2hlY2tMYXN0RXhwZWN0YXRpb25XYXNGdWxseVNwZWNpZmllZCgpOwogICAgICAgIAogICAgICAgIGZvciAoSW52b2NhdGlvbkV4cGVjdGF0aW9uQnVpbGRlciBidWlsZGVyIDogYnVpbGRlcnMpIHsKICAgICAgICAgICAgY29sbGVjdG9yLmFkZChidWlsZGVyLnRvRXhwZWN0YXRpb24oZGVmYXVsdEFjdGlvbikpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcHJvdGVjdGVkIEludm9jYXRpb25FeHBlY3RhdGlvbkJ1aWxkZXIgY3VycmVudEJ1aWxkZXIoKSB7CiAgICAgICAgaWYgKGN1cnJlbnRCdWlsZGVyID09IG51bGwpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigibm8gZXhwZWN0YXRpb25zIGhhdmUgYmVlbiBzcGVjaWZpZWQgIiArCiAgICAgICAgICAgICAgICAiKGRpZCB5b3UgZm9yZ2V0IHRvIHRvIHNwZWNpZnkgdGhlIGNhcmRpbmFsaXR5IG9mIHRoZSBmaXJzdCBleHBlY3RhdGlvbj8pIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjdXJyZW50QnVpbGRlcjsKICAgIH0KICAgIAogICAgcHJpdmF0ZSB2b2lkIGNoZWNrTGFzdEV4cGVjdGF0aW9uV2FzRnVsbHlTcGVjaWZpZWQoKSB7CiAgICAgICAgaWYgKGN1cnJlbnRCdWlsZGVyICE9IG51bGwpIHsKICAgICAgICAgICAgY3VycmVudEJ1aWxkZXIuY2hlY2tXYXNGdWxseVNwZWNpZmllZCgpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLyogCiAgICAgKiBTeW50YWN0aWMgc3VnYXIKICAgICAqLwogICAgCiAgICBwdWJsaWMgUmVjZWl2ZXJDbGF1c2UgZXhhY3RseShpbnQgY291bnQpIHsKICAgICAgICBpbml0aWFsaXNlRXhwZWN0YXRpb25DYXB0dXJlKENhcmRpbmFsaXR5LmV4YWN0bHkoY291bnQpKTsKICAgICAgICByZXR1cm4gY3VycmVudEJ1aWxkZXI7CiAgICB9CiAgICAKICAgIC8vIE1ha2VzIHRoZSBlbnRpcmUgZXhwZWN0YXRpb24gbW9yZSByZWFkYWJsZSB0aGFuIG9uZQogICAgcHVibGljIDxUPiBUIG9uZU9mKFQgbW9ja09iamVjdCkgewogICAgICAgIHJldHVybiBleGFjdGx5KDEpLm9mKG1vY2tPYmplY3QpOwogICAgfQogICAgCiAgICAvKioKICAgICAqIFRoaXMgd2lsbCBldmVudHVhbGx5IGJlIGRlcHJlY2F0ZWQuIFVzZSB7QGxpbmsgI29uZU9mKE9iamVjdCkgb25lT2Z9IGluc3RlYWQuCiAgICAgKi8KICAgIHB1YmxpYyA8VD4gVCBvbmUgKFQgbW9ja09iamVjdCkgewogICAgICAgIHJldHVybiBvbmVPZihtb2NrT2JqZWN0KTsKICAgIH0KICAgIAogICAgcHVibGljIFJlY2VpdmVyQ2xhdXNlIGF0TGVhc3QoaW50IGNvdW50KSB7CiAgICAgICAgaW5pdGlhbGlzZUV4cGVjdGF0aW9uQ2FwdHVyZShDYXJkaW5hbGl0eS5hdExlYXN0KGNvdW50KSk7CiAgICAgICAgcmV0dXJuIGN1cnJlbnRCdWlsZGVyOwogICAgfQogICAgCiAgICBwdWJsaWMgUmVjZWl2ZXJDbGF1c2UgYmV0d2VlbihpbnQgbWluQ291bnQsIGludCBtYXhDb3VudCkgewogICAgICAgIGluaXRpYWxpc2VFeHBlY3RhdGlvbkNhcHR1cmUoQ2FyZGluYWxpdHkuYmV0d2VlbihtaW5Db3VudCwgbWF4Q291bnQpKTsKICAgICAgICByZXR1cm4gY3VycmVudEJ1aWxkZXI7CiAgICB9CiAgICAKICAgIHB1YmxpYyBSZWNlaXZlckNsYXVzZSBhdE1vc3QoaW50IGNvdW50KSB7CiAgICAgICAgaW5pdGlhbGlzZUV4cGVjdGF0aW9uQ2FwdHVyZShDYXJkaW5hbGl0eS5hdE1vc3QoY291bnQpKTsKICAgICAgICByZXR1cm4gY3VycmVudEJ1aWxkZXI7CiAgICB9CiAgICAKICAgIHB1YmxpYyBNZXRob2RDbGF1c2UgYWxsb3dpbmcoTWF0Y2hlcjw/PiBtb2NrT2JqZWN0TWF0Y2hlcikgewogICAgICAgIHJldHVybiBhdExlYXN0KDApLm9mKG1vY2tPYmplY3RNYXRjaGVyKTsKICAgIH0KICAgIAogICAgcHVibGljIDxUPiBUIGFsbG93aW5nKFQgbW9ja09iamVjdCkgewogICAgICAgIHJldHVybiBhdExlYXN0KDApLm9mKG1vY2tPYmplY3QpOwogICAgfQogICAgCiAgICBwdWJsaWMgPFQ+IFQgaWdub3JpbmcoVCBtb2NrT2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIGFsbG93aW5nKG1vY2tPYmplY3QpOwogICAgfQogICAgCiAgICBwdWJsaWMgTWV0aG9kQ2xhdXNlIGlnbm9yaW5nKE1hdGNoZXI8Pz4gbW9ja09iamVjdE1hdGNoZXIpIHsKICAgICAgICByZXR1cm4gYWxsb3dpbmcobW9ja09iamVjdE1hdGNoZXIpOwogICAgfQogICAgCiAgICBwdWJsaWMgPFQ+IFQgbmV2ZXIoVCBtb2NrT2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIGV4YWN0bHkoMCkub2YobW9ja09iamVjdCk7CiAgICB9CiAgICAKICAgIHByaXZhdGUgdm9pZCBhZGRQYXJhbWV0ZXJNYXRjaGVyKE1hdGNoZXI8Pz4gbWF0Y2hlcikgewogICAgICAgIGN1cnJlbnRCdWlsZGVyKCkuYWRkUGFyYW1ldGVyTWF0Y2hlcihtYXRjaGVyKTsKICAgIH0KCiAgICBwdWJsaWMgPFQ+IFQgd2l0aChNYXRjaGVyPFQ+IG1hdGNoZXIpIHsKICAgICAgICBhZGRQYXJhbWV0ZXJNYXRjaGVyKG1hdGNoZXIpOwogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHB1YmxpYyBib29sZWFuIHdpdGgoTWF0Y2hlcjxCb29sZWFuPiBtYXRjaGVyKSB7CiAgICAgICAgYWRkUGFyYW1ldGVyTWF0Y2hlcihtYXRjaGVyKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAKICAgIHB1YmxpYyBieXRlIHdpdGgoTWF0Y2hlcjxCeXRlPiBtYXRjaGVyKSB7CiAgICAgICAgYWRkUGFyYW1ldGVyTWF0Y2hlcihtYXRjaGVyKTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBwdWJsaWMgc2hvcnQgd2l0aChNYXRjaGVyPFNob3J0PiBtYXRjaGVyKSB7CiAgICAgICAgYWRkUGFyYW1ldGVyTWF0Y2hlcihtYXRjaGVyKTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBwdWJsaWMgY2hhciB3aXRoKE1hdGNoZXI8Q2hhcmFjdGVyPiBtYXRjaGVyKSB7CiAgICAgICAgYWRkUGFyYW1ldGVyTWF0Y2hlcihtYXRjaGVyKTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIAogICAgcHVibGljIGludCB3aXRoKE1hdGNoZXI8SW50ZWdlcj4gbWF0Y2hlcikgewogICAgICAgIGFkZFBhcmFtZXRlck1hdGNoZXIobWF0Y2hlcik7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgcHVibGljIGxvbmcgd2l0aChNYXRjaGVyPExvbmc+IG1hdGNoZXIpIHsKICAgICAgICBhZGRQYXJhbWV0ZXJNYXRjaGVyKG1hdGNoZXIpOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIHB1YmxpYyBmbG9hdCB3aXRoKE1hdGNoZXI8RmxvYXQ+IG1hdGNoZXIpIHsKICAgICAgICBhZGRQYXJhbWV0ZXJNYXRjaGVyKG1hdGNoZXIpOwogICAgICAgIHJldHVybiAwLjBmOwogICAgfQoKICAgIHB1YmxpYyBkb3VibGUgd2l0aChNYXRjaGVyPERvdWJsZT4gbWF0Y2hlcikgewogICAgICAgIGFkZFBhcmFtZXRlck1hdGNoZXIobWF0Y2hlcik7CiAgICAgICAgcmV0dXJuIDAuMDsKICAgIH0KICAgIAogICAgcHVibGljIGJvb2xlYW4gd2l0aChib29sZWFuIHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIHdpdGgoZXF1YWxUbyh2YWx1ZSkpOwogICAgfQogICAgCiAgICBwdWJsaWMgYnl0ZSB3aXRoKGJ5dGUgdmFsdWUpIHsKICAgICAgICByZXR1cm4gd2l0aChlcXVhbFRvKHZhbHVlKSk7CiAgICB9CiAgICAKICAgIHB1YmxpYyBzaG9ydCB3aXRoKHNob3J0IHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIHdpdGgoZXF1YWxUbyh2YWx1ZSkpOwogICAgfQogICAgCiAgICBwdWJsaWMgY2hhciB3aXRoKGNoYXIgdmFsdWUpIHsKICAgICAgICByZXR1cm4gd2l0aChlcXVhbFRvKHZhbHVlKSk7CiAgICB9CiAgICAKICAgIHB1YmxpYyBpbnQgd2l0aChpbnQgdmFsdWUpIHsKICAgICAgICByZXR1cm4gd2l0aChlcXVhbFRvKHZhbHVlKSk7CiAgICB9CiAgICAKICAgIHB1YmxpYyBsb25nIHdpdGgobG9uZyB2YWx1ZSkgewogICAgICAgIHJldHVybiB3aXRoKGVxdWFsVG8odmFsdWUpKTsKICAgIH0KICAgIAogICAgcHVibGljIGZsb2F0IHdpdGgoZmxvYXQgdmFsdWUpIHsKICAgICAgICByZXR1cm4gd2l0aChlcXVhbFRvKHZhbHVlKSk7CiAgICB9CiAgICAKICAgIHB1YmxpYyBkb3VibGUgd2l0aChkb3VibGUgdmFsdWUpIHsKICAgICAgICByZXR1cm4gd2l0aChlcXVhbFRvKHZhbHVlKSk7CiAgICB9CiAgICAKICAgIHB1YmxpYyA8VD4gVCB3aXRoKFQgdmFsdWUpIHsKICAgICAgICByZXR1cm4gd2l0aChlcXVhbFRvKHZhbHVlKSk7CiAgICB9CiAgICAKICAgIHB1YmxpYyB2b2lkIHdpbGwoQWN0aW9uIGFjdGlvbikgewogICAgICAgIGN1cnJlbnRCdWlsZGVyKCkuc2V0QWN0aW9uKGFjdGlvbik7CiAgICB9CiAgICAKICAgIC8qIENvbW1vbiBjb25zdHJhaW50cwogICAgICovCiAgICAKICAgIHB1YmxpYyBzdGF0aWMgPFQ+IE1hdGNoZXI8VD4gZXF1YWwoVCB2YWx1ZSkgewogICAgICAgIHJldHVybiBuZXcgSXNFcXVhbDxUPih2YWx1ZSk7CiAgICB9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgPFQ+IE1hdGNoZXI8VD4gc2FtZShUIHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBJc1NhbWU8VD4odmFsdWUpOwogICAgfQogICAgCiAgICBwdWJsaWMgc3RhdGljIDxUPiBNYXRjaGVyPFQ+IGFueShAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgQ2xhc3M8VD4gdHlwZSkgewogICAgICAgIHJldHVybiBuZXcgSXNBbnl0aGluZzxUPigpOwogICAgfQogICAgCiAgICBwdWJsaWMgc3RhdGljIDxUPiBNYXRjaGVyPFQ+IGFueXRoaW5nKCkgewogICAgICAgIHJldHVybiBuZXcgSXNBbnl0aGluZzxUPigpOwogICAgfQogICAgCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIAogICAgICogIHVzZSB7QGxpbmsgI2FOb25OdWxsfSBvciB7QGxpbmsgI2FueX0gdW50aWwgdHlwZSBpbmZlcmVuY2UgYWN0dWFsbHkgd29ya3MgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBKYXZhCiAgICAgKi8KICAgIEBEZXByZWNhdGVkCiAgICBwdWJsaWMgc3RhdGljIE1hdGNoZXI8T2JqZWN0PiBhKENsYXNzPD8+IHR5cGUpIHsKICAgICAgICByZXR1cm4gbmV3IElzSW5zdGFuY2VPZih0eXBlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkIAogICAgICogIHVzZSB7QGxpbmsgI2FOb25OdWxsfSBvciB7QGxpbmsgI2FueX0gdW50aWwgdHlwZSBpbmZlcmVuY2UgYWN0dWFsbHkgd29ya3MgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBKYXZhCiAgICAgKi8KICAgIEBEZXByZWNhdGVkCiAgICBwdWJsaWMgc3RhdGljIE1hdGNoZXI8T2JqZWN0PiBhbihDbGFzczw/PiB0eXBlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBJc0luc3RhbmNlT2YodHlwZSk7CiAgICB9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgPFQ+IE1hdGNoZXI8VD4gYU51bGwoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIENsYXNzPFQ+IHR5cGUpIHsKICAgICAgICByZXR1cm4gbmV3IElzTnVsbDxUPigpOwogICAgfQogICAgCiAgICBwdWJsaWMgc3RhdGljIDxUPiBNYXRjaGVyPFQ+IGFOb25OdWxsKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBDbGFzczxUPiB0eXBlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBJc05vdDxUPihuZXcgSXNOdWxsPFQ+KCkpOwogICAgfQogICAgCiAgICAvKiBDb21tb24gYWN0aW9ucwogICAgICovCiAgICAKICAgIHB1YmxpYyBzdGF0aWMgQWN0aW9uIHJldHVyblZhbHVlKE9iamVjdCByZXN1bHQpIHsKICAgICAgICByZXR1cm4gbmV3IFJldHVyblZhbHVlQWN0aW9uKHJlc3VsdCk7CiAgICB9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgQWN0aW9uIHRocm93RXhjZXB0aW9uKFRocm93YWJsZSB0aHJvd2FibGUpIHsKICAgICAgICByZXR1cm4gbmV3IFRocm93QWN0aW9uKHRocm93YWJsZSk7CiAgICB9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgQWN0aW9uIHJldHVybkl0ZXJhdG9yKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgewogICAgICAgIHJldHVybiBuZXcgUmV0dXJuSXRlcmF0b3JBY3Rpb24oY29sbGVjdGlvbik7CiAgICB9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgPFQ+IEFjdGlvbiByZXR1cm5JdGVyYXRvcihUIC4uLiBpdGVtcykgewogICAgICAgIHJldHVybiBuZXcgUmV0dXJuSXRlcmF0b3JBY3Rpb24oaXRlbXMpOwogICAgfQogICAgCiAgICBwdWJsaWMgc3RhdGljIEFjdGlvbiByZXR1cm5FbnVtZXJhdGlvbihDb2xsZWN0aW9uPD8+IGNvbGxlY3Rpb24pIHsKICAgICAgICByZXR1cm4gbmV3IFJldHVybkVudW1lcmF0aW9uQWN0aW9uKGNvbGxlY3Rpb24pOwogICAgfQogICAgCiAgICBwdWJsaWMgc3RhdGljIDxUPiBBY3Rpb24gcmV0dXJuRW51bWVyYXRpb24oVCAuLi4gaXRlbXMpIHsKICAgICAgICByZXR1cm4gbmV3IFJldHVybkVudW1lcmF0aW9uQWN0aW9uKGl0ZW1zKTsKICAgIH0KICAgIAogICAgcHVibGljIHN0YXRpYyBBY3Rpb24gZG9BbGwoQWN0aW9uLi4uYWN0aW9ucykgewogICAgICAgIHJldHVybiBuZXcgRG9BbGxBY3Rpb24oYWN0aW9ucyk7CiAgICB9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgQWN0aW9uIG9uQ29uc2VjdXRpdmVDYWxscyhBY3Rpb24uLi5hY3Rpb25zKSB7CiAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25TZXF1ZW5jZShhY3Rpb25zKTsKICAgIH0KICAgIAogICAgLyogTmFtaW5nIGFuZCBvcmRlcmluZwogICAgICovCiAgICAKICAgIHB1YmxpYyB2b2lkIHdoZW4oU3RhdGVQcmVkaWNhdGUgcHJlZGljYXRlKSB7CiAgICAgICAgY3VycmVudEJ1aWxkZXIoKS5hZGRPcmRlcmluZ0NvbnN0cmFpbnQobmV3IEluU3RhdGVPcmRlcmluZ0NvbnN0cmFpbnQocHJlZGljYXRlKSk7CiAgICB9CiAgICAKICAgIHB1YmxpYyB2b2lkIHRoZW4oU3RhdGUgc3RhdGUpIHsKICAgICAgICBjdXJyZW50QnVpbGRlcigpLmFkZFNpZGVFZmZlY3QobmV3IENoYW5nZVN0YXRlU2lkZUVmZmVjdChzdGF0ZSkpOwogICAgfQogICAgCiAgICBwdWJsaWMgdm9pZCBpblNlcXVlbmNlKFNlcXVlbmNlIHNlcXVlbmNlKSB7CiAgICAgICAgY3VycmVudEJ1aWxkZXIoKS5hZGRJblNlcXVlbmNlT3JkZXJpbmdDb25zdHJhaW50KHNlcXVlbmNlKTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBpblNlcXVlbmNlcyhTZXF1ZW5jZS4uLiBzZXF1ZW5jZXMpIHsKICAgICAgICBmb3IgKFNlcXVlbmNlIHNlcXVlbmNlIDogc2VxdWVuY2VzKSB7CiAgICAgICAgICAgIGluU2VxdWVuY2Uoc2VxdWVuY2UpOwogICAgICAgIH0KICAgIH0KfQpQSwMECgAAAAAALVvXOLnunCk6JQAAOiUAABYAAABvcmcvam1vY2svTW9ja2VyeS5qYXZhcGFja2FnZSBvcmcuam1vY2s7CgppbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwppbXBvcnQgamF2YS51dGlsLkxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuU2V0OwoKaW1wb3J0IG9yZy5oYW1jcmVzdC5EZXNjcmlwdGlvbjsKaW1wb3J0IG9yZy5oYW1jcmVzdC5TZWxmRGVzY3JpYmluZzsKaW1wb3J0IG9yZy5qbW9jay5hcGkuRXhwZWN0YXRpb247CmltcG9ydCBvcmcuam1vY2suYXBpLkV4cGVjdGF0aW9uRXJyb3I7CmltcG9ydCBvcmcuam1vY2suYXBpLkV4cGVjdGF0aW9uRXJyb3JUcmFuc2xhdG9yOwppbXBvcnQgb3JnLmptb2NrLmFwaS5JbXBvc3RlcmlzZXI7CmltcG9ydCBvcmcuam1vY2suYXBpLkludm9jYXRpb247CmltcG9ydCBvcmcuam1vY2suYXBpLkludm9rYWJsZTsKaW1wb3J0IG9yZy5qbW9jay5hcGkuTW9ja09iamVjdE5hbWluZ1NjaGVtZTsKaW1wb3J0IG9yZy5qbW9jay5pbnRlcm5hbC5DYXB0dXJlQ29udHJvbDsKaW1wb3J0IG9yZy5qbW9jay5pbnRlcm5hbC5FeHBlY3RhdGlvbkJ1aWxkZXI7CmltcG9ydCBvcmcuam1vY2suaW50ZXJuYWwuRXhwZWN0YXRpb25DYXB0dXJlOwppbXBvcnQgb3JnLmptb2NrLmludGVybmFsLkludm9jYXRpb25EaXNwYXRjaGVyOwppbXBvcnQgb3JnLmptb2NrLmludGVybmFsLkludm9jYXRpb25EaXZlcnRlcjsKaW1wb3J0IG9yZy5qbW9jay5pbnRlcm5hbC5JbnZvY2F0aW9uVG9FeHBlY3RhdGlvblRyYW5zbGF0b3I7CmltcG9ydCBvcmcuam1vY2suaW50ZXJuYWwuTmFtZWRTZXF1ZW5jZTsKaW1wb3J0IG9yZy5qbW9jay5pbnRlcm5hbC5PYmplY3RNZXRob2RFeHBlY3RhdGlvbkJvdW5jZXI7CmltcG9ydCBvcmcuam1vY2suaW50ZXJuYWwuUHJveGllZE9iamVjdElkZW50aXR5OwppbXBvcnQgb3JnLmptb2NrLmludGVybmFsLlJldHVybkRlZmF1bHRWYWx1ZUFjdGlvbjsKaW1wb3J0IG9yZy5qbW9jay5saWIuQ2FtZWxDYXNlTmFtaW5nU2NoZW1lOwppbXBvcnQgb3JnLmptb2NrLmxpYi5JZGVudGl0eUV4cGVjdGF0aW9uRXJyb3JUcmFuc2xhdG9yOwppbXBvcnQgb3JnLmptb2NrLmxpYi5KYXZhUmVmbGVjdGlvbkltcG9zdGVyaXNlcjsKCgovKioKICogQSBNb2NrZXJ5IHJlcHJlc2VudHMgdGhlIGNvbnRleHQsIG9yIG5laWdoYm91cmhvb2QsIG9mIHRoZSBvYmplY3QocykgdW5kZXIgdGVzdC4gIAogKiAKICogVGhlIG5laWdoYm91cmluZyBvYmplY3RzIGluIHRoYXQgY29udGV4dCBhcmUgbW9ja2VkIG91dC4gVGhlIHRlc3Qgc3BlY2lmaWVzIHRoZSAKICogZXhwZWN0ZWQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIG9iamVjdChzKSB1bmRlciB0ZXN0IGFuZCBpdHMgIG5laWdoYm91cnMgYW5kIAogKiB0aGUgTW9ja2VyeSBjaGVja3MgdGhvc2UgZXhwZWN0YXRpb25zIHdoaWxlIHRoZSB0ZXN0IGlzIHJ1bm5pbmcuCiAqIAogKiBAYXV0aG9yIG5wcnljZQogKiBAYXV0aG9yIHNtZ2YKICogQGF1dGhvciBuYW1lZCBieSBJdmFuIE1vb3JlLgogKi8KcHVibGljIGNsYXNzIE1vY2tlcnkgaW1wbGVtZW50cyBTZWxmRGVzY3JpYmluZyB7CiAgICBwcml2YXRlIFNldDxTdHJpbmc+IG1vY2tOYW1lcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKICAgIHByaXZhdGUgSW1wb3N0ZXJpc2VyIGltcG9zdGVyaXNlciA9IEphdmFSZWZsZWN0aW9uSW1wb3N0ZXJpc2VyLklOU1RBTkNFOwogICAgcHJpdmF0ZSBFeHBlY3RhdGlvbkVycm9yVHJhbnNsYXRvciBleHBlY3RhdGlvbkVycm9yVHJhbnNsYXRvciA9IElkZW50aXR5RXhwZWN0YXRpb25FcnJvclRyYW5zbGF0b3IuSU5TVEFOQ0U7CiAgICBwcml2YXRlIE1vY2tPYmplY3ROYW1pbmdTY2hlbWUgbmFtaW5nU2NoZW1lID0gQ2FtZWxDYXNlTmFtaW5nU2NoZW1lLklOU1RBTkNFOwogICAgCiAgICBwcml2YXRlIFJldHVybkRlZmF1bHRWYWx1ZUFjdGlvbiBkZWZhdWx0QWN0aW9uID0gbmV3IFJldHVybkRlZmF1bHRWYWx1ZUFjdGlvbihpbXBvc3RlcmlzZXIpOwogICAgCiAgICBwcml2YXRlIEludm9jYXRpb25EaXNwYXRjaGVyIGRpc3BhdGNoZXIgPSBuZXcgSW52b2NhdGlvbkRpc3BhdGNoZXIoKTsKICAgIHByaXZhdGUgVGhyb3dhYmxlIGZpcnN0RXJyb3IgPSBudWxsOwogICAgCiAgICBwcml2YXRlIExpc3Q8SW52b2NhdGlvbj4gYWN0dWFsSW52b2NhdGlvbnMgPSBuZXcgQXJyYXlMaXN0PEludm9jYXRpb24+KCk7CiAgICAKICAgIAogICAgLyogCiAgICAgKiBQb2xpY2llcwogICAgICovCiAgICAKICAgIC8qKgogICAgICogU2V0cyB0aGUgcmVzdWx0IHJldHVybmVkIGZvciB0aGUgZ2l2ZW4gdHlwZSB3aGVuIG5vIHJldHVybiB2YWx1ZSBoYXMgYmVlbiBleHBsaWNpdGx5CiAgICAgKiBzcGVjaWZpZWQgaW4gdGhlIGV4cGVjdGF0aW9uLgogICAgICogCiAgICAgKiBAcGFyYW0gdHlwZQogICAgICogICAgVGhlIHR5cGUgZm9yIHdoaWNoIHRvIHJldHVybiA8dmFyPnJlc3VsdDwvdmFyPi4KICAgICAqIEBwYXJhbSByZXN1bHQKICAgICAqICAgIFRoZSB2YWx1ZSB0byByZXR1cm4gd2hlbiBhIG1ldGhvZCBvZiByZXR1cm4gdHlwZSA8dmFyPnR5cGU8L3Zhcj4KICAgICAqICAgIGlzIGludm9rZWQgZm9yIHdoaWNoIGFuIGV4cGxpY2l0IHJldHVybiB2YWx1ZSBoYXMgaGFzIG5vdCBiZWVuIHNwZWNpZmllZC4KICAgICAqLwogICAgcHVibGljIHZvaWQgc2V0RGVmYXVsdFJlc3VsdEZvclR5cGUoQ2xhc3M8Pz4gdHlwZSwgT2JqZWN0IHJlc3VsdCkgewogICAgICAgIGRlZmF1bHRBY3Rpb24uYWRkUmVzdWx0KHR5cGUsIHJlc3VsdCk7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogQ2hhbmdlcyB0aGUgaW1wb3N0ZXJpc2VyIHVzZWQgdG8gYWRhcHQgbW9jayBvYmplY3RzIHRvIHRoZSBtb2NrZWQgdHlwZS4KICAgICAqIAogICAgICogVGhlIGRlZmF1bHQgaW1wb3N0ZXJpc2VyIGFsbG93cyBhIHRlc3QgdG8gbW9jayBpbnRlcmZhY2VzIGJ1dCBub3QKICAgICAqIGNsYXNzZXMsIHNvIHlvdSdsbCBoYXZlIHRvIHBsdWcgYSBkaWZmZXJlbnQgaW1wb3N0ZXJpc2VyIGludG8gdGhlCiAgICAgKiBNb2NrZXJ5IGlmIHlvdSB3YW50IHRvIG1vY2sgY2xhc3Nlcy4KICAgICAqLwogICAgcHVibGljIHZvaWQgc2V0SW1wb3N0ZXJpc2VyKEltcG9zdGVyaXNlciBpbXBvc3RlcmlzZXIpIHsKICAgICAgICB0aGlzLmltcG9zdGVyaXNlciA9IGltcG9zdGVyaXNlcjsKICAgICAgICB0aGlzLmRlZmF1bHRBY3Rpb24uc2V0SW1wb3N0ZXJpc2VyKGltcG9zdGVyaXNlcik7CiAgICB9CiAgICAKICAgIC8qKgogICAgICogQ2hhbmdlcyB0aGUgbmFtaW5nIHNjaGVtZSB1c2VkIHRvIGdlbmVyYXRlIG5hbWVzIGZvciBtb2NrIG9iamVjdHMgdGhhdCAKICAgICAqIGhhdmUgbm90IGJlZW4gZXhwbGljaXRseSBuYW1lZCBpbiB0aGUgdGVzdC4KICAgICAqIAogICAgICogVGhlIGRlZmF1bHQgbmFtaW5nIHNjaGVtZSBuYW1lcyBtb2NrIG9iamVjdHMgYnkgbG93ZXItY2FzaW5nIHRoZSBmaXJzdAogICAgICogbGV0dGVyIG9mIHRoZSBjbGFzcyBuYW1lLCBzbyBhIG1vY2sgb2JqZWN0IG9mIHR5cGUgQmFuYW5hU3BsaXQgd2lsbCBiZQogICAgICogY2FsbGVkICJiYW5hbmFTcGxpdCIgaWYgaXQgaXMgbm90IGV4cGxpY2l0bHkgbmFtZWQgaW4gdGhlIHRlc3QuCiAgICAgKi8KICAgIHB1YmxpYyB2b2lkIHNldE5hbWluZ1NjaGVtZShNb2NrT2JqZWN0TmFtaW5nU2NoZW1lIG5hbWluZ1NjaGVtZSkgewogICAgICAgIHRoaXMubmFtaW5nU2NoZW1lID0gbmFtaW5nU2NoZW1lOwogICAgfQogICAgCiAgICAvKioKICAgICAqIENoYW5nZXMgdGhlIGV4cGVjdGF0aW9uIGVycm9yIHRyYW5zbGF0b3IgdXNlZCB0byB0cmFuc2xhdGUgZXhwZWN0YXRpb24KICAgICAqIGVycm9ycyBpbnRvIGVycm9ycyB0aGF0IHJlcG9ydCB0ZXN0IGZhaWx1cmVzLgogICAgICogCiAgICAgKiBCeSBkZWZhdWx0LCBleHBlY3RhdGlvbiBlcnJvcnMgYXJlIG5vdCB0cmFuc2xhdGVkIGFuZCBhcmUgdGhyb3duIGFzCiAgICAgKiBlcnJvcnMgb2YgdHlwZSB7QGxpbmsgRXhwZWN0YXRpb25FcnJvcn0uICBQbHVnIGluIGEgbmV3IGV4cGVjdGF0aW9uIGVycm9yCiAgICAgKiB0cmFuc2xhdG9yIGlmIHlvdSB3YW50IHlvdXIgZmF2b3VyaXRlIHRlc3QgZnJhbWV3b3JrIHRvIHJlcG9ydCBleHBlY3RhdGlvbiAKICAgICAqIGZhaWx1cmVzIHVzaW5nIGl0cyBvd24gZXJyb3IgdHlwZS4KICAgICAqLwogICAgcHVibGljIHZvaWQgc2V0RXhwZWN0YXRpb25FcnJvclRyYW5zbGF0b3IoRXhwZWN0YXRpb25FcnJvclRyYW5zbGF0b3IgZXhwZWN0YXRpb25FcnJvclRyYW5zbGF0b3IpIHsKICAgICAgICB0aGlzLmV4cGVjdGF0aW9uRXJyb3JUcmFuc2xhdG9yID0gZXhwZWN0YXRpb25FcnJvclRyYW5zbGF0b3I7CiAgICB9CiAgICAKICAgIC8qCiAgICAgKiBBUEkKICAgICAqLwogICAgCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBtb2NrIG9iamVjdCBvZiB0eXBlIDx2YXI+dHlwZVRvTW9jazwvdmFyPiBhbmQgZ2VuZXJhdGVzIGEgbmFtZSBmb3IgaXQuCiAgICAgKi8KICAgIHB1YmxpYyA8VD4gVCBtb2NrKENsYXNzPFQ+IHR5cGVUb01vY2spIHsKCQlyZXR1cm4gbW9jayh0eXBlVG9Nb2NrLCBuYW1pbmdTY2hlbWUuZGVmYXVsdE5hbWVGb3IodHlwZVRvTW9jaykpOwoJfQogICAgCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBtb2NrIG9iamVjdCBvZiB0eXBlIDx2YXI+dHlwZVRvTW9jazwvdmFyPiB3aXRoIHRoZSBnaXZlbiBuYW1lLgogICAgICovCiAgICBwdWJsaWMgPFQ+IFQgbW9jayhDbGFzczxUPiB0eXBlVG9Nb2NrLCBTdHJpbmcgbmFtZSkgewogICAgICAgIGlmIChtb2NrTmFtZXMuY29udGFpbnMobmFtZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiYSBtb2NrIHdpdGggbmFtZSAiICsgbmFtZSArICIgYWxyZWFkeSBleGlzdHMiKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgTW9ja09iamVjdCBtb2NrID0gbmV3IE1vY2tPYmplY3QodHlwZVRvTW9jaywgbmFtZSk7CiAgICAgICAgbW9ja05hbWVzLmFkZChuYW1lKTsKICAgICAgICAKICAgICAgICBQcm94aWVkT2JqZWN0SWRlbnRpdHkgaW52b2thYmxlID0gCiAgICAgICAgICAgIG5ldyBQcm94aWVkT2JqZWN0SWRlbnRpdHkoCiAgICAgICAgICAgICAgICBuZXcgSW52b2NhdGlvbkRpdmVydGVyPENhcHR1cmVDb250cm9sPigKICAgICAgICAgICAgICAgICAgICBDYXB0dXJlQ29udHJvbC5jbGFzcywgbW9jaywgbW9jaykpOwogICAgICAgIAogICAgICAgIHJldHVybiBpbXBvc3RlcmlzZXIuaW1wb3N0ZXJpc2UoaW52b2thYmxlLCB0eXBlVG9Nb2NrLCBDYXB0dXJlQ29udHJvbC5jbGFzcyk7CiAgICB9CiAgICAKICAgIC8qKiAKICAgICAqIFJldHVybnMgYSBuZXcgc2VxdWVuY2UgdGhhdCBpcyB1c2VkIHRvIGNvbnN0cmFpbiB0aGUgb3JkZXIgaW4gd2hpY2ggCiAgICAgKiBleHBlY3RhdGlvbnMgY2FuIG9jY3VyLgogICAgICogCiAgICAgKiBAcGFyYW0gbmFtZQogICAgICogICAgIFRoZSBuYW1lIG9mIHRoZSBzZXF1ZW5jZS4KICAgICAqIEByZXR1cm4KICAgICAqICAgICBBIG5ldyBzZXF1ZW5jZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgogICAgICovCiAgICBwdWJsaWMgU2VxdWVuY2Ugc2VxdWVuY2UoU3RyaW5nIG5hbWUpIHsKICAgICAgICByZXR1cm4gbmV3IE5hbWVkU2VxdWVuY2UobmFtZSk7CiAgICB9CiAgICAKICAgIC8qKiAKICAgICAqIFJldHVybnMgYSBuZXcgc3RhdGUgbWFjaGluZSB0aGF0IGlzIHVzZWQgdG8gY29uc3RyYWluIHRoZSBvcmRlciBpbiB3aGljaCAKICAgICAqIGV4cGVjdGF0aW9ucyBjYW4gb2NjdXIuCiAgICAgKiAKICAgICAqIEBwYXJhbSBuYW1lCiAgICAgKiAgICAgVGhlIG5hbWUgb2YgdGhlIHN0YXRlIG1hY2hpbmUuCiAgICAgKiBAcmV0dXJuCiAgICAgKiAgICAgQSBuZXcgc3RhdGUgbWFjaGluZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgogICAgICovCiAgICBwdWJsaWMgU3RhdGVzIHN0YXRlcyhTdHJpbmcgbmFtZSkgewogICAgICAgIHJldHVybiBkaXNwYXRjaGVyLm5ld1N0YXRlTWFjaGluZShuYW1lKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBTcGVjaWZpZXMgdGhlIGV4cGVjdGVkIGludm9jYXRpb25zIHRoYXQgdGhlIG9iamVjdCB1bmRlciB0ZXN0IHdpbGwgcGVyZm9ybSB1cG9uCiAgICAgKiBvYmplY3RzIGluIGl0cyBjb250ZXh0IGR1cmluZyB0aGUgdGVzdC4KICAgICAqIAogICAgICogVGhlIGJ1aWxkZXIgaXMgcmVzcG9uc2libGUgZm9yIGludGVycHJldGluZyBoaWdoLWxldmVsLCByZWFkYWJsZSBBUEkgY2FsbHMgdG8gCiAgICAgKiBjb25zdHJ1Y3QgYW4gZXhwZWN0YXRpb24uCiAgICAgKi8KCXB1YmxpYyB2b2lkIGNoZWNraW5nKEV4cGVjdGF0aW9uQnVpbGRlciBleHBlY3RhdGlvbnMpIHsKCSAgICBleHBlY3RhdGlvbnMuYnVpbGRFeHBlY3RhdGlvbnMoZGVmYXVsdEFjdGlvbiwgZGlzcGF0Y2hlcik7CiAgICB9CgkKICAgIC8qKgogICAgICogQWRkcyBhbiBleHBlY3RlZCBpbnZvY2F0aW9uIHRoYXQgdGhlIG9iamVjdCB1bmRlciB0ZXN0IHdpbGwgcGVyZm9ybSB1cG9uCiAgICAgKiBvYmplY3RzIGluIGl0cyBjb250ZXh0IGR1cmluZyB0aGUgdGVzdC4KICAgICAqIAogICAgICogVGhpcyBtZXRob2QgYWxsb3dzIGEgdGVzdCB0byBkZWZpbmUgYW4gZXhwZWN0YXRpb24gZXhwbGljaXRseSwgYnlwYXNzaW5nIHRoZQogICAgICogaGlnaC1sZXZlbCBBUEksIGlmIGRlc2lyZWQuCiAgICAgKi8KICAgIHB1YmxpYyB2b2lkIGFkZEV4cGVjdGF0aW9uKEV4cGVjdGF0aW9uIGV4cGVjdGF0aW9uKSB7CiAgICAgICAgZGlzcGF0Y2hlci5hZGQoZXhwZWN0YXRpb24pOwogICAgfQoJCiAgICAvKioKICAgICAqIEZhaWxzIHRoZSB0ZXN0IGlmIHRoZXJlIGFyZSBhbnkgZXhwZWN0YXRpb25zIHRoYXQgaGF2ZSBub3QgYmVlbiBtZXQuCiAgICAgKi8KCXB1YmxpYyB2b2lkIGFzc2VydElzU2F0aXNmaWVkKCkgewogICAgICAgIGZpcnN0RXJyb3IgPSBudWxsOwogICAgICAgIGlmICghZGlzcGF0Y2hlci5pc1NhdGlzZmllZCgpKSB7CiAgICAgICAgICAgIHRocm93IGV4cGVjdGF0aW9uRXJyb3JUcmFuc2xhdG9yLnRyYW5zbGF0ZShuZXcgRXhwZWN0YXRpb25FcnJvcigibm90IGFsbCBleHBlY3RhdGlvbnMgd2VyZSBzYXRpc2ZpZWQiLCBkaXNwYXRjaGVyKSk7CiAgICAgICAgfQoJfQogICAgCiAgICBwdWJsaWMgdm9pZCBkZXNjcmliZVRvKERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7CiAgICAgICAgZGVzY3JpcHRpb24uYXBwZW5kRGVzY3JpcHRpb25PZihkaXNwYXRjaGVyKQogICAgICAgICAgICAgICAgICAgLmFwcGVuZFRleHQoIlxud2hhdCBoYXBwZW5lZCBiZWZvcmUgdGhpczoiKTsKICAgICAgICAKICAgICAgICBpZiAoYWN0dWFsSW52b2NhdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFRleHQoIiBub3RoaW5nISIpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24uYXBwZW5kTGlzdCgiXG4gICIsICJcbiAgIiwgIlxuIiwgYWN0dWFsSW52b2NhdGlvbnMpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcHJpdmF0ZSBPYmplY3QgZGlzcGF0Y2goSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB0aHJvd3MgVGhyb3dhYmxlIHsKICAgICAgICBpZiAoZmlyc3RFcnJvciAhPSBudWxsKSB7CiAgICAgICAgICAgIHRocm93IGZpcnN0RXJyb3I7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRyeSB7CiAgICAgICAgICAgIE9iamVjdCByZXN1bHQgPSBkaXNwYXRjaGVyLmRpc3BhdGNoKGludm9jYXRpb24pOwogICAgICAgICAgICBhY3R1YWxJbnZvY2F0aW9ucy5hZGQoaW52b2NhdGlvbik7CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChFeHBlY3RhdGlvbkVycm9yIGUpIHsKICAgICAgICAgICAgZmlyc3RFcnJvciA9IGV4cGVjdGF0aW9uRXJyb3JUcmFuc2xhdG9yLnRyYW5zbGF0ZShmaWxsSW5EZXRhaWxzKGUpKTsKICAgICAgICAgICAgZmlyc3RFcnJvci5zZXRTdGFja1RyYWNlKGUuZ2V0U3RhY2tUcmFjZSgpKTsKICAgICAgICAgICAgdGhyb3cgZmlyc3RFcnJvcjsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KSB7CiAgICAgICAgICAgIGFjdHVhbEludm9jYXRpb25zLmFkZChpbnZvY2F0aW9uKTsKICAgICAgICAgICAgdGhyb3cgdDsKICAgICAgICB9CiAgICB9CiAgICAKICAgIC8vIFRoZSBFeHBlY3RhdGlvbkVycm9yIG1pZ2h0IG5vdCBoYXZlIHRoZSBleHBlY3RhdGlvbnMgZmllbGQgc2V0IChiZWNhdXNlIG9mIGEgZGVzaWduCiAgICAvLyBmbGF3IHRoYXQgY2Fubm90IGJlIGZpeGVkIHdpdGhvdXQgYnJlYWtpbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvZiBjbGllbnQgY29kZSkuCiAgICAvLyBTbyBpZiBpdCBpcyBudWxsIHdlIGNyZWF0ZSBhIG5ldyBFeHBlY3RhdGlvbkVycm9yIHdpdGggdGhlIGZpZWxkIHNldCB0byB0aGUgbW9ja2VyeSdzCiAgICAvLyBleHBlY3RhdGlvbnMuCiAgICBwcml2YXRlIEV4cGVjdGF0aW9uRXJyb3IgZmlsbEluRGV0YWlscyhFeHBlY3RhdGlvbkVycm9yIGUpIHsKICAgICAgICBFeHBlY3RhdGlvbkVycm9yIGZpbGxlZEluID0gbmV3IEV4cGVjdGF0aW9uRXJyb3IoZS5nZXRNZXNzYWdlKCksIHRoaXMsIGUuaW52b2NhdGlvbik7CiAgICAgICAgZmlsbGVkSW4uc2V0U3RhY2tUcmFjZShlLmdldFN0YWNrVHJhY2UoKSk7CiAgICAgICAgcmV0dXJuIGZpbGxlZEluOwogICAgfQoKICAgIHByaXZhdGUgY2xhc3MgTW9ja09iamVjdCBpbXBsZW1lbnRzIEludm9rYWJsZSwgQ2FwdHVyZUNvbnRyb2wgewogICAgICAgIHByaXZhdGUgQ2xhc3M8Pz4gbW9ja2VkVHlwZTsKICAgICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwogICAgICAgIAogICAgICAgIHB1YmxpYyBNb2NrT2JqZWN0KENsYXNzPD8+IG1vY2tlZFR5cGUsIFN0cmluZyBuYW1lKSB7CiAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgICAgICAgIHRoaXMubW9ja2VkVHlwZSA9IG1vY2tlZFR5cGU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBPdmVycmlkZQogICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgICAgIHJldHVybiBuYW1lOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBwdWJsaWMgT2JqZWN0IGludm9rZShJbnZvY2F0aW9uIGludm9jYXRpb24pIHRocm93cyBUaHJvd2FibGUgewogICAgICAgICAgICByZXR1cm4gZGlzcGF0Y2goaW52b2NhdGlvbik7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgT2JqZWN0IGNhcHR1cmVFeHBlY3RhdGlvblRvKEV4cGVjdGF0aW9uQ2FwdHVyZSBjYXB0dXJlKSB7CiAgICAgICAgICAgIHJldHVybiBpbXBvc3RlcmlzZXIuaW1wb3N0ZXJpc2UoCiAgICAgICAgICAgICAgICBuZXcgT2JqZWN0TWV0aG9kRXhwZWN0YXRpb25Cb3VuY2VyKG5ldyBJbnZvY2F0aW9uVG9FeHBlY3RhdGlvblRyYW5zbGF0b3IoY2FwdHVyZSwgZGVmYXVsdEFjdGlvbikpLCAKICAgICAgICAgICAgICAgIG1vY2tlZFR5cGUpOwogICAgICAgIH0KICAgIH0KfQpQSwMECgAAAAAASlV6Nvm+i7A6AQAAOgEAABcAAABvcmcvam1vY2svU2VxdWVuY2UuamF2YXBhY2thZ2Ugb3JnLmptb2NrOwoKaW1wb3J0IG9yZy5qbW9jay5pbnRlcm5hbC5JbnZvY2F0aW9uRXhwZWN0YXRpb247CgovKioKICogQSBzZXF1ZW5jZSBvZiBleHBlY3RhdGlvbnM7IGludm9jYXRpb25zIGNhbiBiZSBjb25zdHJhaW5lZCB0byBvY2N1ciBpbiBhIHN0cmljdCAKICogb3JkZXIgZGVmaW5lZCBieSBhIHNlcXVlbmNlLgogKiAKICogQGF1dGhvciBuYXQKICovCnB1YmxpYyBpbnRlcmZhY2UgU2VxdWVuY2UgewogICAgdm9pZCBjb25zdHJhaW5Bc05leHRJblNlcXVlbmNlKEludm9jYXRpb25FeHBlY3RhdGlvbiBleHBlY3RhdGlvbik7Cn0KUEsDBAoAAAAAALFkLzj4XomXFQMAABUDAAAVAAAAb3JnL2ptb2NrL1N0YXRlcy5qYXZhcGFja2FnZSBvcmcuam1vY2s7CgppbXBvcnQgb3JnLmhhbWNyZXN0LlNlbGZEZXNjcmliaW5nOwppbXBvcnQgb3JnLmptb2NrLnN5bnRheC5TdGF0ZXNDbGF1c2U7CgovKioKICogQSBzdGF0ZSBtYWNoaW5lIHRoYXQgaXMgdXNlZCB0byBjb25zdHJhaW4gdGhlIG9yZGVyIG9mIGludm9jYXRpb25zLiAgCiAqIAogKiBBbiBpbnZvY2F0aW9uIGNhbiBiZSBjb25zdHJhaW5lZCB0byBvY2N1ciB3aGVuIGEgc3RhdGUgaXMsIG9yIGlzIG5vdCwgYWN0aXZlLiAKICogCiAqIEBhdXRob3IgbmF0CiAqLwpwdWJsaWMgaW50ZXJmYWNlIFN0YXRlcyBleHRlbmRzIFNlbGZEZXNjcmliaW5nLCBTdGF0ZXNDbGF1c2UgewogICAgLyoqCiAgICAgKiBQdXQgdGhlIHN0YXRlIG1hY2hpbmUgaW50byBzdGF0ZSA8dmFyPmluaXRpYWxTdGF0ZTwvdmFyPi4KICAgICAqICAKICAgICAqIEBwYXJhbSBpbml0aWFsU3RhdGUKICAgICAqICAgICBUaGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgc3RhdGUgbWFjaGluZS4KICAgICAqIEByZXR1cm4KICAgICAqICAgICBJdHNlbGYuCiAgICAgKi8KICAgIFN0YXRlcyBzdGFydHNBcyhTdHJpbmcgaW5pdGlhbFN0YXRlKTsKICAgIAogICAgLyoqCiAgICAgKiBQdXQgdGhlIHN0YXRlIG1hY2hpbmUgaW50byBzdGF0ZSA8dmFyPm5leHRTdGF0ZTwvdmFyPi4KICAgICAqICAKICAgICAqIEBwYXJhbSBuZXh0U3RhdGUKICAgICAqICAgICBUaGUgbmV4dCBzdGF0ZSBvZiB0aGUgc3RhdGUgbWFjaGluZS4KICAgICAqLwogICAgdm9pZCBiZWNvbWUoU3RyaW5nIG5leHRTdGF0ZSk7Cn0KUEsDBAoAAAAAAPZhPTZVN+f3DQEAAA0BAAAZAAAAb3JnL2ptb2NrL2FwaS9BY3Rpb24uamF2YS8qICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCBqTW9jay5vcmcKICovCnBhY2thZ2Ugb3JnLmptb2NrLmFwaTsKCmltcG9ydCBvcmcuaGFtY3Jlc3QuU2VsZkRlc2NyaWJpbmc7CgoKCi8qKgogKiBBbiBvYmplY3QgdGhhdCBmYWtlcyB0aGUgYmVoYXZpb3VyIG9mIGFuIHtAbGluayBvcmcuam1vY2suaW50ZXJuYWwuSW52b2NhdGlvbkV4cGVjdGF0aW9ufS4KICovCnB1YmxpYyBpbnRlcmZhY2UgQWN0aW9uIGV4dGVuZHMgU2VsZkRlc2NyaWJpbmcsIEludm9rYWJsZSB7Cn0KUEsDBAoAAAAAAEpVejYgD6sw/AcAAPwHAAAeAAAAb3JnL2ptb2NrL2FwaS9FeHBlY3RhdGlvbi5qYXZhcGFja2FnZSBvcmcuam1vY2suYXBpOwoKaW1wb3J0IG9yZy5oYW1jcmVzdC5TZWxmRGVzY3JpYmluZzsKCi8qKgogKiBBbiBvYmplY3QgdGhhdCBtYXRjaGVzLCBjaGVja3MgYW5kIGZha2VzIGFuIHtAbGluayBvcmcuam1vY2suYXBpLkludm9jYXRpb259CiAqIAogKiBAYXV0aG9yIG5wcnljZQogKiBAYXV0aG9yIHNtZ2YKICovCnB1YmxpYyBpbnRlcmZhY2UgRXhwZWN0YXRpb24gZXh0ZW5kcyBTZWxmRGVzY3JpYmluZyB7CiAgICAvKioKICAgICAqIEhhdmUgZW5vdWdoIHtAbGluayBJbnZvY2F0aW9ufXMgZXhwZWN0ZWQgYnkgdGhpcyBFeHBlY3RhdGlvbiBvY2N1cnJlZD8KICAgICAqIAogICAgICogQHJldHVybgogICAgICogICA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgZXhwZWN0YXRpb24gaGFzIHJlY2VpdmVkIGVub3VnaAogICAgICogICBvZiBpdHMgZXhwZWN0ZWQgaW52b2NhdGlvbnMsIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCiAgICAgKi8KICAgIGJvb2xlYW4gaXNTYXRpc2ZpZWQoKTsKCiAgICAvKioKICAgICAqIENhbiBtb3JlIHtAbGluayBJbnZvY2F0aW9ufXMgZXhwZWN0ZWQgYnkgdGhpcyBFeHBlY3RhdGlvbiBzdGlsbCBvY2N1cj8KICAgICAqIAogICAgICogQHJldHVybgogICAgICogICA8Y29kZT50cnVlPC9jb2RlPiBpZiBpbnZvY2F0aW9ucyBleHBlY3RlZCBieSB0aGlzIGV4cGVjdGF0aW9uIGNhbiBzdGlsbAogICAgICogICBvY2N1ciwgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KICAgICAqLwogICAgYm9vbGVhbiBhbGxvd3NNb3JlSW52b2NhdGlvbnMoKTsKICAgIAoJLyoqCiAgICAgKiBDYW4gdGhlIEV4cGVjdGF0aW9uIGJlIGludm9rZWQgd2l0aCA8dmFyPmludm9jYXRpb248L3Zhcj4/CiAgICAgKiAKICAgICAqIEBwYXJhbSBpbnZvY2F0aW9uCiAgICAgKiAKICAgICAqIEByZXR1cm4KICAgICAqICAgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGV4cGVjdGF0aW9uIGNhbiBiZSBpbnZva2VkIHdpdGgKICAgICAqICAgPHZhcj5pbnZvY2F0aW9uPC92YXI+LCA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgoJICovCiAgICBib29sZWFuIG1hdGNoZXMoSW52b2NhdGlvbiBpbnZvY2F0aW9uKTsKICAgIAogICAgLyoqCiAgICAgKiBJbnZva2VzIHRoZSBleHBlY3RhdGlvbjogcmVjb3JkcyB0aGF0IHRoZSBpbnZvY2F0aW9uIGhhcwogICAgICogb2NjdXJyZWQgYW5kIGZha2VzIHNvbWUgYmVoYXZpb3VyIGluIHJlc3BvbnNlLgogICAgICogCiAgICAgKiBAcGFyYW0gaW52b2NhdGlvbgogICAgICogICAgIFRoZSBpbnZvY2F0aW9uIHRvIHJlY29yZCBhbmQgZmFrZS4KICAgICAqIEByZXR1cm4KICAgICAqICAgICBBIHJlc3VsdCB0aGF0IGlzIGV2ZW50dWFsbHkgcmV0dXJuZWQgZnJvbSB0aGUgbWV0aG9kIGNhbGwKICAgICAqICAgICB0aGF0IGNhdXNlZCB0aGUgaW52b2NhdGlvbi4KICAgICAqICAgICAKICAgICAqIEB0aHJvd3MgVGhyb3dhYmxlCiAgICAgKiAgICAgQW4gZXhjZXB0aW9uIHRoYXQgaXMgZXZlbnR1YWxseSB0aHJvd24gZnJvbSB0aGUgbWV0aG9kIGNhbGwKICAgICAqICAgICB0aGF0IGNhdXNlZCB0aGUgaW52b2NhdGlvbi4KICAgICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uCiAgICAgKiAgICAgVGhlIGV4cGVjdGF0aW9uIGhhcyBiZWVuIGludm9rZWQgd2l0aCBhIG1ldGhvZCB0aGF0IGl0IGRvZXNuJ3QKICAgICAqICAgICBtYXRjaCBvciB0aGUgZmFrZWQgYmVoYXZpb3VyIGhhcyBiZWVuIHNldCB1cCBpbmNvcnJlY3RseS4gIAogICAgICogICAgIEZvciBleGFtcGxlLCBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaXMgdGhyb3duIHdoZW4gdHJ5aW5nIHRvIHJldHVybgogICAgICogICAgIGEgdmFsdWUgb3IgdGhyb3cgYSBjaGVja2VkIGV4Y2VwdGlvbiB0aGF0IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZQogICAgICogICAgIHJldHVybiB0eXBlIG9mIHRoZSBtZXRob2QgYmVpbmcgbW9ja2VkCiAgICAgKi8KCU9iamVjdCBpbnZva2UoSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB0aHJvd3MgVGhyb3dhYmxlOwp9ClBLAwQKAAAAAAC5Q6M2H3Zf2C4FAAAuBQAAIwAAAG9yZy9qbW9jay9hcGkvRXhwZWN0YXRpb25FcnJvci5qYXZhcGFja2FnZSBvcmcuam1vY2suYXBpOwoKaW1wb3J0IG9yZy5oYW1jcmVzdC5EZXNjcmlwdGlvbjsKaW1wb3J0IG9yZy5oYW1jcmVzdC5TZWxmRGVzY3JpYmluZzsKaW1wb3J0IG9yZy5oYW1jcmVzdC5TdHJpbmdEZXNjcmlwdGlvbjsKCi8qKgogKiBBbiBlcnJvciB0aHJvd24gd2hlbiBhbiBleHBlY3RhdGlvbiBpcyB2aW9sYXRlZCBkdXJpbmcgYSB0ZXN0LgogKiAKICogQGF1dGhvciBucHJ5Y2UKICovCnB1YmxpYyBjbGFzcyBFeHBlY3RhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3IgaW1wbGVtZW50cyBTZWxmRGVzY3JpYmluZyB7CiAgICBwdWJsaWMgZmluYWwgU2VsZkRlc2NyaWJpbmcgZXhwZWN0YXRpb25zOwogICAgcHVibGljIGZpbmFsIEludm9jYXRpb24gaW52b2NhdGlvbjsKCQogICAgcHVibGljIEV4cGVjdGF0aW9uRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIFNlbGZEZXNjcmliaW5nIGV4cGVjdGF0aW9ucywgSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB7CiAgICAgICAgc3VwZXIobWVzc2FnZSk7CiAgICAgICAgdGhpcy5pbnZvY2F0aW9uID0gaW52b2NhdGlvbjsKICAgICAgICB0aGlzLmV4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9uczsKICAgIH0KICAgIAogICAgcHVibGljIEV4cGVjdGF0aW9uRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIEludm9jYXRpb24gaW52b2NhdGlvbikgewogICAgICAgIHRoaXMobWVzc2FnZSwgbnVsbCwgaW52b2NhdGlvbik7CiAgICB9CiAgICAKICAgIHB1YmxpYyBFeHBlY3RhdGlvbkVycm9yKFN0cmluZyBtZXNzYWdlLCBTZWxmRGVzY3JpYmluZyBleHBlY3RhdGlvbnMpIHsKICAgICAgICB0aGlzKG1lc3NhZ2UsIGV4cGVjdGF0aW9ucywgbnVsbCk7CiAgICB9CiAgICAKICAgIEBPdmVycmlkZSAKICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgcmV0dXJuIFN0cmluZ0Rlc2NyaXB0aW9uLnRvU3RyaW5nKHRoaXMpOwogICAgfQogICAgCglwdWJsaWMgdm9pZCBkZXNjcmliZVRvKERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7CgkJZGVzY3JpcHRpb24uYXBwZW5kVGV4dChnZXRNZXNzYWdlKCkpOwogICAgICAgIGlmIChpbnZvY2F0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24uYXBwZW5kVGV4dCgiOiAiKTsKICAgICAgICAgICAgaW52b2NhdGlvbi5kZXNjcmliZVRvKGRlc2NyaXB0aW9uKTsKICAgICAgICB9CiAgICAgICAgaWYgKGV4cGVjdGF0aW9ucyAhPSBudWxsKSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFRleHQoIlxuIik7CiAgICAgICAgICAgIGV4cGVjdGF0aW9ucy5kZXNjcmliZVRvKGRlc2NyaXB0aW9uKTsKICAgICAgICB9Cgl9Cn0KUEsDBAoAAAAAAPuyeDU/uw9jZQIAAGUCAAAtAAAAb3JnL2ptb2NrL2FwaS9FeHBlY3RhdGlvbkVycm9yVHJhbnNsYXRvci5qYXZhcGFja2FnZSBvcmcuam1vY2suYXBpOwoKLyoqCiAqIFRyYW5zbGF0ZXMgZXhwZWN0YXRpb24gZXJyb3JzIGludG8gZXJyb3IgdHlwZSB1c2VkIGJ5IGEgc3BlY2lmaWMgCiAqIHRlc3RpbmcgZnJhbWV3b3JrLgogKiAKICogQGF1dGhvciBucHJ5Y2UKICovCnB1YmxpYyBpbnRlcmZhY2UgRXhwZWN0YXRpb25FcnJvclRyYW5zbGF0b3IgewogICAgLyoqCiAgICAgKiBUcmFuc2xhdGVzIHRoZSBnaXZlbiB7QGxpbmsgRXhwZWN0YXRpb25FcnJvcn0gaW50byBhbiBlcnJvcgogICAgICogdHlwZSBjb21wYXRpYmxlIHdpdGggYW5vdGhlciB0ZXN0aW5nIGZyYW1ld29yay4KICAgICAqIAogICAgICogQHBhcmFtIGUKICAgICAqICAgVGhlIHtAbGluayBFeHBlY3RhdGlvbkVycm9yfSB0byB0cmFuc2xhdGUuCiAgICAgKiAgIAogICAgICogQHJldHVybgogICAgICogICBBbiBlcnJvciB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBhbm90aGVyIHRlc3RpbmcgZnJhbWV3b3JrCiAgICAgKiAgIGFuZCBjb250YWlucyB0aGUgc2FtZSBtZXNzYWdlIGFuZCBzdGFjayB0cmFjZSBhcyA8dmFyPmU8L3Zhcj4uCiAgICAgKi8KICAgIEVycm9yIHRyYW5zbGF0ZShFeHBlY3RhdGlvbkVycm9yIGUpOwp9ClBLAwQKAAAAAADusTk2BgDfs6QFAACkBQAAHwAAAG9yZy9qbW9jay9hcGkvSW1wb3N0ZXJpc2VyLmphdmFwYWNrYWdlIG9yZy5qbW9jay5hcGk7CgovKioKICogQW4gb2JqZWN0IHRoYXQgY2FuIGNyZWF0ZXMgYSBwcm94eSBvZiB0aGUgZ2l2ZW4gdHlwZSB0byBjYXB0dXJlCiAqIHtAbGluayBvcmcuam1vY2suYXBpLkludm9jYXRpb259cyBhbmQgcGFzcyB0aGVtIHRvIGFuIAogKiB7QGxpbmsgb3JnLmptb2NrLmFwaS5JbnZva2FibGV9IG9iamVjdCBmb3IgbW9ja2luZyBvciBzdHViYmluZy4KICogCiAqIEBhdXRob3IgbnByeWNlCiAqLwpwdWJsaWMgaW50ZXJmYWNlIEltcG9zdGVyaXNlciB7CiAgICAvKioKICAgICAqIFJlcG9ydHMgaWYgdGhlIEltcG9zdGVyaXNlciBpcyBhYmxlIHRvIGltcG9zdGVyaXNlIGEgZ2l2ZW4gdHlwZS4KICAgICAqIAogICAgICogQHBhcmFtIHR5cGUKICAgICAqICAgICBUaGUgdHlwZSBpbiBxdWVzdGlvbi4KICAgICAqIEByZXR1cm4KICAgICAqICAgICBUcnVlIGlmIHRoaXMgaW1wb3N0ZXJpc2VyIGNhbiBpbXBvc3RlcmlzZSA8dmFyPnR5cGU8L3Zhcj4sIGZhbHNlIG90aGVyd2lzZS4KICAgICAqLwogICAgYm9vbGVhbiBjYW5JbXBvc3RlcmlzZShDbGFzczw/PiB0eXBlKTsKICAgIAogICAgLyoqCiAgICAgKiBDcmVhdGVzIGFuIGltcG9zdGVyIGZvciBhIGdpdmVuIHR5cGUgdGhhdCBmb3J3YXJkcyB7QGxpbmsgSW52b2NhdGlvbn1zIHRvIGFuIAogICAgICoge0BsaW5rIEludm9rYWJsZX0gb2JqZWN0LgogICAgICogCiAgICAgKiBAcGFyYW0gPFQ+CiAgICAgKiAgICBUaGUgc3RhdGljIHR5cGUgb2YgdGhlIGltcG9zdGVyIHRoYXQgaXMgY3JlYXRlZC4KICAgICAqIEBwYXJhbSBtb2NrT2JqZWN0CiAgICAgKiAgICBUaGUgb2JqZWN0IHRoYXQgaXMgdG8gcmVjZWl2ZSBpbnZvY2F0aW9ucyBmb3J3YXJkZWQgZnJvbSB0aGUgaW1wb3N0ZXIuCiAgICAgKiBAcGFyYW0gbW9ja2VkVHlwZQogICAgICogICAgVGhlIGNsYXNzIHJlcHJlc2VudGluZyB0aGUgc3RhdGljIHR5cGUgb2YgdGhlIGltcG9zdGVyLgogICAgICogQHBhcmFtIGFuY2lsbGlhcnlUeXBlcwogICAgICogICAgT3RoZXIgdHlwZXMgZm9yIHRoZSBpbXBvc3Rlci4gSXQgbXVzdCBiZSBwb3NzaWJsZSB0byBkeW5hbWljYWxseSBjYXN0IHRoZSBpbXBvc3RlciB0byB0aGVzZSB0eXBlcy4KICAgICAqICAgIFRoZXNlIHR5cGVzIG11c3QgYWxsIGJlIGludGVyZmFjZXMgYmVjYXVzZSBKYXZhIG9ubHkgYWxsb3dzIHNpbmdsZSBpbmhlcml0YW5jZSBvZiBjbGFzc2VzLgogICAgICogQHJldHVybgogICAgICogICAgQSBuZXcgaW1wb3N0ZXIuICBUaGUgaW1wb3N0ZXIgbXVzdCBpbXBsZW1lbnQgdGhlIG1vY2tlZFR5cGUgYW5kIGFsbCB0aGUgYW5jaWFsbGlhcnlUeXBlcy4KICAgICAqLwogICAgPFQ+IFQgaW1wb3N0ZXJpc2UoSW52b2thYmxlIG1vY2tPYmplY3QsIENsYXNzPFQ+IG1vY2tlZFR5cGUsIENsYXNzPD8+Li4uIGFuY2lsbGlhcnlUeXBlcyk7Cn0KUEsDBAoAAAAAAFNBaDe5q7vwRRMAAEUTAAAdAAAAb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uLmphdmEvKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQgak1vY2sub3JnCiAqLwpwYWNrYWdlIG9yZy5qbW9jay5hcGk7CgppbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CmltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKaW1wb3J0IGphdmEudXRpbC5NYXA7CgppbXBvcnQgb3JnLmhhbWNyZXN0LkRlc2NyaXB0aW9uOwppbXBvcnQgb3JnLmhhbWNyZXN0LlNlbGZEZXNjcmliaW5nOwppbXBvcnQgb3JnLmhhbWNyZXN0LlN0cmluZ0Rlc2NyaXB0aW9uOwoKCi8qKgogKiBUaGUgc3RhdGljIGRldGFpbHMgYWJvdXQgYSBtZXRob2QgYW5kIHRoZSBydW4tdGltZSBkZXRhaWxzIG9mIGl0cyBpbnZvY2F0aW9uLgogKiAKICogQHNpbmNlIDEuMAogKi8KcHVibGljIGNsYXNzIEludm9jYXRpb24gaW1wbGVtZW50cyBTZWxmRGVzY3JpYmluZyB7CiAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE9iamVjdFtdIE5PX1BBUkFNRVRFUlMgPSBudWxsOwoKICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IGludm9rZWRPYmplY3Q7CiAgICBwcml2YXRlIGZpbmFsIE1ldGhvZCBpbnZva2VkTWV0aG9kOwogICAgcHJpdmF0ZSBmaW5hbCBPYmplY3RbXSBwYXJhbWV0ZXJWYWx1ZXM7CgogICAgLy8gQSBrbHVkZ2UgYnV0IHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHdheSB0byBmaW5kIHRoaXMgb3V0IHRocm91Z2ggdGhlIHJlZmxlY3Rpb24gQVBJLgogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwPENsYXNzPD8+LCBDbGFzczw/Pj4gQk9YX1RZUEVTID0gbmV3IEhhc2hNYXA8Q2xhc3M8Pz4sIENsYXNzPD8+PigpIHt7CiAgICAgICAgcHV0KGJvb2xlYW4uY2xhc3MsIEJvb2xlYW4uY2xhc3MpOwogICAgICAgIHB1dChieXRlLmNsYXNzLCBCeXRlLmNsYXNzKTsKICAgICAgICBwdXQoY2hhci5jbGFzcywgQ2hhcmFjdGVyLmNsYXNzKTsKICAgICAgICBwdXQoc2hvcnQuY2xhc3MsIFNob3J0LmNsYXNzKTsKICAgICAgICBwdXQoaW50LmNsYXNzLCBJbnRlZ2VyLmNsYXNzKTsKICAgICAgICBwdXQobG9uZy5jbGFzcywgTG9uZy5jbGFzcyk7CiAgICAgICAgcHV0KGZsb2F0LmNsYXNzLCBGbG9hdC5jbGFzcyk7CiAgICAgICAgcHV0KGRvdWJsZS5jbGFzcywgRG91YmxlLmNsYXNzKTsKICAgIH19OwoKICAgIAogICAgcHVibGljIEludm9jYXRpb24oT2JqZWN0IGludm9rZWQsIE1ldGhvZCBtZXRob2QsIE9iamVjdC4uLiBwYXJhbWV0ZXJWYWx1ZXMpIHsKICAgICAgICB0aGlzLmludm9rZWRPYmplY3QgPSBpbnZva2VkOwogICAgICAgIHRoaXMuaW52b2tlZE1ldGhvZCA9IG1ldGhvZDsKICAgICAgICB0aGlzLnBhcmFtZXRlclZhbHVlcyA9IChwYXJhbWV0ZXJWYWx1ZXMgPT0gTk9fUEFSQU1FVEVSUykgCiAgICAgICAgICAgID8gbmV3IE9iamVjdFswXQogICAgICAgICAgICA6IHBhcmFtZXRlclZhbHVlcy5jbG9uZSgpOwogICAgfQogICAgCiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgcmV0dXJuIHN1cGVyLnRvU3RyaW5nKCkgKyAiWyIgKyBTdHJpbmdEZXNjcmlwdGlvbi50b1N0cmluZyh0aGlzKSArICJdIjsKICAgIH0KICAgIAogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKSB7CiAgICAgICAgcmV0dXJuIChvdGhlciBpbnN0YW5jZW9mIEludm9jYXRpb24pICYmIHRoaXMuZXF1YWxzKChJbnZvY2F0aW9uKW90aGVyKTsKICAgIH0KCiAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoSW52b2NhdGlvbiBvdGhlcikgewogICAgICAgIHJldHVybiBvdGhlciAhPSBudWxsICYmIGludm9rZWRPYmplY3QgPT0gb3RoZXIuaW52b2tlZE9iamVjdAogICAgICAgICAgICAmJiBpbnZva2VkTWV0aG9kLmVxdWFscyhvdGhlci5pbnZva2VkTWV0aG9kKQogICAgICAgICAgICAmJiBBcnJheXMuZXF1YWxzKHBhcmFtZXRlclZhbHVlcywgb3RoZXIucGFyYW1ldGVyVmFsdWVzKTsKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CiAgICAgICAgcmV0dXJuIGludm9rZWRPYmplY3QuaGFzaENvZGUoKSAKICAgICAgICAgICAgIF4gaW52b2tlZE1ldGhvZC5oYXNoQ29kZSgpCiAgICAgICAgICAgICBeIEFycmF5cy5oYXNoQ29kZShwYXJhbWV0ZXJWYWx1ZXMpOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIGRlc2NyaWJlVG8oRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRUZXh0KGludm9rZWRPYmplY3QudG9TdHJpbmcoKSk7CiAgICAgICAgZGVzY3JpcHRpb24uYXBwZW5kVGV4dCgiLiIpOwogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFRleHQoaW52b2tlZE1ldGhvZC5nZXROYW1lKCkpOwogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFZhbHVlTGlzdCgiKCIsICIsICIsICIpIiwgcGFyYW1ldGVyVmFsdWVzKTsKICAgIH0KCiAgICBwdWJsaWMgT2JqZWN0IGdldEludm9rZWRPYmplY3QoKSB7CiAgICAgICAgcmV0dXJuIGludm9rZWRPYmplY3Q7CiAgICB9CgogICAgcHVibGljIE1ldGhvZCBnZXRJbnZva2VkTWV0aG9kKCkgewogICAgICAgIHJldHVybiBpbnZva2VkTWV0aG9kOwogICAgfQoKICAgIHB1YmxpYyBpbnQgZ2V0UGFyYW1ldGVyQ291bnQoKSB7CiAgICAgICAgcmV0dXJuIHBhcmFtZXRlclZhbHVlcy5sZW5ndGg7CiAgICB9CgogICAgcHVibGljIE9iamVjdCBnZXRQYXJhbWV0ZXIoaW50IGkpIHsKICAgICAgICByZXR1cm4gcGFyYW1ldGVyVmFsdWVzW2ldOwogICAgfQoKICAgIHB1YmxpYyBPYmplY3RbXSBnZXRQYXJhbWV0ZXJzQXNBcnJheSgpIHsKICAgICAgICByZXR1cm4gcGFyYW1ldGVyVmFsdWVzLmNsb25lKCk7CiAgICB9CgogICAgcHVibGljIE9iamVjdCBhcHBseVRvKE9iamVjdCB0YXJnZXQpIHRocm93cyBUaHJvd2FibGUgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBpbnZva2VkTWV0aG9kLmludm9rZSh0YXJnZXQsIGdldFBhcmFtZXRlcnNBc0FycmF5KCkpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICB0aHJvdyBleC5nZXRUYXJnZXRFeGNlcHRpb24oKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHZvaWQgY2hlY2tSZXR1cm5UeXBlQ29tcGF0aWJpbGl0eShmaW5hbCBPYmplY3QgdmFsdWUpIHsKICAgICAgICBDbGFzczw/PiByZXR1cm5UeXBlID0gaW52b2tlZE1ldGhvZC5nZXRSZXR1cm5UeXBlKCk7CiAgICAgICAgaWYgKHJldHVyblR5cGUgPT0gdm9pZC5jbGFzcykgewogICAgICAgICAgICBmYWlsSWZSZXR1cm5UeXBlSXNOb3ROdWxsKHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICAgICAgICBmYWlsSWZSZXR1cm5UeXBlSXNQcmltaXRpdmUoKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIENsYXNzPD8+IHZhbHVlVHlwZSA9IHZhbHVlLmdldENsYXNzKCk7CiAgICAgICAgICAgIGlmICghaXNDb21wYXRpYmxlKHJldHVyblR5cGUsIHZhbHVlVHlwZSkpIHsKICAgICAgICAgICAgICAgIHJlcG9ydFR5cGVFcnJvcihyZXR1cm5UeXBlLCB2YWx1ZVR5cGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgYm9vbGVhbiBpc0NvbXBhdGlibGUoQ2xhc3M8Pz4gcmV0dXJuVHlwZSwgQ2xhc3M8Pz4gdmFsdWVUeXBlKSB7CiAgICAgICAgaWYgKHJldHVyblR5cGUuaXNQcmltaXRpdmUoKSkgewogICAgICAgICAgICAvLyBUaGUgcmVmbGVjdGlvbiBBUEkgZG9lc24ndCByZWZsZWN0IEphdmEncyBhdXRvLWJveGluZy4KICAgICAgICAgICAgcmV0dXJuIGlzQm94ZWRUeXBlKHJldHVyblR5cGUsIHZhbHVlVHlwZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXR1cm5UeXBlLmlzQXNzaWduYWJsZUZyb20odmFsdWVUeXBlKTsKICAgIH0KCiAgICBwcml2YXRlIGJvb2xlYW4gaXNCb3hlZFR5cGUoQ2xhc3M8Pz4gcHJpbWl0aXZlVHlwZSwgQ2xhc3M8Pz4gcmVmZXJlbmNlVHlwZSkgewogICAgICAgIHJldHVybiBCT1hfVFlQRVMuZ2V0KHByaW1pdGl2ZVR5cGUpID09IHJlZmVyZW5jZVR5cGU7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIGZhaWxJZlJldHVyblR5cGVJc05vdE51bGwoZmluYWwgT2JqZWN0IHJlc3VsdCkgewogICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewogICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJ0cmllZCB0byByZXR1cm4gYSB2YWx1ZSBmcm9tIGEgdm9pZCBtZXRob2Q6ICIgKyByZXN1bHQpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHZvaWQgZmFpbElmUmV0dXJuVHlwZUlzUHJpbWl0aXZlKCkgewogICAgICAgIENsYXNzPD8+IHJldHVyblR5cGUgPSBpbnZva2VkTWV0aG9kLmdldFJldHVyblR5cGUoKTsKICAgICAgICBpZiAocmV0dXJuVHlwZS5pc1ByaW1pdGl2ZSgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAidHJpZWQgdG8gcmV0dXJuIG51bGwgdmFsdWUgZnJvbSBtZXRob2QgcmV0dXJuaW5nICIgKyByZXR1cm5UeXBlLmdldE5hbWUoKSk7CiAgICAgICAgfQogICAgfQogICAgCiAgICBwcml2YXRlIHZvaWQgcmVwb3J0VHlwZUVycm9yKENsYXNzPD8+IHJldHVyblR5cGUsIENsYXNzPD8+IHZhbHVlVHlwZSkgewogICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCiAgICAgICAgICAgICJ0cmllZCB0byByZXR1cm4gYSAiICsgdmFsdWVUeXBlLmdldE5hbWUoKSArCiAgICAgICAgICAgICIgZnJvbSBhIG1ldGhvZCB0aGF0IGNhbiBvbmx5IHJldHVybiBhICIgKyByZXR1cm5UeXBlLmdldE5hbWUoKSk7CiAgICB9Cn0KUEsDBAoAAAAAAPuyeDUYMHHR4AIAAOACAAAcAAAAb3JnL2ptb2NrL2FwaS9JbnZva2FibGUuamF2YXBhY2thZ2Ugb3JnLmptb2NrLmFwaTsKCi8qKgogKiBBbiBvYmplY3QgdGhhdCBjYW4gcmVjZWl2ZSBhbiB7QGxpbmsgb3JnLmptb2NrLmFwaS5JbnZvY2F0aW9ufS4KICogCiAqIEBhdXRob3IgbnByeWNlCiAqLwpwdWJsaWMgaW50ZXJmYWNlIEludm9rYWJsZSB7CiAgICAvKioKICAgICAqIFBlcmZvcm1zIGFuIGFjdGlvbiBpbiByZXNwb25zZSB0byBhbiBpbnZvY2F0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBpbnZvY2F0aW9uIAogICAgICogICAgIFRoZSBpbnZvY2F0aW9uIHRvIHBlcmZvcm0uCiAgICAgKiBAcmV0dXJuIAogICAgICogICAgIFRoZSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24sIGlmIG5vdCB0aHJvd2luZyBhbiBleGNlcHRpb24uCiAgICAgKiAgICAgTXVzdCByZXR1cm4gPGNvZGU+bnVsbDwvY29kZT4gaWYgdGhlIGludm9rZWQgbWV0aG9kIGhhcyBhIHZvaWQgcmV0dXJuIHR5cGUuCiAgICAgKiBAdGhyb3dzIFRocm93YWJsZSAKICAgICAqICAgICBBbiBleGNlcHRpb24gdG8gYmUgdGhyb3duIHRvIHRoZSBjYWxsZXIsIGlmIG5vdCByZXR1cm5pbmcgYSB2YWx1ZS4gIEFueSBjaGVja2VkIGV4Y2VwdGlvbgogICAgICogICAgIHRocm93biBtdXN0IGJlIGluIHRoZSA8Y29kZT50aHJvd3M8L2NvZGU+IGxpc3Qgb2YgdGhlIGludm9rZWQgbWV0aG9kLgogICAgICovCiAgICBPYmplY3QgaW52b2tlKEludm9jYXRpb24gaW52b2NhdGlvbikgdGhyb3dzIFRocm93YWJsZTsKfQpQSwMECgAAAAAA+7J4NcpXz6HOAQAAzgEAACkAAABvcmcvam1vY2svYXBpL01vY2tPYmplY3ROYW1pbmdTY2hlbWUuamF2YXBhY2thZ2Ugb3JnLmptb2NrLmFwaTsKCi8qKgogKiBDcmVhdGVzIG5hbWVzIGZvciBtb2NrIG9iamVjdHMgdGhhdCBoYXZlIG5vdCBleHBsaWNpdGx5IGJlZW4KICogZ2l2ZW4gYSBuYW1lLgogKiAKICogQGF1dGhvciBucHJ5Y2UKICovCnB1YmxpYyBpbnRlcmZhY2UgTW9ja09iamVjdE5hbWluZ1NjaGVtZSB7CiAgICAvKioKICAgICAqIERlcml2ZSBhIG5hbWUgZm9yIGEgbW9jayBvYmplY3QgZnJvbSB0aGUgbmFtZSBvZiB0aGUgZ2l2ZW4gdHlwZS4KICAgICAqIAogICAgICogQHBhcmFtIHR5cGVUb01vY2sKICAgICAqICAgICBUaGUgdHlwZSBiZWluZyBtb2NrZWQuCiAgICAgKiBAcmV0dXJuCiAgICAgKiAgICAgVGhlIGRlZmF1bHQgbmFtZSBmb3IgYSBtb2NrIG9iamVjdCBvZiB0aGUgZ2l2ZW4gdHlwZS4KICAgICAqLwogICAgU3RyaW5nIGRlZmF1bHROYW1lRm9yKENsYXNzPD8+IHR5cGVUb01vY2spOwp9ClBLAwQKAAAAAAAPT9c4JO9gd4AAAACAAAAAJgAAAG9yZy9qbW9jay9pbnRlcm5hbC9DYXB0dXJlQ29udHJvbC5qYXZhcGFja2FnZSBvcmcuam1vY2suaW50ZXJuYWw7CgoKCnB1YmxpYyBpbnRlcmZhY2UgQ2FwdHVyZUNvbnRyb2wgewogICAgT2JqZWN0IGNhcHR1cmVFeHBlY3RhdGlvblRvKEV4cGVjdGF0aW9uQ2FwdHVyZSBjYXB0dXJlKTsKfQpQSwMECgAAAAAAR7ubN1CqF5t+CQAAfgkAACMAAABvcmcvam1vY2svaW50ZXJuYWwvQ2FyZGluYWxpdHkuamF2YXBhY2thZ2Ugb3JnLmptb2NrLmludGVybmFsOwoKaW1wb3J0IG9yZy5oYW1jcmVzdC5EZXNjcmlwdGlvbjsKaW1wb3J0IG9yZy5oYW1jcmVzdC5TZWxmRGVzY3JpYmluZzsKCi8qKgogKiBUaGUgYWNjZXB0YWJsZSByYW5nZSBvZiB0aW1lcyBhbiBleHBlY3RhdGlvbiBtYXkgYmUgaW52b2tlZC4KICogCiAqIEBhdXRob3Igc21nZgogKiBAYXV0aG9yIG5hdAogKi8KcHVibGljIGNsYXNzIENhcmRpbmFsaXR5IGltcGxlbWVudHMgU2VsZkRlc2NyaWJpbmcgewogICAgcHVibGljIHN0YXRpYyBmaW5hbCBDYXJkaW5hbGl0eSBBTExPV0lORyA9IGF0TGVhc3QoMCk7CiAgICAKICAgIHByaXZhdGUgZmluYWwgaW50IHJlcXVpcmVkOwogICAgcHJpdmF0ZSBmaW5hbCBpbnQgbWF4aW11bTsKICAgIAogICAgcHVibGljIENhcmRpbmFsaXR5KGZpbmFsIGludCByZXF1aXJlZCwgZmluYWwgaW50IG1heGltdW0pIHsKICAgICAgICB0aGlzLnJlcXVpcmVkID0gcmVxdWlyZWQ7CiAgICAgICAgdGhpcy5tYXhpbXVtID0gbWF4aW11bTsKICAgIH0KICAgIAogICAgcHVibGljIHN0YXRpYyBDYXJkaW5hbGl0eSBleGFjdGx5KGludCBjb3VudCkgewogICAgICAgIHJldHVybiBiZXR3ZWVuKGNvdW50LCBjb3VudCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBDYXJkaW5hbGl0eSBhdExlYXN0KGludCByZXF1aXJlZCkgewogICAgICAgIHJldHVybiBiZXR3ZWVuKHJlcXVpcmVkLCBJbnRlZ2VyLk1BWF9WQUxVRSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBDYXJkaW5hbGl0eSBiZXR3ZWVuKGludCByZXF1aXJlZCwgaW50IG1heGltdW0pIHsKICAgICAgICByZXR1cm4gbmV3IENhcmRpbmFsaXR5KHJlcXVpcmVkLCBtYXhpbXVtKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIENhcmRpbmFsaXR5IGF0TW9zdChpbnQgbWF4aW11bSkgewogICAgICAgIHJldHVybiBiZXR3ZWVuKDAsIG1heGltdW0pOwogICAgfQoKICAgIHB1YmxpYyBib29sZWFuIGlzU2F0aXNmaWVkKGludCBpbnZvY2F0aW9uc1NvRmFyKSB7CiAgICAgICAgcmV0dXJuIHJlcXVpcmVkIDw9IGludm9jYXRpb25zU29GYXI7CiAgICB9CgogICAgcHVibGljIGJvb2xlYW4gYWxsb3dzTW9yZUludm9jYXRpb25zKGludCBpbnZvY2F0aW9uQ291bnQpIHsKICAgICAgICByZXR1cm4gaW52b2NhdGlvbkNvdW50IDwgbWF4aW11bTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBkZXNjcmliZVRvKERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7CiAgICAgICAgaWYgKHJlcXVpcmVkID09IDAgJiYgbWF4aW11bSA9PSBJbnRlZ2VyLk1BWF9WQUxVRSkgewogICAgICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRUZXh0KCJhbGxvd2VkIik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRUZXh0KCJleHBlY3RlZCAiKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyZXF1aXJlZCA9PSAwICYmIG1heGltdW0gPT0gMCkgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24uYXBwZW5kVGV4dCgibmV2ZXIiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChyZXF1aXJlZCA9PSAxICYmIG1heGltdW0gPT0gMSkgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24uYXBwZW5kVGV4dCgib25jZSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHJlcXVpcmVkID09IG1heGltdW0pIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFRleHQoImV4YWN0bHkgIik7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRUZXh0KEZvcm1hdHRpbmcudGltZXMocmVxdWlyZWQpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChtYXhpbXVtID09IEludGVnZXIuTUFYX1ZBTFVFKSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRUZXh0KCJhdCBsZWFzdCAiKTsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFRleHQoRm9ybWF0dGluZy50aW1lcyhyZXF1aXJlZCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHJlcXVpcmVkID09IDApIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFRleHQoImF0IG1vc3QgIik7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRUZXh0KEZvcm1hdHRpbmcudGltZXMobWF4aW11bSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24uYXBwZW5kVGV4dChJbnRlZ2VyLnRvU3RyaW5nKHJlcXVpcmVkKSk7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRUZXh0KCIgdG8gIik7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRUZXh0KEZvcm1hdHRpbmcudGltZXMobWF4aW11bSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9ClBLAwQKAAAAAAB0SGI2KUo6X7gBAAC4AQAALQAAAG9yZy9qbW9jay9pbnRlcm5hbC9DaGFuZ2VTdGF0ZVNpZGVFZmZlY3QuamF2YXBhY2thZ2Ugb3JnLmptb2NrLmludGVybmFsOwoKaW1wb3J0IG9yZy5oYW1jcmVzdC5EZXNjcmlwdGlvbjsKCnB1YmxpYyBjbGFzcyBDaGFuZ2VTdGF0ZVNpZGVFZmZlY3QgaW1wbGVtZW50cyBTaWRlRWZmZWN0IHsKICAgIHByaXZhdGUgZmluYWwgU3RhdGUgc3RhdGU7CgogICAgcHVibGljIENoYW5nZVN0YXRlU2lkZUVmZmVjdChTdGF0ZSBzdGF0ZSkgewogICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBwZXJmb3JtKCkgewogICAgICAgIHN0YXRlLmFjdGl2YXRlKCk7CiAgICB9CgogICAgcHVibGljIHZvaWQgZGVzY3JpYmVUbyhEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFRleHQoInRoZW4gIik7CiAgICAgICAgc3RhdGUuZGVzY3JpYmVUbyhkZXNjcmlwdGlvbik7CiAgICB9Cn0KUEsDBAoAAAAAAHRIYjarF7tUtQAAALUAAAAqAAAAb3JnL2ptb2NrL2ludGVybmFsL0V4cGVjdGF0aW9uQnVpbGRlci5qYXZhcGFja2FnZSBvcmcuam1vY2suaW50ZXJuYWw7CgppbXBvcnQgb3JnLmptb2NrLmFwaS5BY3Rpb247CgpwdWJsaWMgaW50ZXJmYWNlIEV4cGVjdGF0aW9uQnVpbGRlciB7CiAgICB2b2lkIGJ1aWxkRXhwZWN0YXRpb25zKEFjdGlvbiBkZWZhdWx0QWN0aW9uLCBFeHBlY3RhdGlvbkNvbGxlY3RvciBjb2xsZWN0b3IpOwp9ClBLAwQKAAAAAAAPT9c4kdgpI58AAACfAAAAKgAAAG9yZy9qbW9jay9pbnRlcm5hbC9FeHBlY3RhdGlvbkNhcHR1cmUuamF2YXBhY2thZ2Ugb3JnLmptb2NrLmludGVybmFsOwoKaW1wb3J0IG9yZy5qbW9jay5hcGkuSW52b2NhdGlvbjsKCgpwdWJsaWMgaW50ZXJmYWNlIEV4cGVjdGF0aW9uQ2FwdHVyZSB7CiAgICB2b2lkIGNyZWF0ZUV4cGVjdGF0aW9uRnJvbShJbnZvY2F0aW9uIGludm9jYXRpb24pOwp9ClBLAwQKAAAAAADIATs2CtWuW5EAAACRAAAALAAAAG9yZy9qbW9jay9pbnRlcm5hbC9FeHBlY3RhdGlvbkNvbGxlY3Rvci5qYXZhcGFja2FnZSBvcmcuam1vY2suaW50ZXJuYWw7CgppbXBvcnQgb3JnLmptb2NrLmFwaS5FeHBlY3RhdGlvbjsKCnB1YmxpYyBpbnRlcmZhY2UgRXhwZWN0YXRpb25Db2xsZWN0b3IgewogICAgdm9pZCBhZGQoRXhwZWN0YXRpb24gZXhwZWN0YXRpb24pOwp9ClBLAwQKAAAAAAAtW9c4oDzMA/MGAADzBgAAKQAAAG9yZy9qbW9jay9pbnRlcm5hbC9GYWtlT2JqZWN0TWV0aG9kcy5qYXZhcGFja2FnZSBvcmcuam1vY2suaW50ZXJuYWw7CgppbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwppbXBvcnQgamF2YS51dGlsLkFycmF5czsKCmltcG9ydCBvcmcuam1vY2suYXBpLkludm9jYXRpb247CmltcG9ydCBvcmcuam1vY2suYXBpLkludm9rYWJsZTsKCgpwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRmFrZU9iamVjdE1ldGhvZHMgaW1wbGVtZW50cyBJbnZva2FibGUgewogICAgcHJpdmF0ZSBmaW5hbCBJbnZva2FibGUgbmV4dDsKCiAgICBwdWJsaWMgRmFrZU9iamVjdE1ldGhvZHMoSW52b2thYmxlIG5leHQpIHsKICAgICAgICB0aGlzLm5leHQgPSBuZXh0OwogICAgfQoKICAgIEBPdmVycmlkZQogICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICByZXR1cm4gbmV4dC50b1N0cmluZygpOwogICAgfQoKICAgIHB1YmxpYyBPYmplY3QgaW52b2tlKEludm9jYXRpb24gaW52b2NhdGlvbikgdGhyb3dzIFRocm93YWJsZSB7CiAgICAgICAgTWV0aG9kIG1ldGhvZCA9IGludm9jYXRpb24uZ2V0SW52b2tlZE1ldGhvZCgpOwogICAgICAgIGlmIChpc01ldGhvZChtZXRob2QsIGludC5jbGFzcywgImhhc2hDb2RlIikpIHsKICAgICAgICAgICAgcmV0dXJuIGZha2VIYXNoQ29kZShpbnZvY2F0aW9uLmdldEludm9rZWRPYmplY3QoKSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGlzTWV0aG9kKG1ldGhvZCwgU3RyaW5nLmNsYXNzLCAidG9TdHJpbmciKSkgewogICAgICAgICAgICByZXR1cm4gZmFrZVRvU3RyaW5nKGludm9jYXRpb24uZ2V0SW52b2tlZE9iamVjdCgpKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoaXNNZXRob2QobWV0aG9kLCBib29sZWFuLmNsYXNzLCAiZXF1YWxzIiwgT2JqZWN0LmNsYXNzKSkgewogICAgICAgICAgICByZXR1cm4gZmFrZUVxdWFscyhpbnZvY2F0aW9uLmdldEludm9rZWRPYmplY3QoKSwgaW52b2NhdGlvbi5nZXRQYXJhbWV0ZXIoMCkpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChpc01ldGhvZChtZXRob2QsIHZvaWQuY2xhc3MsICJmaW5hbGl6ZSIpKSB7CiAgICAgICAgICAgIGZha2VGaW5hbGl6ZShpbnZvY2F0aW9uLmdldEludm9rZWRPYmplY3QoKSk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIG5leHQuaW52b2tlKGludm9jYXRpb24pOwogICAgICAgIH0KICAgIH0KCiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgaW50IGZha2VIYXNoQ29kZShPYmplY3QgaW52b2tlZE9iamVjdCk7CgogICAgcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBmYWtlVG9TdHJpbmcoT2JqZWN0IGludm9rZWRPYmplY3QpOwoKICAgIHByb3RlY3RlZCBhYnN0cmFjdCBib29sZWFuIGZha2VFcXVhbHMoT2JqZWN0IGludm9rZWRPYmplY3QsIE9iamVjdCBvdGhlcik7CgogICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgZmFrZUZpbmFsaXplKE9iamVjdCBpbnZva2VkT2JqZWN0KTsKCiAgICBwcml2YXRlIGJvb2xlYW4gaXNNZXRob2QoTWV0aG9kIG1ldGhvZCwgQ2xhc3M8Pz4gcmV0dXJuVHlwZSwgU3RyaW5nIG5hbWUsIENsYXNzPD8+Li4uIHBhcmFtZXRlclR5cGVzKSB7CiAgICAgICAgcmV0dXJuIG1ldGhvZC5nZXRSZXR1cm5UeXBlKCkuZXF1YWxzKHJldHVyblR5cGUpCiAgICAgICAgICAgICYmIG1ldGhvZC5nZXROYW1lKCkuZXF1YWxzKG5hbWUpCiAgICAgICAgICAgICYmIEFycmF5cy5lcXVhbHMobWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCksIHBhcmFtZXRlclR5cGVzKTsKICAgIH0KCn0KUEsDBAoAAAAAAEe7mzfT9GdZnwAAAJ8AAAAiAAAAb3JnL2ptb2NrL2ludGVybmFsL0Zvcm1hdHRpbmcuamF2YXBhY2thZ2Ugb3JnLmptb2NrLmludGVybmFsOwoKcHVibGljIGNsYXNzIEZvcm1hdHRpbmcgewoKICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRpbWVzKGludCBpKSB7CiAgICAgICAgcmV0dXJuIGkgKyAiICIgKyAoaSA9PSAxID8gInRpbWUiIDogInRpbWVzIik7CiAgICB9Cgp9ClBLAwQKAAAAAABOfmQ2JZ0TyCYCAAAmAgAAMQAAAG9yZy9qbW9jay9pbnRlcm5hbC9JblN0YXRlT3JkZXJpbmdDb25zdHJhaW50LmphdmFwYWNrYWdlIG9yZy5qbW9jay5pbnRlcm5hbDsKCmltcG9ydCBvcmcuaGFtY3Jlc3QuRGVzY3JpcHRpb247CgpwdWJsaWMgY2xhc3MgSW5TdGF0ZU9yZGVyaW5nQ29uc3RyYWludCBpbXBsZW1lbnRzIE9yZGVyaW5nQ29uc3RyYWludCB7CiAgICBwcml2YXRlIGZpbmFsIFN0YXRlUHJlZGljYXRlIHN0YXRlUHJlZGljYXRlOwoKICAgIHB1YmxpYyBJblN0YXRlT3JkZXJpbmdDb25zdHJhaW50KFN0YXRlUHJlZGljYXRlIHN0YXRlUHJlZGljYXRlKSB7CiAgICAgICAgdGhpcy5zdGF0ZVByZWRpY2F0ZSA9IHN0YXRlUHJlZGljYXRlOwogICAgfQoKICAgIHB1YmxpYyBib29sZWFuIGFsbG93c0ludm9jYXRpb25Ob3coKSB7CiAgICAgICAgcmV0dXJuIHN0YXRlUHJlZGljYXRlLmlzQWN0aXZlKCk7CiAgICB9CgogICAgcHVibGljIHZvaWQgZGVzY3JpYmVUbyhEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFRleHQoIndoZW4gIik7CiAgICAgICAgc3RhdGVQcmVkaWNhdGUuZGVzY3JpYmVUbyhkZXNjcmlwdGlvbik7CiAgICB9Cn0KUEsDBAoAAAAAADOSIziImrYRmgcAAJoHAAAsAAAAb3JnL2ptb2NrL2ludGVybmFsL0ludm9jYXRpb25EaXNwYXRjaGVyLmphdmFwYWNrYWdlIG9yZy5qbW9jay5pbnRlcm5hbDsKCmltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwppbXBvcnQgamF2YS51dGlsLkxpc3Q7CgppbXBvcnQgb3JnLmhhbWNyZXN0LkRlc2NyaXB0aW9uOwppbXBvcnQgb3JnLmhhbWNyZXN0LlNlbGZEZXNjcmliaW5nOwppbXBvcnQgb3JnLmptb2NrLmFwaS5FeHBlY3RhdGlvbjsKaW1wb3J0IG9yZy5qbW9jay5hcGkuRXhwZWN0YXRpb25FcnJvcjsKaW1wb3J0IG9yZy5qbW9jay5hcGkuSW52b2NhdGlvbjsKCnB1YmxpYyBjbGFzcyBJbnZvY2F0aW9uRGlzcGF0Y2hlciBpbXBsZW1lbnRzIEV4cGVjdGF0aW9uQ29sbGVjdG9yLCBTZWxmRGVzY3JpYmluZyB7Cglwcml2YXRlIExpc3Q8RXhwZWN0YXRpb24+IGV4cGVjdGF0aW9ucyA9IG5ldyBBcnJheUxpc3Q8RXhwZWN0YXRpb24+KCk7Cglwcml2YXRlIExpc3Q8U3RhdGVNYWNoaW5lPiBzdGF0ZU1hY2hpbmVzID0gbmV3IEFycmF5TGlzdDxTdGF0ZU1hY2hpbmU+KCk7CiAgICAKICAgIHB1YmxpYyBTdGF0ZU1hY2hpbmUgbmV3U3RhdGVNYWNoaW5lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgU3RhdGVNYWNoaW5lIHN0YXRlTWFjaGluZSA9IG5ldyBTdGF0ZU1hY2hpbmUobmFtZSk7CiAgICAgICAgc3RhdGVNYWNoaW5lcy5hZGQoc3RhdGVNYWNoaW5lKTsKICAgICAgICByZXR1cm4gc3RhdGVNYWNoaW5lOwogICAgfQogICAgCglwdWJsaWMgdm9pZCBhZGQoRXhwZWN0YXRpb24gZXhwZWN0YXRpb24pIHsKCQlleHBlY3RhdGlvbnMuYWRkKGV4cGVjdGF0aW9uKTsKCX0KCQogICAgcHVibGljIHZvaWQgZGVzY3JpYmVUbyhEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewogICAgICAgIGlmIChleHBlY3RhdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFRleHQoIm5vIGV4cGVjdGF0aW9ucyBzcGVjaWZpZWQ6IGRpZCB5b3UuLi5cbiIrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAtIGZvcmdldCB0byBzdGFydCBhbiBleHBlY3RhdGlvbiB3aXRoIGEgY2FyZGluYWxpdHkgY2xhdXNlP1xuIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAtIGNhbGwgYSBtb2NrZWQgbWV0aG9kIHRvIHNwZWNpZnkgdGhlIHBhcmFtZXRlciBvZiBhbiBleHBlY3RhdGlvbj8iKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZExpc3QoImV4cGVjdGF0aW9uczpcbiAgIiwgIlxuICAiLCAiIiwgZXhwZWN0YXRpb25zKTsKICAgICAgICAgICAgaWYgKCFzdGF0ZU1hY2hpbmVzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24uYXBwZW5kTGlzdCgiXG5zdGF0ZXM6XG4gICIsICJcbiAgIiwgIiIsIHN0YXRlTWFjaGluZXMpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICBwdWJsaWMgYm9vbGVhbiBpc1NhdGlzZmllZCgpIHsKCQlmb3IgKEV4cGVjdGF0aW9uIGV4cGVjdGF0aW9uIDogZXhwZWN0YXRpb25zKSB7CgkJICAgIGlmICghIGV4cGVjdGF0aW9uLmlzU2F0aXNmaWVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKCX0KCQoJcHVibGljIE9iamVjdCBkaXNwYXRjaChJbnZvY2F0aW9uIGludm9jYXRpb24pIHRocm93cyBUaHJvd2FibGUgewoJCWZvciAoRXhwZWN0YXRpb24gZXhwZWN0YXRpb24gOiBleHBlY3RhdGlvbnMpIHsKCQkgICAgaWYgKGV4cGVjdGF0aW9uLm1hdGNoZXMoaW52b2NhdGlvbikpIHsKCQkgICAgICAgIHJldHVybiBleHBlY3RhdGlvbi5pbnZva2UoaW52b2NhdGlvbik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdGhyb3cgbmV3IEV4cGVjdGF0aW9uRXJyb3IoInVuZXhwZWN0ZWQgaW52b2NhdGlvbiIsIGludm9jYXRpb24pOwoJfQp9ClBLAwQKAAAAAAD7sng1KlEwjjYDAAA2AwAAKgAAAG9yZy9qbW9jay9pbnRlcm5hbC9JbnZvY2F0aW9uRGl2ZXJ0ZXIuamF2YXBhY2thZ2Ugb3JnLmptb2NrLmludGVybmFsOwoKaW1wb3J0IG9yZy5qbW9jay5hcGkuSW52b2NhdGlvbjsKaW1wb3J0IG9yZy5qbW9jay5hcGkuSW52b2thYmxlOwoKcHVibGljIGNsYXNzIEludm9jYXRpb25EaXZlcnRlcjxUPiBpbXBsZW1lbnRzIEludm9rYWJsZSB7CiAgICBwcml2YXRlIGZpbmFsIENsYXNzPFQ+IGRlY2xhcmluZ1R5cGU7CiAgICBwcml2YXRlIGZpbmFsIFQgdGFyZ2V0OwogICAgcHJpdmF0ZSBmaW5hbCBJbnZva2FibGUgbmV4dDsKCiAgICBwdWJsaWMgSW52b2NhdGlvbkRpdmVydGVyKENsYXNzPFQ+IGRlY2xhcmluZ1R5cGUsIFQgdGFyZ2V0LCBJbnZva2FibGUgbmV4dCkgewogICAgICAgIHRoaXMuZGVjbGFyaW5nVHlwZSA9IGRlY2xhcmluZ1R5cGU7CiAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7CiAgICAgICAgdGhpcy5uZXh0ID0gbmV4dDsKICAgIH0KICAgIAogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgIHJldHVybiBuZXh0LnRvU3RyaW5nKCk7CiAgICB9CiAgICAKICAgIHB1YmxpYyBPYmplY3QgaW52b2tlKEludm9jYXRpb24gaW52b2NhdGlvbikgdGhyb3dzIFRocm93YWJsZSB7CiAgICAgICAgaWYgKGludm9jYXRpb24uZ2V0SW52b2tlZE1ldGhvZCgpLmdldERlY2xhcmluZ0NsYXNzKCkgPT0gZGVjbGFyaW5nVHlwZSkgewogICAgICAgICAgICByZXR1cm4gaW52b2NhdGlvbi5hcHBseVRvKHRhcmdldCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gbmV4dC5pbnZva2UoaW52b2NhdGlvbik7CiAgICAgICAgfQogICAgfQp9ClBLAwQKAAAAAABHu5s3jdbz5psPAACbDwAALQAAAG9yZy9qbW9jay9pbnRlcm5hbC9JbnZvY2F0aW9uRXhwZWN0YXRpb24uamF2YXBhY2thZ2Ugb3JnLmptb2NrLmludGVybmFsOwoKaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKCmltcG9ydCBvcmcuaGFtY3Jlc3QuRGVzY3JpcHRpb247CmltcG9ydCBvcmcuaGFtY3Jlc3QuTWF0Y2hlcjsKaW1wb3J0IG9yZy5oYW1jcmVzdC5jb3JlLklzQW55dGhpbmc7CmltcG9ydCBvcmcuam1vY2suYXBpLkFjdGlvbjsKaW1wb3J0IG9yZy5qbW9jay5hcGkuRXhwZWN0YXRpb247CmltcG9ydCBvcmcuam1vY2suYXBpLkludm9jYXRpb247CmltcG9ydCBvcmcuam1vY2subGliLmFjdGlvbi5Wb2lkQWN0aW9uOwoKLyoqIAogKiBBbiBleHBlY3RhdGlvbiBvZiB6ZXJvIG9yIG1vcmUgbWF0Y2hpbmcgaW52b2NhdGlvbnMuCiAqIAogKiBAYXV0aG9yIG5wcnljZQogKiBAYXV0aG9yIHNtZ2YKICovCnB1YmxpYyBjbGFzcyBJbnZvY2F0aW9uRXhwZWN0YXRpb24gaW1wbGVtZW50cyBFeHBlY3RhdGlvbiB7CiAgICBwcml2YXRlIENhcmRpbmFsaXR5IGNhcmRpbmFsaXR5ID0gQ2FyZGluYWxpdHkuQUxMT1dJTkc7Cglwcml2YXRlIE1hdGNoZXI8Pz4gb2JqZWN0TWF0Y2hlciA9IElzQW55dGhpbmcuYW55dGhpbmcoKTsKCXByaXZhdGUgTWF0Y2hlcjxNZXRob2Q+IG1ldGhvZE1hdGNoZXIgPSBJc0FueXRoaW5nLmFueXRoaW5nKCI8YW55IG1ldGhvZD4iKTsKCXByaXZhdGUgTWF0Y2hlcjxPYmplY3RbXT4gcGFyYW1ldGVyc01hdGNoZXIgPSBJc0FueXRoaW5nLmFueXRoaW5nKCIoPGFueSBwYXJhbWV0ZXJzPikiKTsKICAgIHByaXZhdGUgQWN0aW9uIGFjdGlvbiA9IG5ldyBWb2lkQWN0aW9uKCk7CiAgICBwcml2YXRlIExpc3Q8T3JkZXJpbmdDb25zdHJhaW50PiBvcmRlcmluZ0NvbnN0cmFpbnRzID0gbmV3IEFycmF5TGlzdDxPcmRlcmluZ0NvbnN0cmFpbnQ+KCk7CiAgICBwcml2YXRlIExpc3Q8U2lkZUVmZmVjdD4gc2lkZUVmZmVjdHMgPSBuZXcgQXJyYXlMaXN0PFNpZGVFZmZlY3Q+KCk7CiAgICAKCXByaXZhdGUgaW50IGludm9jYXRpb25Db3VudCA9IDA7CgkKICAgIHB1YmxpYyB2b2lkIHNldENhcmRpbmFsaXR5KENhcmRpbmFsaXR5IGNhcmRpbmFsaXR5KSB7CiAgICAgICAgdGhpcy5jYXJkaW5hbGl0eSA9IGNhcmRpbmFsaXR5OwogICAgfQoJCglwdWJsaWMgdm9pZCBzZXRPYmplY3RNYXRjaGVyKE1hdGNoZXI8Pz4gb2JqZWN0TWF0Y2hlcikgewoJCXRoaXMub2JqZWN0TWF0Y2hlciA9IG9iamVjdE1hdGNoZXI7Cgl9CgkKCXB1YmxpYyB2b2lkIHNldE1ldGhvZE1hdGNoZXIoTWF0Y2hlcjxNZXRob2Q+IG1ldGhvZE1hdGNoZXIpIHsKCQl0aGlzLm1ldGhvZE1hdGNoZXIgPSBtZXRob2RNYXRjaGVyOwoJfQoJCglwdWJsaWMgdm9pZCBzZXRQYXJhbWV0ZXJzTWF0Y2hlcihNYXRjaGVyPE9iamVjdFtdPiBwYXJhbWV0ZXJzTWF0Y2hlcikgewoJCXRoaXMucGFyYW1ldGVyc01hdGNoZXIgPSBwYXJhbWV0ZXJzTWF0Y2hlcjsKCX0KCiAgICBwdWJsaWMgdm9pZCBhZGRPcmRlcmluZ0NvbnN0cmFpbnQoT3JkZXJpbmdDb25zdHJhaW50IG9yZGVyaW5nQ29uc3RyYWludCkgewogICAgICAgIG9yZGVyaW5nQ29uc3RyYWludHMuYWRkKG9yZGVyaW5nQ29uc3RyYWludCk7CiAgICB9CgogICAgcHVibGljIHZvaWQgYWRkU2lkZUVmZmVjdChTaWRlRWZmZWN0IHNpZGVFZmZlY3QpIHsKICAgICAgICBzaWRlRWZmZWN0cy5hZGQoc2lkZUVmZmVjdCk7CiAgICB9CiAgICAKICAgIHB1YmxpYyB2b2lkIHNldEFjdGlvbihBY3Rpb24gYWN0aW9uKSB7CiAgICAgICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247CiAgICB9CiAgICAKICAgIHB1YmxpYyB2b2lkIGRlc2NyaWJlVG8oRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKICAgICAgICBjYXJkaW5hbGl0eS5kZXNjcmliZVRvKGRlc2NyaXB0aW9uKTsKICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRUZXh0KCIsICIpOwogICAgICAgIGlmIChpbnZvY2F0aW9uQ291bnQgPT0gMCkgewogICAgICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRUZXh0KCJuZXZlciBpbnZva2VkIik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRUZXh0KCJhbHJlYWR5IGludm9rZWQgIik7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFRleHQoRm9ybWF0dGluZy50aW1lcyhpbnZvY2F0aW9uQ291bnQpKTsKICAgICAgICB9CiAgICAgICAgZGVzY3JpcHRpb24uYXBwZW5kVGV4dCgiOiAiKTsKICAgICAgICBvYmplY3RNYXRjaGVyLmRlc2NyaWJlVG8oZGVzY3JpcHRpb24pOwogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFRleHQoIi4iKTsKICAgICAgICBtZXRob2RNYXRjaGVyLmRlc2NyaWJlVG8oZGVzY3JpcHRpb24pOwogICAgICAgIHBhcmFtZXRlcnNNYXRjaGVyLmRlc2NyaWJlVG8oZGVzY3JpcHRpb24pOwogICAgICAgIGZvciAoT3JkZXJpbmdDb25zdHJhaW50IG9yZGVyaW5nQ29uc3RyYWludCA6IG9yZGVyaW5nQ29uc3RyYWludHMpIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24uYXBwZW5kVGV4dCgiOyAiKTsKICAgICAgICAgICAgb3JkZXJpbmdDb25zdHJhaW50LmRlc2NyaWJlVG8oZGVzY3JpcHRpb24pOwogICAgICAgIH0KICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRUZXh0KCI7ICIpOwogICAgICAgIGFjdGlvbi5kZXNjcmliZVRvKGRlc2NyaXB0aW9uKTsKICAgICAgICBmb3IgKFNpZGVFZmZlY3Qgc2lkZUVmZmVjdCA6IHNpZGVFZmZlY3RzKSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFRleHQoIjsgIik7CiAgICAgICAgICAgIHNpZGVFZmZlY3QuZGVzY3JpYmVUbyhkZXNjcmlwdGlvbik7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBib29sZWFuIGlzU2F0aXNmaWVkKCkgewogICAgICAgIHJldHVybiBjYXJkaW5hbGl0eS5pc1NhdGlzZmllZChpbnZvY2F0aW9uQ291bnQpOwogICAgfQogICAgCiAgICBwdWJsaWMgYm9vbGVhbiBhbGxvd3NNb3JlSW52b2NhdGlvbnMoKSB7CiAgICAgICAgcmV0dXJuIGNhcmRpbmFsaXR5LmFsbG93c01vcmVJbnZvY2F0aW9ucyhpbnZvY2F0aW9uQ291bnQpOwogICAgfQogICAgCiAgICBwdWJsaWMgYm9vbGVhbiBtYXRjaGVzKEludm9jYXRpb24gaW52b2NhdGlvbikgewoJCXJldHVybiBhbGxvd3NNb3JlSW52b2NhdGlvbnMoKQoJCQkmJiBvYmplY3RNYXRjaGVyLm1hdGNoZXMoaW52b2NhdGlvbi5nZXRJbnZva2VkT2JqZWN0KCkpCgkJCSYmIG1ldGhvZE1hdGNoZXIubWF0Y2hlcyhpbnZvY2F0aW9uLmdldEludm9rZWRNZXRob2QoKSkKCQkJJiYgcGFyYW1ldGVyc01hdGNoZXIubWF0Y2hlcyhpbnZvY2F0aW9uLmdldFBhcmFtZXRlcnNBc0FycmF5KCkpCiAgICAgICAgICAgICYmIGlzSW5Db3JyZWN0T3JkZXIoKTsKICAgICAgICAKCX0KICAgIAoJcHJpdmF0ZSBib29sZWFuIGlzSW5Db3JyZWN0T3JkZXIoKSB7CiAgICAgICAgZm9yIChPcmRlcmluZ0NvbnN0cmFpbnQgY29uc3RyYWludCA6IG9yZGVyaW5nQ29uc3RyYWludHMpIHsKICAgICAgICAgICAgaWYgKCFjb25zdHJhaW50LmFsbG93c0ludm9jYXRpb25Ob3coKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCQogICAgcHVibGljIE9iamVjdCBpbnZva2UoSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB0aHJvd3MgVGhyb3dhYmxlIHsKCQlpbnZvY2F0aW9uQ291bnQrKzsKCQlwZXJmb3JtU2lkZUVmZmVjdHMoKTsKCQlmaW5hbCBPYmplY3QgcmVzdWx0ID0gYWN0aW9uLmludm9rZShpbnZvY2F0aW9uKTsKICAgICAgICBpbnZvY2F0aW9uLmNoZWNrUmV0dXJuVHlwZUNvbXBhdGliaWxpdHkocmVzdWx0KTsKICAgICAgICByZXR1cm4gcmVzdWx0OwoJfQoKICAgIHByaXZhdGUgdm9pZCBwZXJmb3JtU2lkZUVmZmVjdHMoKSB7CiAgICAgICAgZm9yIChTaWRlRWZmZWN0IHNpZGVFZmZlY3QgOiBzaWRlRWZmZWN0cykgewogICAgICAgICAgICBzaWRlRWZmZWN0LnBlcmZvcm0oKTsKICAgICAgICB9CiAgICB9Cn0KUEsDBAoAAAAAAA9P1ziAwxx+MxIAADMSAAA0AAAAb3JnL2ptb2NrL2ludGVybmFsL0ludm9jYXRpb25FeHBlY3RhdGlvbkJ1aWxkZXIuamF2YXBhY2thZ2Ugb3JnLmptb2NrLmludGVybmFsOwoKaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwppbXBvcnQgamF2YS51dGlsLkxpc3Q7CgppbXBvcnQgb3JnLmhhbWNyZXN0Lk1hdGNoZXI7CmltcG9ydCBvcmcuam1vY2suU2VxdWVuY2U7CmltcG9ydCBvcmcuam1vY2suYXBpLkFjdGlvbjsKaW1wb3J0IG9yZy5qbW9jay5hcGkuRXhwZWN0YXRpb247CmltcG9ydCBvcmcuam1vY2suYXBpLkludm9jYXRpb247CmltcG9ydCBvcmcuam1vY2suaW50ZXJuYWwubWF0Y2hlci5NZXRob2RNYXRjaGVyOwppbXBvcnQgb3JnLmptb2NrLmludGVybmFsLm1hdGNoZXIuTWV0aG9kTmFtZU1hdGNoZXI7CmltcG9ydCBvcmcuam1vY2suaW50ZXJuYWwubWF0Y2hlci5Nb2NrT2JqZWN0TWF0Y2hlcjsKaW1wb3J0IG9yZy5qbW9jay5pbnRlcm5hbC5tYXRjaGVyLlBhcmFtZXRlcnNNYXRjaGVyOwppbXBvcnQgb3JnLmptb2NrLnN5bnRheC5NZXRob2RDbGF1c2U7CmltcG9ydCBvcmcuam1vY2suc3ludGF4LlBhcmFtZXRlcnNDbGF1c2U7CmltcG9ydCBvcmcuam1vY2suc3ludGF4LlJlY2VpdmVyQ2xhdXNlOwoKcHVibGljIGNsYXNzIEludm9jYXRpb25FeHBlY3RhdGlvbkJ1aWxkZXIgCiAgICBpbXBsZW1lbnRzIEV4cGVjdGF0aW9uQ2FwdHVyZSwgCiAgICAgICAgICAgICAgIFJlY2VpdmVyQ2xhdXNlLCBNZXRob2RDbGF1c2UsIFBhcmFtZXRlcnNDbGF1c2UKewogICAgcHJpdmF0ZSBmaW5hbCBJbnZvY2F0aW9uRXhwZWN0YXRpb24gZXhwZWN0YXRpb24gPSBuZXcgSW52b2NhdGlvbkV4cGVjdGF0aW9uKCk7CiAgICAKICAgIHByaXZhdGUgYm9vbGVhbiBpc0Z1bGx5U3BlY2lmaWVkID0gZmFsc2U7CiAgICBwcml2YXRlIGJvb2xlYW4gbmVlZHNEZWZhdWx0QWN0aW9uID0gdHJ1ZTsKICAgIHByaXZhdGUgTGlzdDxNYXRjaGVyPD8+PiBjYXB0dXJlZFBhcmFtZXRlck1hdGNoZXJzID0gbmV3IEFycmF5TGlzdDxNYXRjaGVyPD8+PigpOwogICAgCiAgICBwdWJsaWMgRXhwZWN0YXRpb24gdG9FeHBlY3RhdGlvbihBY3Rpb24gZGVmYXVsdEFjdGlvbikgewogICAgICAgIGlmIChuZWVkc0RlZmF1bHRBY3Rpb24pIHsKICAgICAgICAgICAgZXhwZWN0YXRpb24uc2V0QWN0aW9uKGRlZmF1bHRBY3Rpb24pOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gZXhwZWN0YXRpb247CiAgICB9CiAgICAKICAgIHB1YmxpYyB2b2lkIHNldENhcmRpbmFsaXR5KENhcmRpbmFsaXR5IGNhcmRpbmFsaXR5KSB7CiAgICAgICAgZXhwZWN0YXRpb24uc2V0Q2FyZGluYWxpdHkoY2FyZGluYWxpdHkpOwogICAgfQogICAgCiAgICBwdWJsaWMgdm9pZCBhZGRQYXJhbWV0ZXJNYXRjaGVyKE1hdGNoZXI8Pz4gbWF0Y2hlcikgewogICAgICAgIGNhcHR1cmVkUGFyYW1ldGVyTWF0Y2hlcnMuYWRkKG1hdGNoZXIpOwogICAgfQogICAgCiAgICBwdWJsaWMgdm9pZCBhZGRPcmRlcmluZ0NvbnN0cmFpbnQoT3JkZXJpbmdDb25zdHJhaW50IGNvbnN0cmFpbnQpIHsKICAgICAgICBleHBlY3RhdGlvbi5hZGRPcmRlcmluZ0NvbnN0cmFpbnQoY29uc3RyYWludCk7CiAgICB9CiAgICAKICAgIHB1YmxpYyB2b2lkIGFkZEluU2VxdWVuY2VPcmRlcmluZ0NvbnN0cmFpbnQoU2VxdWVuY2Ugc2VxdWVuY2UpIHsKICAgICAgICBzZXF1ZW5jZS5jb25zdHJhaW5Bc05leHRJblNlcXVlbmNlKGV4cGVjdGF0aW9uKTsKICAgIH0KICAgIAogICAgcHVibGljIHZvaWQgc2V0QWN0aW9uKEFjdGlvbiBhY3Rpb24pIHsKICAgICAgICBleHBlY3RhdGlvbi5zZXRBY3Rpb24oYWN0aW9uKTsKICAgICAgICBuZWVkc0RlZmF1bHRBY3Rpb24gPSBmYWxzZTsKICAgIH0KICAgIAogICAgcHVibGljIHZvaWQgYWRkU2lkZUVmZmVjdChTaWRlRWZmZWN0IHNpZGVFZmZlY3QpIHsKICAgICAgICBleHBlY3RhdGlvbi5hZGRTaWRlRWZmZWN0KHNpZGVFZmZlY3QpOwogICAgfQogICAgCiAgICBwcml2YXRlIDxUPiBUIGNhcHR1cmVFeHBlY3RlZE9iamVjdChUIG1vY2tPYmplY3QpIHsKICAgICAgICBpZiAoIShtb2NrT2JqZWN0IGluc3RhbmNlb2YgQ2FwdHVyZUNvbnRyb2wpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNhbiBvbmx5IHNldCBleHBlY3RhdGlvbnMgb24gbW9jayBvYmplY3RzIik7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGV4cGVjdGF0aW9uLnNldE9iamVjdE1hdGNoZXIobmV3IE1vY2tPYmplY3RNYXRjaGVyKG1vY2tPYmplY3QpKTsKICAgICAgICBpc0Z1bGx5U3BlY2lmaWVkID0gdHJ1ZTsKICAgICAgICAKICAgICAgICBPYmplY3QgY2FwdHVyaW5nSW1wb3N0ZXIgPSAoKENhcHR1cmVDb250cm9sKW1vY2tPYmplY3QpLmNhcHR1cmVFeHBlY3RhdGlvblRvKHRoaXMpOwogICAgICAgIAogICAgICAgIHJldHVybiBhc01vY2tlZFR5cGUobW9ja09iamVjdCwgY2FwdHVyaW5nSW1wb3N0ZXIpOwogICAgfQogICAgCiAgICAvLyBEYW1uIHlvdSBKYXZhIGdlbmVyaWNzISBEYW1uIHlvdSB0byBIRUxMIQogICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCiAgICBwcml2YXRlIDxUPiBUIGFzTW9ja2VkVHlwZShAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgVCBtb2NrT2JqZWN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBjYXB0dXJpbmdJbXBvc3RlcikgCiAgICB7CiAgICAgICAgcmV0dXJuIChUKSBjYXB0dXJpbmdJbXBvc3RlcjsKICAgIH0KICAgIAogICAgcHVibGljIHZvaWQgY3JlYXRlRXhwZWN0YXRpb25Gcm9tKEludm9jYXRpb24gaW52b2NhdGlvbikgewogICAgICAgIGV4cGVjdGF0aW9uLnNldE1ldGhvZE1hdGNoZXIobmV3IE1ldGhvZE1hdGNoZXIoaW52b2NhdGlvbi5nZXRJbnZva2VkTWV0aG9kKCkpKTsKICAgICAgICAKICAgICAgICBpZiAoY2FwdHVyZWRQYXJhbWV0ZXJNYXRjaGVycy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgZXhwZWN0YXRpb24uc2V0UGFyYW1ldGVyc01hdGNoZXIobmV3IFBhcmFtZXRlcnNNYXRjaGVyKGludm9jYXRpb24uZ2V0UGFyYW1ldGVyc0FzQXJyYXkoKSkpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgY2hlY2tQYXJhbWV0ZXJNYXRjaGVyQ291bnQoaW52b2NhdGlvbik7CiAgICAgICAgICAgIGV4cGVjdGF0aW9uLnNldFBhcmFtZXRlcnNNYXRjaGVyKG5ldyBQYXJhbWV0ZXJzTWF0Y2hlcihjYXB0dXJlZFBhcmFtZXRlck1hdGNoZXJzKSk7CiAgICAgICAgfQogICAgfQogICAgCiAgICBwcml2YXRlIHZvaWQgY2hlY2tQYXJhbWV0ZXJNYXRjaGVyQ291bnQoSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB7CiAgICAgICAgaWYgKGNhcHR1cmVkUGFyYW1ldGVyTWF0Y2hlcnMuc2l6ZSgpICE9IGludm9jYXRpb24uZ2V0UGFyYW1ldGVyQ291bnQoKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJub3QgYWxsIHBhcmFtZXRlcnMgd2VyZSBnaXZlbiBleHBsaWNpdCBtYXRjaGVyczogZWl0aGVyIGFsbCBwYXJhbWV0ZXJzIG11c3QgYmUgc3BlY2lmaWVkIGJ5IG1hdGNoZXJzIG9yIGFsbCBtdXN0IGJlIHNwZWNpZmllZCBieSB2YWx1ZXMsIHlvdSBjYW5ub3QgbWl4IG1hdGNoZXJzIGFuZCB2YWx1ZXMiKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHB1YmxpYyB2b2lkIGNoZWNrV2FzRnVsbHlTcGVjaWZpZWQoKSB7CiAgICAgICAgaWYgKCFpc0Z1bGx5U3BlY2lmaWVkKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oImV4cGVjdGF0aW9uIHdhcyBub3QgZnVsbHkgc3BlY2lmaWVkIik7CiAgICAgICAgfQogICAgfQoKICAgIC8qIAogICAgICogU3ludGFjdGljIHN1Z2FyCiAgICAgKi8KICAgIAogICAgcHVibGljIDxUPiBUIG9mKFQgbW9ja09iamVjdCkgewogICAgICAgIHJldHVybiBjYXB0dXJlRXhwZWN0ZWRPYmplY3QobW9ja09iamVjdCk7CiAgICB9CgogICAgcHVibGljIE1ldGhvZENsYXVzZSBvZihNYXRjaGVyPD8+IG9iamVjdE1hdGNoZXIpIHsKICAgICAgICBleHBlY3RhdGlvbi5zZXRPYmplY3RNYXRjaGVyKG9iamVjdE1hdGNoZXIpOwogICAgICAgIGlzRnVsbHlTcGVjaWZpZWQgPSB0cnVlOwogICAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICAgIHB1YmxpYyBQYXJhbWV0ZXJzQ2xhdXNlIG1ldGhvZChNYXRjaGVyPE1ldGhvZD4gbWV0aG9kTWF0Y2hlcikgewogICAgICAgIGV4cGVjdGF0aW9uLnNldE1ldGhvZE1hdGNoZXIobWV0aG9kTWF0Y2hlcik7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICAKICAgIHB1YmxpYyBQYXJhbWV0ZXJzQ2xhdXNlIG1ldGhvZChTdHJpbmcgbmFtZVJlZ2V4KSB7CiAgICAgICAgcmV0dXJuIG1ldGhvZChuZXcgTWV0aG9kTmFtZU1hdGNoZXIobmFtZVJlZ2V4KSk7CiAgICB9CiAgICAKICAgIHB1YmxpYyB2b2lkIHdpdGgoTWF0Y2hlcjw/Pi4uLiBwYXJhbWV0ZXJNYXRjaGVycykgewogICAgICAgIGV4cGVjdGF0aW9uLnNldFBhcmFtZXRlcnNNYXRjaGVyKG5ldyBQYXJhbWV0ZXJzTWF0Y2hlcihBcnJheXMuYXNMaXN0KHBhcmFtZXRlck1hdGNoZXJzKSkpOwogICAgfQogICAgCiAgICBwdWJsaWMgdm9pZCB3aXRoTm9Bcmd1bWVudHMoKSB7CiAgICAgICAgd2l0aCgpOwogICAgfQp9ClBLAwQKAAAAAAAPT9c4tFU0k7ACAACwAgAAOQAAAG9yZy9qbW9jay9pbnRlcm5hbC9JbnZvY2F0aW9uVG9FeHBlY3RhdGlvblRyYW5zbGF0b3IuamF2YXBhY2thZ2Ugb3JnLmptb2NrLmludGVybmFsOwoKaW1wb3J0IG9yZy5qbW9jay5hcGkuQWN0aW9uOwppbXBvcnQgb3JnLmptb2NrLmFwaS5JbnZvY2F0aW9uOwppbXBvcnQgb3JnLmptb2NrLmFwaS5JbnZva2FibGU7CgpwdWJsaWMgY2xhc3MgSW52b2NhdGlvblRvRXhwZWN0YXRpb25UcmFuc2xhdG9yIGltcGxlbWVudHMgSW52b2thYmxlIHsKICAgIHByaXZhdGUgZmluYWwgRXhwZWN0YXRpb25DYXB0dXJlIGNhcHR1cmU7CiAgICBwcml2YXRlIEFjdGlvbiBkZWZhdWx0QWN0aW9uOwogICAgCiAgICBwdWJsaWMgSW52b2NhdGlvblRvRXhwZWN0YXRpb25UcmFuc2xhdG9yKEV4cGVjdGF0aW9uQ2FwdHVyZSBjYXB0dXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb24gZGVmYXVsdEFjdGlvbikgCiAgICB7CiAgICAgICAgdGhpcy5jYXB0dXJlID0gY2FwdHVyZTsKICAgICAgICB0aGlzLmRlZmF1bHRBY3Rpb24gPSBkZWZhdWx0QWN0aW9uOwogICAgfQogICAgCiAgICBwdWJsaWMgT2JqZWN0IGludm9rZShJbnZvY2F0aW9uIGludm9jYXRpb24pIHRocm93cyBUaHJvd2FibGUgewogICAgICAgIGNhcHR1cmUuY3JlYXRlRXhwZWN0YXRpb25Gcm9tKGludm9jYXRpb24pOwogICAgICAgIHJldHVybiBkZWZhdWx0QWN0aW9uLmludm9rZShpbnZvY2F0aW9uKTsKICAgIH0KfQpQSwMECgAAAAAASlV6NoWv2+o+BgAAPgYAACUAAABvcmcvam1vY2svaW50ZXJuYWwvTmFtZWRTZXF1ZW5jZS5qYXZhcGFja2FnZSBvcmcuam1vY2suaW50ZXJuYWw7CgppbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKaW1wb3J0IGphdmEudXRpbC5MaXN0OwoKaW1wb3J0IG9yZy5oYW1jcmVzdC5EZXNjcmlwdGlvbjsKaW1wb3J0IG9yZy5qbW9jay5TZXF1ZW5jZTsKaW1wb3J0IG9yZy5qbW9jay5hcGkuRXhwZWN0YXRpb247CgovKioKICogQSBzZXF1ZW5jZSBvZiBleHBlY3RhdGlvbnMuCiAqIAogKiBJbnZvY2F0aW9ucyBjYW4gYmUgY29uc3RyYWluZWQgdG8gb2NjdXIgaW4gc3RyaWN0IG9yZGVyIGRlZmluZWQgYnkgYSBzZXF1ZW5jZS4KICogCiAqIEBhdXRob3IgbmF0CiAqLwpwdWJsaWMgY2xhc3MgTmFtZWRTZXF1ZW5jZSBpbXBsZW1lbnRzIFNlcXVlbmNlIHsKICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG5hbWU7CiAgICBwcml2YXRlIExpc3Q8RXhwZWN0YXRpb24+IGVsZW1lbnRzID0gbmV3IEFycmF5TGlzdDxFeHBlY3RhdGlvbj4oKTsKICAgIAogICAgcHVibGljIE5hbWVkU2VxdWVuY2UoU3RyaW5nIG5hbWUpIHsKICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgfQogICAgCiAgICBwdWJsaWMgdm9pZCBjb25zdHJhaW5Bc05leHRJblNlcXVlbmNlKEludm9jYXRpb25FeHBlY3RhdGlvbiBleHBlY3RhdGlvbikgewogICAgICAgIGludCBpbmRleCA9IGVsZW1lbnRzLnNpemUoKTsKICAgICAgICBlbGVtZW50cy5hZGQoZXhwZWN0YXRpb24pOwogICAgICAgIGV4cGVjdGF0aW9uLmFkZE9yZGVyaW5nQ29uc3RyYWludChuZXcgSW5TZXF1ZW5jZU9yZGVyaW5nQ29uc3RyYWludCh0aGlzLCBpbmRleCkpOwogICAgfQogICAgCiAgICBwcml2YXRlIGJvb2xlYW4gaXNTYXRpc2ZpZWRUb0luZGV4KGludCBpbmRleCkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXg7IGkrKykgewogICAgICAgICAgICBpZiAoIWVsZW1lbnRzLmdldChpKS5pc1NhdGlzZmllZCgpKSByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgCiAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBJblNlcXVlbmNlT3JkZXJpbmdDb25zdHJhaW50IGltcGxlbWVudHMgT3JkZXJpbmdDb25zdHJhaW50IHsKICAgICAgICBwcml2YXRlIGZpbmFsIE5hbWVkU2VxdWVuY2Ugc2VxdWVuY2U7CiAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgaW5kZXg7CgogICAgICAgIHB1YmxpYyBJblNlcXVlbmNlT3JkZXJpbmdDb25zdHJhaW50KE5hbWVkU2VxdWVuY2Ugc2VxdWVuY2UsIGludCBpbmRleCkgewogICAgICAgICAgICB0aGlzLnNlcXVlbmNlID0gc2VxdWVuY2U7CiAgICAgICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBib29sZWFuIGFsbG93c0ludm9jYXRpb25Ob3coKSB7CiAgICAgICAgICAgIHJldHVybiBzZXF1ZW5jZS5pc1NhdGlzZmllZFRvSW5kZXgoaW5kZXgpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIHZvaWQgZGVzY3JpYmVUbyhEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewogICAgICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRUZXh0KCJpbiBzZXF1ZW5jZSAiKS5hcHBlbmRUZXh0KHNlcXVlbmNlLm5hbWUpOwogICAgICAgIH0KICAgIH0KfQpQSwMECgAAAAAALVvXODozoumKAwAAigMAADYAAABvcmcvam1vY2svaW50ZXJuYWwvT2JqZWN0TWV0aG9kRXhwZWN0YXRpb25Cb3VuY2VyLmphdmFwYWNrYWdlIG9yZy5qbW9jay5pbnRlcm5hbDsKCmltcG9ydCBvcmcuam1vY2suYXBpLkludm9rYWJsZTsKCnB1YmxpYyBjbGFzcyBPYmplY3RNZXRob2RFeHBlY3RhdGlvbkJvdW5jZXIgZXh0ZW5kcyBGYWtlT2JqZWN0TWV0aG9kcyB7CiAgICBwdWJsaWMgT2JqZWN0TWV0aG9kRXhwZWN0YXRpb25Cb3VuY2VyKEludm9rYWJsZSBuZXh0KSB7CiAgICAgICAgc3VwZXIobmV4dCk7CiAgICB9CgogICAgQE92ZXJyaWRlCiAgICBwcm90ZWN0ZWQgYm9vbGVhbiBmYWtlRXF1YWxzKE9iamVjdCBpbnZva2VkT2JqZWN0LCBPYmplY3Qgb3RoZXIpIHsKICAgICAgICB0aHJvdyBjYW5ub3REZWZpbmVFeHBlY3RhdGlvbigpOwogICAgfQoKICAgIEBPdmVycmlkZQogICAgcHJvdGVjdGVkIHZvaWQgZmFrZUZpbmFsaXplKE9iamVjdCBpbnZva2VkT2JqZWN0KSB7CiAgICAgICAgdGhyb3cgY2Fubm90RGVmaW5lRXhwZWN0YXRpb24oKTsKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAgIHByb3RlY3RlZCBpbnQgZmFrZUhhc2hDb2RlKE9iamVjdCBpbnZva2VkT2JqZWN0KSB7CiAgICAgICAgdGhyb3cgY2Fubm90RGVmaW5lRXhwZWN0YXRpb24oKTsKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAgIHByb3RlY3RlZCBTdHJpbmcgZmFrZVRvU3RyaW5nKE9iamVjdCBpbnZva2VkT2JqZWN0KSB7CiAgICAgICAgdGhyb3cgY2Fubm90RGVmaW5lRXhwZWN0YXRpb24oKTsKICAgIH0KICAgIAogICAgcHJpdmF0ZSBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gY2Fubm90RGVmaW5lRXhwZWN0YXRpb24oKSB7CiAgICAgICAgcmV0dXJuIG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInlvdSBjYW5ub3QgZGVmaW5lIGV4cGVjdGF0aW9ucyBmb3IgbWV0aG9kcyBkZWZpbmVkIGJ5IHRoZSBPYmplY3QgY2xhc3MiKTsKICAgIH0KfQpQSwMECgAAAAAA9mE9NleluvSkAAAApAAAACoAAABvcmcvam1vY2svaW50ZXJuYWwvT3JkZXJpbmdDb25zdHJhaW50LmphdmFwYWNrYWdlIG9yZy5qbW9jay5pbnRlcm5hbDsKCmltcG9ydCBvcmcuaGFtY3Jlc3QuU2VsZkRlc2NyaWJpbmc7CgpwdWJsaWMgaW50ZXJmYWNlIE9yZGVyaW5nQ29uc3RyYWludCBleHRlbmRzIFNlbGZEZXNjcmliaW5nIHsKICAgIGJvb2xlYW4gYWxsb3dzSW52b2NhdGlvbk5vdygpOwp9ClBLAwQKAAAAAAAtW9c4QnHLlI8CAACPAgAALQAAAG9yZy9qbW9jay9pbnRlcm5hbC9Qcm94aWVkT2JqZWN0SWRlbnRpdHkuamF2YXBhY2thZ2Ugb3JnLmptb2NrLmludGVybmFsOwoKCmltcG9ydCBvcmcuam1vY2suYXBpLkludm9rYWJsZTsKCnB1YmxpYyBjbGFzcyBQcm94aWVkT2JqZWN0SWRlbnRpdHkgZXh0ZW5kcyBGYWtlT2JqZWN0TWV0aG9kcyB7CiAgICBwdWJsaWMgUHJveGllZE9iamVjdElkZW50aXR5KEludm9rYWJsZSBuZXh0KSB7CiAgICAgICAgc3VwZXIobmV4dCk7CiAgICB9CiAgICAKICAgIEBPdmVycmlkZQogICAgcHJvdGVjdGVkIHZvaWQgZmFrZUZpbmFsaXplKE9iamVjdCBpbnZva2VkT2JqZWN0KSB7CiAgICB9CgogICAgQE92ZXJyaWRlCiAgICBwcm90ZWN0ZWQgYm9vbGVhbiBmYWtlRXF1YWxzKE9iamVjdCBpbnZva2VkT2JqZWN0LCBPYmplY3Qgb3RoZXIpIHsKICAgICAgICByZXR1cm4gb3RoZXIgPT0gaW52b2tlZE9iamVjdDsKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAgIHByb3RlY3RlZCBTdHJpbmcgZmFrZVRvU3RyaW5nKE9iamVjdCBpbnZva2VkT2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRvU3RyaW5nKCk7CiAgICB9CgogICAgQE92ZXJyaWRlCiAgICBwcm90ZWN0ZWQgaW50IGZha2VIYXNoQ29kZShPYmplY3QgaW52b2tlZE9iamVjdCkgewogICAgICAgIHJldHVybiBTeXN0ZW0uaWRlbnRpdHlIYXNoQ29kZShpbnZva2VkT2JqZWN0KTsKICAgIH0KfQpQSwMECgAAAAAAY2X3NkxlRqN0DAAAdAwAADAAAABvcmcvam1vY2svaW50ZXJuYWwvUmV0dXJuRGVmYXVsdFZhbHVlQWN0aW9uLmphdmEvKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQgak1vY2sub3JnCiAqLwpwYWNrYWdlIG9yZy5qbW9jay5pbnRlcm5hbDsKCmltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5BcnJheTsKaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwppbXBvcnQgamF2YS51dGlsLk1hcDsKCmltcG9ydCBvcmcuaGFtY3Jlc3QuRGVzY3JpcHRpb247CmltcG9ydCBvcmcuam1vY2suYXBpLkFjdGlvbjsKaW1wb3J0IG9yZy5qbW9jay5hcGkuSW1wb3N0ZXJpc2VyOwppbXBvcnQgb3JnLmptb2NrLmFwaS5JbnZvY2F0aW9uOwppbXBvcnQgb3JnLmptb2NrLmxpYi5KYXZhUmVmbGVjdGlvbkltcG9zdGVyaXNlcjsKCgovKioKICogUmV0dXJucyBhIHZhbHVlIG9mIHRoZSBpbnZva2VkIG1ldGhvZCdzIHJlc3VsdCB0eXBlLiBSZXR1cm5zIG5vdGhpbmcgZnJvbQogKiB2b2lkIG1ldGhvZHMuIFplcm8gb3IgZmFsc2UgcmVzdWx0cyBhcmUgcmV0dXJuZWQgZm9yIHByaW1pdGl2ZSB0eXBlcy4gQXJyYXlzCiAqIGFuZCBzdHJpbmdzIGFyZSByZXR1cm5lZCB3aXRoIGEgbGVuZ3RoIG9mIHplcm8uIFR5cGVzIHRoYXQgY2FuIGJlCiAqIGltcG9zdGVyaXNlZCBieSB0aGUgYWN0aW9uJ3Mge0BsaW5rIEltcG9zdGVyaXNlcn0gYXJlIHJldHVybmVkIGFzIDxhCiAqIGhyZWY9Imh0dHA6Ly93d3cuYzIuY29tL2NnaS93aWtpP051bGxPYmplY3QiPk51bGwgT2JqZWN0czwvYT4uIE90aGVyd2lzZQogKiA8Y29kZT5udWxsPC9jb2RlPiBpcyByZXR1cm5lZC4gVGhlIGRlZmF1bHQgdmFsdWUgY2FuIGJlIG92ZXJyaWRkZW4gZm9yCiAqIHNwZWNpZmljIHR5cGVzLgogKiAKICogQGF1dGhvciBuYXQKICovCnB1YmxpYyBjbGFzcyBSZXR1cm5EZWZhdWx0VmFsdWVBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb24gewogICAgcHJpdmF0ZSBmaW5hbCBNYXA8Q2xhc3M8Pz4sIE9iamVjdD4gcmVzdWx0VmFsdWVzQnlUeXBlID0gbmV3IEhhc2hNYXA8Q2xhc3M8Pz4sIE9iamVjdD4oKTsKICAgIHByaXZhdGUgSW1wb3N0ZXJpc2VyIGltcG9zdGVyaXNlcjsKCiAgICBwdWJsaWMgUmV0dXJuRGVmYXVsdFZhbHVlQWN0aW9uKEltcG9zdGVyaXNlciBpbXBvc3RlcmlzZXIpIHsKICAgICAgICB0aGlzLmltcG9zdGVyaXNlciA9IGltcG9zdGVyaXNlcjsKICAgICAgICBjcmVhdGVEZWZhdWx0UmVzdWx0cygpOwogICAgfQoKICAgIHB1YmxpYyBSZXR1cm5EZWZhdWx0VmFsdWVBY3Rpb24oKSB7CiAgICAgICAgdGhpcyhuZXcgSmF2YVJlZmxlY3Rpb25JbXBvc3RlcmlzZXIoKSk7CiAgICB9CiAgICAKICAgIHB1YmxpYyB2b2lkIHNldEltcG9zdGVyaXNlcihJbXBvc3RlcmlzZXIgbmV3SW1wb3N0ZXJpc2VyKSB7CiAgICAgICAgdGhpcy5pbXBvc3RlcmlzZXIgPSBuZXdJbXBvc3RlcmlzZXI7CiAgICB9CiAgICAKICAgIHB1YmxpYyB2b2lkIGRlc2NyaWJlVG8oRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRUZXh0KCJyZXR1cm5zIGEgZGVmYXVsdCB2YWx1ZSIpOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIGFkZFJlc3VsdChDbGFzczw/PiByZXN1bHRUeXBlLCBPYmplY3QgcmVzdWx0VmFsdWUpIHsKICAgICAgICByZXN1bHRWYWx1ZXNCeVR5cGUucHV0KHJlc3VsdFR5cGUsIHJlc3VsdFZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgT2JqZWN0IGludm9rZShJbnZvY2F0aW9uIGludm9jYXRpb24pIHRocm93cyBUaHJvd2FibGUgewogICAgICAgIENsYXNzPD8+IHJldHVyblR5cGUgPSBpbnZvY2F0aW9uLmdldEludm9rZWRNZXRob2QoKS5nZXRSZXR1cm5UeXBlKCk7CgogICAgICAgIGlmIChyZXN1bHRWYWx1ZXNCeVR5cGUuY29udGFpbnNLZXkocmV0dXJuVHlwZSkpIHsKICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFZhbHVlc0J5VHlwZS5nZXQocmV0dXJuVHlwZSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHJldHVyblR5cGUuaXNBcnJheSgpKSB7CiAgICAgICAgICAgIHJldHVybiBBcnJheS5uZXdJbnN0YW5jZShyZXR1cm5UeXBlLmdldENvbXBvbmVudFR5cGUoKSwgMCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGltcG9zdGVyaXNlci5jYW5JbXBvc3RlcmlzZShyZXR1cm5UeXBlKSkgewogICAgICAgICAgICByZXR1cm4gaW1wb3N0ZXJpc2VyLmltcG9zdGVyaXNlKHRoaXMsIHJldHVyblR5cGUpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgfQoKICAgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZURlZmF1bHRSZXN1bHRzKCkgewogICAgICAgIGFkZFJlc3VsdChib29sZWFuLmNsYXNzLCBCb29sZWFuLkZBTFNFKTsKICAgICAgICBhZGRSZXN1bHQodm9pZC5jbGFzcywgbnVsbCk7CiAgICAgICAgYWRkUmVzdWx0KGJ5dGUuY2xhc3MsIG5ldyBCeXRlKChieXRlKTApKTsKICAgICAgICBhZGRSZXN1bHQoc2hvcnQuY2xhc3MsIG5ldyBTaG9ydCgoc2hvcnQpMCkpOwogICAgICAgIGFkZFJlc3VsdChpbnQuY2xhc3MsIG5ldyBJbnRlZ2VyKDApKTsKICAgICAgICBhZGRSZXN1bHQobG9uZy5jbGFzcywgbmV3IExvbmcoMEwpKTsKICAgICAgICBhZGRSZXN1bHQoY2hhci5jbGFzcywgbmV3IENoYXJhY3RlcignXDAnKSk7CiAgICAgICAgYWRkUmVzdWx0KGZsb2F0LmNsYXNzLCBuZXcgRmxvYXQoMC4wRikpOwogICAgICAgIGFkZFJlc3VsdChkb3VibGUuY2xhc3MsIG5ldyBEb3VibGUoMC4wKSk7CiAgICAgICAgYWRkUmVzdWx0KEJvb2xlYW4uY2xhc3MsIEJvb2xlYW4uRkFMU0UpOwogICAgICAgIGFkZFJlc3VsdChCeXRlLmNsYXNzLCBuZXcgQnl0ZSgoYnl0ZSkwKSk7CiAgICAgICAgYWRkUmVzdWx0KFNob3J0LmNsYXNzLCBuZXcgU2hvcnQoKHNob3J0KTApKTsKICAgICAgICBhZGRSZXN1bHQoSW50ZWdlci5jbGFzcywgbmV3IEludGVnZXIoMCkpOwogICAgICAgIGFkZFJlc3VsdChMb25nLmNsYXNzLCBuZXcgTG9uZygwTCkpOwogICAgICAgIGFkZFJlc3VsdChDaGFyYWN0ZXIuY2xhc3MsIG5ldyBDaGFyYWN0ZXIoJ1wwJykpOwogICAgICAgIGFkZFJlc3VsdChGbG9hdC5jbGFzcywgbmV3IEZsb2F0KDAuMEYpKTsKICAgICAgICBhZGRSZXN1bHQoRG91YmxlLmNsYXNzLCBuZXcgRG91YmxlKDAuMCkpOwogICAgICAgIGFkZFJlc3VsdChTdHJpbmcuY2xhc3MsICIiKTsKICAgICAgICBhZGRSZXN1bHQoT2JqZWN0LmNsYXNzLCBuZXcgT2JqZWN0KCkpOwogICAgfQp9ClBLAwQKAAAAAACqZOM4EYb5U+kJAADpCQAALAAAAG9yZy9qbW9jay9pbnRlcm5hbC9TZWFyY2hpbmdDbGFzc0xvYWRlci5qYXZhcGFja2FnZSBvcmcuam1vY2suaW50ZXJuYWw7CgppbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuVGhyZWFkLmN1cnJlbnRUaHJlYWQ7CgoKcHVibGljIGNsYXNzIFNlYXJjaGluZ0NsYXNzTG9hZGVyIGV4dGVuZHMgQ2xhc3NMb2FkZXIgewogICAgcHJpdmF0ZSBmaW5hbCBDbGFzc0xvYWRlciBuZXh0VG9TZWFyY2g7CiAgICAKICAgIHB1YmxpYyBTZWFyY2hpbmdDbGFzc0xvYWRlcihDbGFzc0xvYWRlciBwYXJlbnQsIENsYXNzTG9hZGVyIG5leHRUb1NlYXJjaCkgewogICAgICAgIHN1cGVyKHBhcmVudCk7CiAgICAgICAgdGhpcy5uZXh0VG9TZWFyY2ggPSBuZXh0VG9TZWFyY2g7CiAgICB9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgQ2xhc3NMb2FkZXIgY29tYmluZShDbGFzc0xvYWRlci4uLiBwYXJlbnRMb2FkZXJzKSB7CiAgICAgICAgcmV0dXJuIGNvbWJpbmUoQXJyYXlzLmFzTGlzdChwYXJlbnRMb2FkZXJzKSk7CiAgICB9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgQ2xhc3NMb2FkZXIgY29tYmluZShMaXN0PENsYXNzTG9hZGVyPiBwYXJlbnRMb2FkZXJzKSB7CiAgICAgICAgQ2xhc3NMb2FkZXIgbG9hZGVyID0gcGFyZW50TG9hZGVycy5nZXQocGFyZW50TG9hZGVycy5zaXplKCktMSk7CiAgICAgICAgCiAgICAgICAgZm9yIChpbnQgaSA9IHBhcmVudExvYWRlcnMuc2l6ZSgpLTI7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgIGxvYWRlciA9IG5ldyBTZWFyY2hpbmdDbGFzc0xvYWRlcihwYXJlbnRMb2FkZXJzLmdldChpKSwgbG9hZGVyKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIGxvYWRlcjsKICAgIH0KICAgIAogICAgcHVibGljIHN0YXRpYyBDbGFzc0xvYWRlciBjb21iaW5lTG9hZGVyc09mKENsYXNzPD8+Li4uIGNsYXNzZXMpIHsKICAgICAgICByZXR1cm4gY29tYmluZUxvYWRlcnNPZihjbGFzc2VzWzBdLCBjbGFzc2VzKTsKICAgIH0KICAgIAogICAgcHVibGljIHN0YXRpYyBDbGFzc0xvYWRlciBjb21iaW5lTG9hZGVyc09mKENsYXNzPD8+IGZpcnN0LCBDbGFzczw/Pi4uLiBvdGhlcnMpIHsKICAgICAgICBMaXN0PENsYXNzTG9hZGVyPiBsb2FkZXJzID0gbmV3IEFycmF5TGlzdDxDbGFzc0xvYWRlcj4oKTsKICAgICAgICAKICAgICAgICBhZGRJZk5ld0VsZW1lbnQobG9hZGVycywgZmlyc3QuZ2V0Q2xhc3NMb2FkZXIoKSk7CiAgICAgICAgZm9yIChDbGFzczw/PiBjIDogb3RoZXJzKSB7CiAgICAgICAgICAgIGFkZElmTmV3RWxlbWVudChsb2FkZXJzLCBjLmdldENsYXNzTG9hZGVyKCkpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBUbyBzdXBwb3J0IEVjbGlwc2UgUGx1Zy1pbiB0ZXN0cy4KICAgICAgICAvLyBJbiBhbiBFY2xpcHNlIHBsdWctaW4sIGpNb2NrIGl0c2VsZiB3aWxsIG5vdCBiZSBvbiB0aGUgc3lzdGVtIGNsYXNzIGxvYWRlcgogICAgICAgIC8vIGJ1dCBpbiB0aGUgY2xhc3MgbG9hZGVyIG9mIHRoZSBwbHVnLWluLgogICAgICAgIC8vCiAgICAgICAgLy8gTm90ZTogSSd2ZSBiZWVuIHVuYWJsZSB0byByZXByb2R1Y2UgdGhlIGVycm9yIGluIGpNb2NrJ3MgdGVzdCBzdWl0ZS4KICAgICAgICBhZGRJZk5ld0VsZW1lbnQobG9hZGVycywgU2VhcmNoaW5nQ2xhc3NMb2FkZXIuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7CiAgICAgICAgCiAgICAgICAgLy8gVG8gc3VwcG9ydCB0aGUgTWF2ZW4gU3VyZWZpcmUgcGx1Z2luLgogICAgICAgIC8vIE5vdGU6IEkndmUgYmVlbiB1bmFibGUgdG8gcmVwcm9kdWNlIHRoZSBlcnJvciBpbiBqTW9jaydzIHRlc3Qgc3VpdGUuCiAgICAgICAgYWRkSWZOZXdFbGVtZW50KGxvYWRlcnMsIGN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKSk7CiAgICAgICAgCiAgICAgICAgYWRkSWZOZXdFbGVtZW50KGxvYWRlcnMsIENsYXNzTG9hZGVyLmdldFN5c3RlbUNsYXNzTG9hZGVyKCkpOwogICAgICAgIAogICAgICAgIHJldHVybiBjb21iaW5lKGxvYWRlcnMpOwogICAgfQogICAgCiAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFkZElmTmV3RWxlbWVudChMaXN0PENsYXNzTG9hZGVyPiBsb2FkZXJzLCBDbGFzc0xvYWRlciBjKSB7CiAgICAgICAgaWYgKGMgIT0gbnVsbCAmJiAhbG9hZGVycy5jb250YWlucyhjKSkgewogICAgICAgICAgICBsb2FkZXJzLmFkZChjKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIEBPdmVycmlkZQogICAgcHJvdGVjdGVkIENsYXNzPD8+IGZpbmRDbGFzcyhTdHJpbmcgbmFtZSkgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gewogICAgICAgIGlmIChuZXh0VG9TZWFyY2ggIT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gbmV4dFRvU2VhcmNoLmxvYWRDbGFzcyhuYW1lKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBzdXBlci5maW5kQ2xhc3MobmFtZSk7IC8vIHdpbGwgdGhyb3cgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbgogICAgICAgIH0KICAgIH0KfQpQSwMECgAAAAAAdEhiNnFElzVAAQAAQAEAACIAAABvcmcvam1vY2svaW50ZXJuYWwvU2lkZUVmZmVjdC5qYXZhcGFja2FnZSBvcmcuam1vY2suaW50ZXJuYWw7CgppbXBvcnQgb3JnLmhhbWNyZXN0LlNlbGZEZXNjcmliaW5nOwppbXBvcnQgb3JnLmptb2NrLmFwaS5BY3Rpb247CgovKioKICogQW4gZXhwZWN0YXRpb24gaGFzIG9uZSB7QGxpbmsgQWN0aW9ufSBidXQgY2FuIGhhdmUgemVybyBvciBtb3JlIFNpZGVFZmZlY3RzCiAqIHRoYXQgYXJlIHRyaWdnZXJlZCBiZWZvcmUgdGhlIEFjdGlvbi4KICogCiAqIEBhdXRob3IgbmF0CiAqCiAqLwpwdWJsaWMgaW50ZXJmYWNlIFNpZGVFZmZlY3QgZXh0ZW5kcyBTZWxmRGVzY3JpYmluZyB7CiAgICB2b2lkIHBlcmZvcm0oKTsKfQpQSwMECgAAAAAAdEhiNrxo5pBkAAAAZAAAAB0AAABvcmcvam1vY2svaW50ZXJuYWwvU3RhdGUuamF2YXBhY2thZ2Ugb3JnLmptb2NrLmludGVybmFsOwoKcHVibGljIGludGVyZmFjZSBTdGF0ZSBleHRlbmRzIFN0YXRlUHJlZGljYXRlIHsKICAgIHZvaWQgYWN0aXZhdGUoKTsKfQpQSwMECgAAAAAAsWQvOJpFobTvBQAA7wUAACQAAABvcmcvam1vY2svaW50ZXJuYWwvU3RhdGVNYWNoaW5lLmphdmFwYWNrYWdlIG9yZy5qbW9jay5pbnRlcm5hbDsKCmltcG9ydCBvcmcuaGFtY3Jlc3QuRGVzY3JpcHRpb247CmltcG9ydCBvcmcuam1vY2suU3RhdGVzOwoKcHVibGljIGNsYXNzIFN0YXRlTWFjaGluZSBpbXBsZW1lbnRzIFN0YXRlcyB7CiAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBuYW1lOwogICAgcHJpdmF0ZSBTdHJpbmcgY3VycmVudFN0YXRlID0gbnVsbDsKICAgIAogICAgcHVibGljIFN0YXRlTWFjaGluZShTdHJpbmcgbmFtZSkgewogICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICB9CiAgICAKICAgIHB1YmxpYyBTdGF0ZXMgc3RhcnRzQXMoU3RyaW5nIGluaXRpYWxTdGF0ZSkgewogICAgICAgIGJlY29tZShpbml0aWFsU3RhdGUpOwogICAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgCiAgICBwdWJsaWMgdm9pZCBiZWNvbWUoU3RyaW5nIG5leHRTdGF0ZSkgewogICAgICAgIGN1cnJlbnRTdGF0ZSA9IG5leHRTdGF0ZTsKICAgIH0KCiAgICBwdWJsaWMgU3RhdGUgaXMoZmluYWwgU3RyaW5nIHN0YXRlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBTdGF0ZSgpIHsKICAgICAgICAgICAgcHVibGljIHZvaWQgYWN0aXZhdGUoKSB7CiAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBzdGF0ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gaXNBY3RpdmUoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuZXF1YWxzKGN1cnJlbnRTdGF0ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRlc2NyaWJlVG8oRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFRleHQobmFtZSkuYXBwZW5kVGV4dCgiIGlzICIpLmFwcGVuZFRleHQoc3RhdGUpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0KICAgIAogICAgcHVibGljIFN0YXRlUHJlZGljYXRlIGlzTm90KGZpbmFsIFN0cmluZyBzdGF0ZSkgewogICAgICAgIHJldHVybiBuZXcgU3RhdGVQcmVkaWNhdGUoKSB7CiAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGlzQWN0aXZlKCkgewogICAgICAgICAgICAgICAgcmV0dXJuICFzdGF0ZS5lcXVhbHMoY3VycmVudFN0YXRlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHVibGljIHZvaWQgZGVzY3JpYmVUbyhEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24uYXBwZW5kVGV4dChuYW1lKS5hcHBlbmRUZXh0KCIgaXMgbm90ICIpLmFwcGVuZFRleHQoc3RhdGUpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0KICAgIAogICAgcHVibGljIHZvaWQgZGVzY3JpYmVUbyhEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFRleHQobmFtZSkKICAgICAgICAgICAgICAgICAgIC5hcHBlbmRUZXh0KGN1cnJlbnRTdGF0ZSA9PSBudWxsID8gIiBoYXMgbm8gY3VycmVudCBzdGF0ZSIgOiAoIiBpcyAiICsgY3VycmVudFN0YXRlKSk7CiAgICB9Cn0KUEsDBAoAAAAAAHRIYjaj/K80lQAAAJUAAAAmAAAAb3JnL2ptb2NrL2ludGVybmFsL1N0YXRlUHJlZGljYXRlLmphdmFwYWNrYWdlIG9yZy5qbW9jay5pbnRlcm5hbDsKCmltcG9ydCBvcmcuaGFtY3Jlc3QuU2VsZkRlc2NyaWJpbmc7CgpwdWJsaWMgaW50ZXJmYWNlIFN0YXRlUHJlZGljYXRlIGV4dGVuZHMgU2VsZkRlc2NyaWJpbmcgewogICAgYm9vbGVhbiBpc0FjdGl2ZSgpOwp9ClBLAwQKAAAAAABzmd42PCqARmICAABiAgAALQAAAG9yZy9qbW9jay9pbnRlcm5hbC9tYXRjaGVyL01ldGhvZE1hdGNoZXIuamF2YXBhY2thZ2Ugb3JnLmptb2NrLmludGVybmFsLm1hdGNoZXI7CgppbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwoKaW1wb3J0IG9yZy5oYW1jcmVzdC5EZXNjcmlwdGlvbjsKaW1wb3J0IG9yZy5oYW1jcmVzdC5UeXBlU2FmZU1hdGNoZXI7CgpwdWJsaWMgY2xhc3MgTWV0aG9kTWF0Y2hlciBleHRlbmRzIFR5cGVTYWZlTWF0Y2hlcjxNZXRob2Q+IHsKICAgIHByaXZhdGUgTWV0aG9kIGV4cGVjdGVkTWV0aG9kOwogICAgCiAgICBwdWJsaWMgTWV0aG9kTWF0Y2hlcihNZXRob2QgZXhwZWN0ZWRNZXRob2QpIHsKICAgICAgICBzdXBlcihNZXRob2QuY2xhc3MpOwogICAgICAgIHRoaXMuZXhwZWN0ZWRNZXRob2QgPSBleHBlY3RlZE1ldGhvZDsKICAgIH0KICAgIAogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgYm9vbGVhbiBtYXRjaGVzU2FmZWx5KE1ldGhvZCBtKSB7CiAgICAgICAgcmV0dXJuIGV4cGVjdGVkTWV0aG9kLmVxdWFscyhtKTsKICAgIH0KICAgIAogICAgcHVibGljIHZvaWQgZGVzY3JpYmVUbyhEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFRleHQoZXhwZWN0ZWRNZXRob2QuZ2V0TmFtZSgpKTsKICAgIH0KfQpQSwMECgAAAAAA9mE9NguINtGHAgAAhwIAADEAAABvcmcvam1vY2svaW50ZXJuYWwvbWF0Y2hlci9NZXRob2ROYW1lTWF0Y2hlci5qYXZhLyoqCiAqIAogKi8KcGFja2FnZSBvcmcuam1vY2suaW50ZXJuYWwubWF0Y2hlcjsKCmltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7CmltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKCmltcG9ydCBvcmcuaGFtY3Jlc3QuRGVzY3JpcHRpb247CmltcG9ydCBvcmcuaGFtY3Jlc3QuVHlwZVNhZmVNYXRjaGVyOwoKcHVibGljIGNsYXNzIE1ldGhvZE5hbWVNYXRjaGVyIGV4dGVuZHMgVHlwZVNhZmVNYXRjaGVyPE1ldGhvZD4gewogICAgUGF0dGVybiBuYW1lUGF0dGVybjsKICAgIAogICAgcHVibGljIE1ldGhvZE5hbWVNYXRjaGVyKFN0cmluZyBuYW1lUmVnZXgpIHsKICAgICAgICBuYW1lUGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZShuYW1lUmVnZXgpOwogICAgfQogICAgCiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyBib29sZWFuIG1hdGNoZXNTYWZlbHkoTWV0aG9kIG1ldGhvZCkgewogICAgICAgIHJldHVybiBuYW1lUGF0dGVybi5tYXRjaGVyKG1ldGhvZC5nZXROYW1lKCkpLm1hdGNoZXMoKTsKICAgIH0KICAgIAogICAgcHVibGljIHZvaWQgZGVzY3JpYmVUbyhEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFRleHQobmFtZVBhdHRlcm4udG9TdHJpbmcoKSk7CiAgICB9Cn1QSwMECgAAAAAA9mE9NtJfc6HvAQAA7wEAADEAAABvcmcvam1vY2svaW50ZXJuYWwvbWF0Y2hlci9Nb2NrT2JqZWN0TWF0Y2hlci5qYXZhcGFja2FnZSBvcmcuam1vY2suaW50ZXJuYWwubWF0Y2hlcjsKCmltcG9ydCBvcmcuaGFtY3Jlc3QuQmFzZU1hdGNoZXI7CmltcG9ydCBvcmcuaGFtY3Jlc3QuRGVzY3JpcHRpb247CgpwdWJsaWMgY2xhc3MgTW9ja09iamVjdE1hdGNoZXIgZXh0ZW5kcyBCYXNlTWF0Y2hlcjxPYmplY3Q+IHsKICAgIHByaXZhdGUgT2JqZWN0IG1vY2tPYmplY3Q7CiAgICAKICAgIHB1YmxpYyBNb2NrT2JqZWN0TWF0Y2hlcihPYmplY3QgbW9ja09iamVjdCkgewogICAgICAgIHRoaXMubW9ja09iamVjdCA9IG1vY2tPYmplY3Q7CiAgICB9CiAgICAKICAgIHB1YmxpYyBib29sZWFuIG1hdGNoZXMoT2JqZWN0IG8pIHsKICAgICAgICByZXR1cm4gbyA9PSBtb2NrT2JqZWN0OwogICAgfQoKICAgIHB1YmxpYyB2b2lkIGRlc2NyaWJlVG8oRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRUZXh0KG1vY2tPYmplY3QudG9TdHJpbmcoKSk7CiAgICB9Cn0KUEsDBAoAAAAAAPZhPTaWXxcACQQAAAkEAAAxAAAAb3JnL2ptb2NrL2ludGVybmFsL21hdGNoZXIvUGFyYW1ldGVyc01hdGNoZXIuamF2YXBhY2thZ2Ugb3JnLmptb2NrLmludGVybmFsLm1hdGNoZXI7CgppbXBvcnQgamF2YS51dGlsLkxpc3Q7CgppbXBvcnQgb3JnLmhhbWNyZXN0Lk1hdGNoZXI7CmltcG9ydCBvcmcuaGFtY3Jlc3QuY29sbGVjdGlvbi5Jc0FycmF5OwppbXBvcnQgb3JnLmhhbWNyZXN0LmNvcmUuSXNFcXVhbDsKCnB1YmxpYyBjbGFzcyBQYXJhbWV0ZXJzTWF0Y2hlciBleHRlbmRzIElzQXJyYXk8T2JqZWN0PiB7CiAgICBwdWJsaWMgUGFyYW1ldGVyc01hdGNoZXIoT2JqZWN0W10gZXhwZWN0ZWRWYWx1ZXMpIHsKICAgICAgICBzdXBlcihlcXVhbE1hdGNoZXJzRm9yKGV4cGVjdGVkVmFsdWVzKSk7CiAgICB9CiAgICAKICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQogICAgcHJpdmF0ZSBzdGF0aWMgTWF0Y2hlcjxPYmplY3Q+W10gZXF1YWxNYXRjaGVyc0ZvcihPYmplY3RbXSBleHBlY3RlZFZhbHVlcykgewogICAgICAgIE1hdGNoZXI8T2JqZWN0PltdIG1hdGNoZXJzID0gbmV3IE1hdGNoZXJbZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoXTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIG1hdGNoZXJzW2ldID0gbmV3IElzRXF1YWw8T2JqZWN0PihleHBlY3RlZFZhbHVlc1tpXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBtYXRjaGVyczsKICAgIH0KICAgIAogICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCiAgICBwdWJsaWMgUGFyYW1ldGVyc01hdGNoZXIoTGlzdDxNYXRjaGVyPD8+PiBwYXJhbWV0ZXJNYXRjaGVycykgewogICAgICAgIHN1cGVyKHBhcmFtZXRlck1hdGNoZXJzLnRvQXJyYXkobmV3IE1hdGNoZXJbMF0pKTsKICAgIH0KCiAgICBAT3ZlcnJpZGUKICAgIHByb3RlY3RlZCBTdHJpbmcgZGVzY3JpcHRpb25TdGFydCgpIHsKICAgICAgICByZXR1cm4gIigiOwogICAgfQogICAgCiAgICBAT3ZlcnJpZGUKICAgIHByb3RlY3RlZCBTdHJpbmcgZGVzY3JpcHRpb25FbmQoKSB7CiAgICAgICAgcmV0dXJuICIpIjsKICAgIH0KfQpQSwMECgAAAAAA2155NWjrGQzKAgAAygIAACsAAABvcmcvam1vY2svbGliL0Fzc2VydGlvbkVycm9yVHJhbnNsYXRvci5qYXZhcGFja2FnZSBvcmcuam1vY2subGliOwoKaW1wb3J0IG9yZy5oYW1jcmVzdC5TdHJpbmdEZXNjcmlwdGlvbjsKaW1wb3J0IG9yZy5qbW9jay5hcGkuRXhwZWN0YXRpb25FcnJvcjsKaW1wb3J0IG9yZy5qbW9jay5hcGkuRXhwZWN0YXRpb25FcnJvclRyYW5zbGF0b3I7CgovKioKICogVHJhbnNsYXRlcyB7QGxpbmsgb3JnLmptb2NrLmFwaS5FeHBlY3RhdGlvbkVycm9yfXMgaW50bwogKiB7QGxpbmsgamF2YS5sYW5nLkFzc2VydGlvbkVycm9yfXMgdGhhdCBzZXZlcmFsCiAqIHRlc3QgZnJhbWV3b3JrcywgaW5jbHVkaW5nIEpVbml0IDQgYW5kIFRlc3RORywgdXNlIHRvIHJlcG9ydAogKiBlcnJvcnMuCiAqIAogKiBAYXV0aG9yIG5wcnljZQogKgogKi8KcHVibGljIGNsYXNzIEFzc2VydGlvbkVycm9yVHJhbnNsYXRvciBpbXBsZW1lbnRzIEV4cGVjdGF0aW9uRXJyb3JUcmFuc2xhdG9yIHsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQXNzZXJ0aW9uRXJyb3JUcmFuc2xhdG9yIElOU1RBTkNFID0gbmV3IEFzc2VydGlvbkVycm9yVHJhbnNsYXRvcigpOwogICAgCiAgICBwdWJsaWMgRXJyb3IgdHJhbnNsYXRlKEV4cGVjdGF0aW9uRXJyb3IgZSkgewogICAgICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uRXJyb3IoU3RyaW5nRGVzY3JpcHRpb24udG9TdHJpbmcoZSkpOwogICAgfQogICAgCiAgICBwcml2YXRlIEFzc2VydGlvbkVycm9yVHJhbnNsYXRvcigpIHt9Cn0KUEsDBAoAAAAAADpmWDbIk0VpZQUAAGUFAAAoAAAAb3JnL2ptb2NrL2xpYi9DYW1lbENhc2VOYW1pbmdTY2hlbWUuamF2YXBhY2thZ2Ugb3JnLmptb2NrLmxpYjsKCmltcG9ydCBvcmcuam1vY2suYXBpLk1vY2tPYmplY3ROYW1pbmdTY2hlbWU7CgovKioKICogQSBuYW1pbmcgc2NoZW1lIGluIHdoaWNoIHRoZSBpbXBsaWNpdCBuYW1lIGZvciBhIG1vY2sgb2JqZWN0IGlzCiAqIHRoZSBtb2NrZWQgdHlwZSdzIG5hbWUgd2l0aCB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIGxvd2VyIGNhc2UuCiAqIEUuZy4gQSBtb2NrIG9iamVjdCBvZiB0eXBlIEhlbGxvV29ybGQgd291bGQgYmUgbmFtZWQgImhlbGxvV29ybGQiLgogKiBJbml0aWFsIGFjcm9ueW1zIGFyZSBjb21wbGV0ZWx5IGxvd2VyY2FzZWQuICBGb3IgZXhhbXBsZSwgdGhlIHR5cGUKICogSFRUUENsaWVudCB3b3VsZCBiZSBuYW1lZCBodHRwQ2xpZW50LgogKiAKICogVGhpcyBpcyB0aGUgbmFtaW5nIHNjaGVtZSB1c2VkIGJ5IGRlZmF1bHQuCiAqIAogKiBAYXV0aG9yIG5wcnljZQogKi8KcHVibGljIGNsYXNzIENhbWVsQ2FzZU5hbWluZ1NjaGVtZSBpbXBsZW1lbnRzIE1vY2tPYmplY3ROYW1pbmdTY2hlbWUgewogICAgcHVibGljIHN0YXRpYyBmaW5hbCBDYW1lbENhc2VOYW1pbmdTY2hlbWUgSU5TVEFOQ0UgPSBuZXcgQ2FtZWxDYXNlTmFtaW5nU2NoZW1lKCk7CiAgICAKICAgIHB1YmxpYyBTdHJpbmcgZGVmYXVsdE5hbWVGb3IoQ2xhc3M8Pz4gdHlwZVRvTW9jaykgewogICAgICAgIFN0cmluZyBzaW1wbGVOYW1lID0gdHlwZVRvTW9jay5nZXRTaW1wbGVOYW1lKCk7CiAgICAgICAgaW50IGxjaSA9IGluZGV4T2ZGaXJzdExvd2VyQ2FzZUxldHRlcihzaW1wbGVOYW1lKTsKICAgICAgICAKICAgICAgICBpZiAobGNpID09IDApIHsKICAgICAgICAgICAgcmV0dXJuIHNpbXBsZU5hbWU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGludCBjYXBzRW5kID0gKGxjaSA9PSAxIHx8IGxjaSA9PSBzaW1wbGVOYW1lLmxlbmd0aCgpKSA/IGxjaSA6IGxjaSAtIDE7CiAgICAgICAgCiAgICAgICAgU3RyaW5nIGNhcHMgPSBzaW1wbGVOYW1lLnN1YnN0cmluZygwLCBjYXBzRW5kKTsKICAgICAgICBTdHJpbmcgcmVzdCA9IHNpbXBsZU5hbWUuc3Vic3RyaW5nKGNhcHNFbmQpOwogICAgICAgIAogICAgICAgIHJldHVybiBjYXBzLnRvTG93ZXJDYXNlKCkgKyByZXN0OwogICAgfQoKICAgIHByaXZhdGUgaW50IGluZGV4T2ZGaXJzdExvd2VyQ2FzZUxldHRlcihTdHJpbmcgc2ltcGxlTmFtZSkgewogICAgICAgIGludCBpID0gMDsKICAgICAgICAKICAgICAgICB3aGlsZSAoaSA8IHNpbXBsZU5hbWUubGVuZ3RoKCkgJiYgIUNoYXJhY3Rlci5pc0xvd2VyQ2FzZShzaW1wbGVOYW1lLmNoYXJBdChpKSkpIHsKICAgICAgICAgICAgaSsrOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gaTsKICAgIH0KfQpQSwMECgAAAAAAcq1FNgudIP5pAgAAaQIAADUAAABvcmcvam1vY2svbGliL0lkZW50aXR5RXhwZWN0YXRpb25FcnJvclRyYW5zbGF0b3IuamF2YXBhY2thZ2Ugb3JnLmptb2NrLmxpYjsKCmltcG9ydCBvcmcuam1vY2suYXBpLkV4cGVjdGF0aW9uRXJyb3I7CmltcG9ydCBvcmcuam1vY2suYXBpLkV4cGVjdGF0aW9uRXJyb3JUcmFuc2xhdG9yOwoKLyoqCiAqIEFuIHtAbGluayBFeHBlY3RhdGlvbkVycm9yVHJhbnNsYXRvcn0gdGhhdCBkb2Vzbid0IGRvIGFueSB0cmFuc2xhdGlvbi4gIAogKiBJdCByZXR1cm5zIHRoZSB7QGxpbmsgRXhwZWN0YXRpb25FcnJvcn0gaXQgaXMgZ2l2ZW4uCiAqIAogKiBAYXV0aG9yIG5hdAogKiAKICovCnB1YmxpYyBjbGFzcyBJZGVudGl0eUV4cGVjdGF0aW9uRXJyb3JUcmFuc2xhdG9yIGltcGxlbWVudHMKICAgIEV4cGVjdGF0aW9uRXJyb3JUcmFuc2xhdG9yCnsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgSWRlbnRpdHlFeHBlY3RhdGlvbkVycm9yVHJhbnNsYXRvciBJTlNUQU5DRSA9IG5ldyBJZGVudGl0eUV4cGVjdGF0aW9uRXJyb3JUcmFuc2xhdG9yKCk7CiAgICAKICAgIHByaXZhdGUgSWRlbnRpdHlFeHBlY3RhdGlvbkVycm9yVHJhbnNsYXRvcigpIHt9CiAgICAKICAgIHB1YmxpYyBFcnJvciB0cmFuc2xhdGUoRXhwZWN0YXRpb25FcnJvciBlKSB7CiAgICAgICAgcmV0dXJuIGU7CiAgICB9Cn0KUEsDBAoAAAAAACCfBDfDbrjKUQYAAFEGAAAtAAAAb3JnL2ptb2NrL2xpYi9KYXZhUmVmbGVjdGlvbkltcG9zdGVyaXNlci5qYXZhcGFja2FnZSBvcmcuam1vY2subGliOwoKaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25IYW5kbGVyOwppbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwppbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuUHJveHk7CgppbXBvcnQgb3JnLmptb2NrLmFwaS5JbXBvc3RlcmlzZXI7CmltcG9ydCBvcmcuam1vY2suYXBpLkludm9jYXRpb247CmltcG9ydCBvcmcuam1vY2suYXBpLkludm9rYWJsZTsKaW1wb3J0IG9yZy5qbW9jay5pbnRlcm5hbC5TZWFyY2hpbmdDbGFzc0xvYWRlcjsKCi8qKgogKiBBbiB7QGxpbmsgb3JnLmptb2NrLmFwaS5JbXBvc3RlcmlzZXJ9IHRoYXQgdXNlcyB0aGUKICoge0BsaW5rIGphdmEubGFuZy5yZWZsZWN0LlByb3h5fSBjbGFzcyBvZiB0aGUgSmF2YSBSZWZsZWN0aW9uIEFQSS4KICogCiAqIEBhdXRob3IgbnByeWNlCiAqCiAqLwpwdWJsaWMgY2xhc3MgSmF2YVJlZmxlY3Rpb25JbXBvc3RlcmlzZXIgaW1wbGVtZW50cyBJbXBvc3RlcmlzZXIgewogICAgcHVibGljIHN0YXRpYyBmaW5hbCBJbXBvc3RlcmlzZXIgSU5TVEFOQ0UgPSBuZXcgSmF2YVJlZmxlY3Rpb25JbXBvc3RlcmlzZXIoKTsKICAgIAogICAgcHVibGljIGJvb2xlYW4gY2FuSW1wb3N0ZXJpc2UoQ2xhc3M8Pz4gdHlwZSkgewogICAgICAgIHJldHVybiB0eXBlLmlzSW50ZXJmYWNlKCk7CiAgICB9CiAgICAKICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQogICAgcHVibGljIDxUPiBUIGltcG9zdGVyaXNlKGZpbmFsIEludm9rYWJsZSBtb2NrT2JqZWN0LCBDbGFzczxUPiBtb2NrZWRUeXBlLCBDbGFzczw/Pi4uLiBhbmNpbGxpYXJ5VHlwZXMpIHsKICAgICAgICBmaW5hbCBDbGFzczw/PltdIHByb3hpZWRDbGFzc2VzID0gcHJlcGVuZChtb2NrZWRUeXBlLCBhbmNpbGxpYXJ5VHlwZXMpOwogICAgICAgIGZpbmFsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyID0gU2VhcmNoaW5nQ2xhc3NMb2FkZXIuY29tYmluZUxvYWRlcnNPZihwcm94aWVkQ2xhc3Nlcyk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIChUKVByb3h5Lm5ld1Byb3h5SW5zdGFuY2UoY2xhc3NMb2FkZXIsIHByb3hpZWRDbGFzc2VzLCBuZXcgSW52b2NhdGlvbkhhbmRsZXIoKSB7CiAgICAgICAgICAgIHB1YmxpYyBPYmplY3QgaW52b2tlKE9iamVjdCBwcm94eSwgTWV0aG9kIG1ldGhvZCwgT2JqZWN0W10gYXJncykgdGhyb3dzIFRocm93YWJsZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbW9ja09iamVjdC5pbnZva2UobmV3IEludm9jYXRpb24ocHJveHksIG1ldGhvZCwgYXJncykpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CiAgICAKICAgIHByaXZhdGUgQ2xhc3M8Pz5bXSBwcmVwZW5kKENsYXNzPD8+IGZpcnN0LCBDbGFzczw/Pi4uLiByZXN0KSB7CiAgICAgICAgQ2xhc3M8Pz5bXSBwcm94aWVkQ2xhc3NlcyA9IG5ldyBDbGFzczw/PltyZXN0Lmxlbmd0aCsxXTsKICAgICAgICAKICAgICAgICBwcm94aWVkQ2xhc3Nlc1swXSA9IGZpcnN0OwogICAgICAgIFN5c3RlbS5hcnJheWNvcHkocmVzdCwgMCwgcHJveGllZENsYXNzZXMsIDEsIHJlc3QubGVuZ3RoKTsKICAgICAgICAKICAgICAgICByZXR1cm4gcHJveGllZENsYXNzZXM7CiAgICB9Cn0KUEsDBAoAAAAAAHRIYjZygWR34wcAAOMHAAAnAAAAb3JnL2ptb2NrL2xpYi9MYXN0V29yZE5hbWluZ1NjaGVtZS5qYXZhcGFja2FnZSBvcmcuam1vY2subGliOwoKaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuQ2hhcmFjdGVyLmlzTG93ZXJDYXNlOwppbXBvcnQgc3RhdGljIGphdmEubGFuZy5DaGFyYWN0ZXIuaXNVcHBlckNhc2U7CmltcG9ydCBzdGF0aWMgamF2YS5sYW5nLk1hdGgubWF4OwoKaW1wb3J0IG9yZy5qbW9jay5hcGkuTW9ja09iamVjdE5hbWluZ1NjaGVtZTsKCi8qKgogKiBBIG5hbWluZyBzY2hlbWUgaW4gd2hpY2ggdGhlIGltcGxpY2l0IG5hbWUgZm9yIGEgbW9jayBvYmplY3QgaXMKICogdGhlIGxhc3Qgd29yZCBvZiB0aGUgbW9ja2VkIHR5cGUncyBuYW1lIGluIGxvd2VyIGNhc2UuCiAqIEUuZy4gQSBtb2NrIG9iamVjdCBvZiB0eXBlIEhlbGxvV29ybGQgd291bGQgYmUgbmFtZWQgIndvcmxkIi4KICogSWYgdGhlIHR5cGUgbmFtZSBpcyBhbiBhY3JvbnltIGl0IGlzIGNvbXBsZXRlbHkgbG93ZXJjYXNlZC4gIAogKiBGb3IgZXhhbXBsZSwgdGhlIHR5cGUgVVJMIHdvdWxkIGJlIG5hbWVkICJ1cmwiLiAgRGlnaXRzIGFuZCBvdGhlcgogKiBub24tbGV0dGVyIGNoYXJhY3RlcnMgYXJlIGxlZnQgb24gdGhlIGVuZCBvZiB0aGUgd29yZC4gIEZvcgogKiBleGFtcGxlLCB0aGUgdHlwZSBOTUVBMDE4MyB3b3VsZCBiZSBuYW1lZCAibm1lYTAxODMiLgogKiAKICogQGF1dGhvciBucHJ5Y2UKICovCnB1YmxpYyBjbGFzcyBMYXN0V29yZE5hbWluZ1NjaGVtZSBpbXBsZW1lbnRzIE1vY2tPYmplY3ROYW1pbmdTY2hlbWUgewogICAgcHVibGljIHN0YXRpYyBNb2NrT2JqZWN0TmFtaW5nU2NoZW1lIElOU1RBTkNFID0gbmV3IExhc3RXb3JkTmFtaW5nU2NoZW1lKCk7CiAgICAKICAgIHB1YmxpYyBTdHJpbmcgZGVmYXVsdE5hbWVGb3IoQ2xhc3M8Pz4gdHlwZVRvTW9jaykgewogICAgICAgIFN0cmluZyBzaW1wbGVOYW1lID0gdHlwZVRvTW9jay5nZXRTaW1wbGVOYW1lKCk7CiAgICAgICAgaW50IHdvcmRFbmQgPSBpbmRleE9mTGFzdExldHRlcihzaW1wbGVOYW1lKTsKICAgICAgICAKICAgICAgICBpbnQgc3RhcnQ7CiAgICAgICAgaWYgKGlzVXBwZXJDYXNlKHNpbXBsZU5hbWUuY2hhckF0KHdvcmRFbmQpKSkgewogICAgICAgICAgICBzdGFydCA9IGluZGV4T2ZMYXN0TG93ZXJDYXNlQ2hhcihzaW1wbGVOYW1lLCB3b3JkRW5kKSsxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXJ0ID0gaW5kZXhPZkxhc3RVcHBlckNhc2VDaGFyKHNpbXBsZU5hbWUsIHdvcmRFbmQpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gc2ltcGxlTmFtZS5zdWJzdHJpbmcobWF4KDAsc3RhcnQpKS50b0xvd2VyQ2FzZSgpOwogICAgfQogICAgCiAgICBwcml2YXRlIGludCBpbmRleE9mTGFzdExldHRlcihTdHJpbmcgc2ltcGxlTmFtZSkgewogICAgICAgIGludCBpID0gc2ltcGxlTmFtZS5sZW5ndGgoKS0xOwogICAgICAgIHdoaWxlIChpID4gMCAmJiAhQ2hhcmFjdGVyLmlzTGV0dGVyKHNpbXBsZU5hbWUuY2hhckF0KGkpKSkgewogICAgICAgICAgICBpLS07CiAgICAgICAgfQogICAgICAgIHJldHVybiBpOwogICAgfQogICAgCiAgICBwcml2YXRlIGludCBpbmRleE9mTGFzdFVwcGVyQ2FzZUNoYXIoU3RyaW5nIHNpbXBsZU5hbWUsIGludCB3b3JkRW5kKSB7CiAgICAgICAgaW50IGkgPSB3b3JkRW5kOwogICAgICAgIHdoaWxlIChpID49IDAgJiYgaXNMb3dlckNhc2Uoc2ltcGxlTmFtZS5jaGFyQXQoaSkpKSB7CiAgICAgICAgICAgIGktLTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGk7CiAgICB9CiAgICAKICAgIHByaXZhdGUgaW50IGluZGV4T2ZMYXN0TG93ZXJDYXNlQ2hhcihTdHJpbmcgc2ltcGxlTmFtZSwgaW50IHdvcmRFbmQpIHsKICAgICAgICBpbnQgaSA9IHdvcmRFbmQ7CiAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBpc1VwcGVyQ2FzZShzaW1wbGVOYW1lLmNoYXJBdChpKSkpIHsKICAgICAgICAgICAgaS0tOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaTsKICAgIH0KICAgIAogICAgcHJpdmF0ZSBMYXN0V29yZE5hbWluZ1NjaGVtZSgpIHt9Cn0KUEsDBAoAAAAAAPuyeDXRC5LFngIAAJ4CAAAkAAAAb3JnL2ptb2NrL2xpYi9SZXRyb05hbWluZ1NjaGVtZS5qYXZhcGFja2FnZSBvcmcuam1vY2subGliOwoKaW1wb3J0IG9yZy5qbW9jay5hcGkuTW9ja09iamVjdE5hbWluZ1NjaGVtZTsKCi8qKgogKiBBIG5hbWluZyBzY2hlbWUgaW4gd2hpY2ggdGhlIGltcGxpY2l0IG5hbWUgZm9yIGEgbW9jayBvYmplY3QgaXMKICogdGhlIG1vY2tlZCB0eXBlJ3MgbmFtZSBwcmVwZW5kIHdpdGggIm1vY2siLgogKiAKICogRS5nLiBBIG1vY2sgb2JqZWN0IG9mIHR5cGUgSGVsbG9Xb3JsZCB3b3VsZCBiZSBjYWxsZWQgIm1vY2tIZWxsb1dvcmxkIi4KICogCiAqIFRoaXMgd2FzIHRoZSBuYW1pbmcgc2NoZW1lIHVzZWQgYXQgQ29ubmV4dHJhIGFuZCBpbiBtYW55IGVhcmx5IGV4YW1wbGVzCiAqIG9mIFRERCB3aXRoIG1vY2sgb2JqZWN0cy4KICogCiAqIEBhdXRob3IgbnByeWNlCiAqCiAqLwpwdWJsaWMgY2xhc3MgUmV0cm9OYW1pbmdTY2hlbWUgaW1wbGVtZW50cyBNb2NrT2JqZWN0TmFtaW5nU2NoZW1lIHsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUmV0cm9OYW1pbmdTY2hlbWUgSU5TVEFOQ0UgPSBuZXcgUmV0cm9OYW1pbmdTY2hlbWUoKTsKICAgIAogICAgcHVibGljIFN0cmluZyBkZWZhdWx0TmFtZUZvcihDbGFzczw/PiB0eXBlVG9Nb2NrKSB7CiAgICAgICAgcmV0dXJuICJtb2NrIiArIHR5cGVUb01vY2suZ2V0U2ltcGxlTmFtZSgpOwogICAgfQp9ClBLAwQKAAAAAAC5Q6M2/HRkeDYEAAA2BAAAKAAAAG9yZy9qbW9jay9saWIvYWN0aW9uL0FjdGlvblNlcXVlbmNlLmphdmEvKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDcgak1vY2sub3JnCiAqLwpwYWNrYWdlIG9yZy5qbW9jay5saWIuYWN0aW9uOwoKaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwppbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwppbXBvcnQgamF2YS51dGlsLkxpc3Q7CgppbXBvcnQgb3JnLmhhbWNyZXN0LkRlc2NyaXB0aW9uOwppbXBvcnQgb3JnLmptb2NrLmFwaS5BY3Rpb247CmltcG9ydCBvcmcuam1vY2suYXBpLkV4cGVjdGF0aW9uRXJyb3I7CmltcG9ydCBvcmcuam1vY2suYXBpLkludm9jYXRpb247CgovKioKICogUmV0dXJucyB0aGUgbmV4dCBvZiBhIHNlcXVlbmNlIG9mIGVsZW1lbnRzIGVhY2ggdGltZSBpdCBpcyBpbnZva2VkLgogKiAKICogQGF1dGhvciBuYXQKICoKICovCnB1YmxpYyBjbGFzcyBBY3Rpb25TZXF1ZW5jZSBpbXBsZW1lbnRzIEFjdGlvbiB7CiAgICBMaXN0PEFjdGlvbj4gYWN0aW9uczsKICAgIEl0ZXJhdG9yPEFjdGlvbj4gaXRlcmF0b3I7CiAgICAKICAgIHB1YmxpYyBBY3Rpb25TZXF1ZW5jZShBY3Rpb24uLi4gYWN0aW9ucykgewogICAgICAgIHRoaXMuYWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8QWN0aW9uPihBcnJheXMuYXNMaXN0KGFjdGlvbnMpKTsKICAgICAgICB0aGlzLml0ZXJhdG9yID0gdGhpcy5hY3Rpb25zLml0ZXJhdG9yKCk7CiAgICB9CiAgICAKICAgIHB1YmxpYyBPYmplY3QgaW52b2tlKEludm9jYXRpb24gaW52b2NhdGlvbikgdGhyb3dzIFRocm93YWJsZSB7CiAgICAgICAgaWYgKGl0ZXJhdG9yLmhhc05leHQoKSkgewogICAgICAgICAgICByZXR1cm4gaXRlcmF0b3IubmV4dCgpLmludm9rZShpbnZvY2F0aW9uKTsKICAgICAgICB9IAogICAgCXRocm93IG5ldyBFeHBlY3RhdGlvbkVycm9yKCJubyBtb3JlIGFjdGlvbnMgYXZhaWxhYmxlIiwgaW52b2NhdGlvbik7CiAgICB9CiAgICAKICAgIHB1YmxpYyB2b2lkIGRlc2NyaWJlVG8oRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRMaXN0KCIiLCAiLCBhbmQgdGhlbiAiLCAiIiwgYWN0aW9ucyk7CiAgICB9Cn0KUEsDBAoAAAAAAHKtRTahx88QYAIAAGACAAAmAAAAb3JnL2ptb2NrL2xpYi9hY3Rpb24vQ3VzdG9tQWN0aW9uLmphdmEvKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQgak1vY2sub3JnCiAqLwpwYWNrYWdlIG9yZy5qbW9jay5saWIuYWN0aW9uOwoKaW1wb3J0IG9yZy5oYW1jcmVzdC5EZXNjcmlwdGlvbjsKaW1wb3J0IG9yZy5qbW9jay5hcGkuQWN0aW9uOwoKCi8qKgogKiBBIHBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIHtAbGluayBBY3Rpb259IGludGVyZmFjZSB0aGF0IG1ha2VzIGl0IGNvbnZlbmllbnQgCiAqIHRvIGltcGxlbWVudCBhcHBsaWNhdGlvbi1zcGVjaWZpYyBhY3Rpb25zIHdpdGggaW5saW5lIGFub255bW91cyBjbGFzc2VzLgogKi8KcHVibGljIGFic3RyYWN0IGNsYXNzIEN1c3RvbUFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbiB7CiAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKICAgIAogICAgcHVibGljIEN1c3RvbUFjdGlvbihTdHJpbmcgZGVzY3JpcHRpb24pIHsKICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CiAgICB9CiAgICAKICAgIHB1YmxpYyB2b2lkIGRlc2NyaWJlVG8oRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRUZXh0KHRoaXMuZGVzY3JpcHRpb24pOwogICAgfQp9ClBLAwQKAAAAAAByrUU2jzN9QDcDAAA3AwAAJQAAAG9yZy9qbW9jay9saWIvYWN0aW9uL0RvQWxsQWN0aW9uLmphdmFwYWNrYWdlIG9yZy5qbW9jay5saWIuYWN0aW9uOwoKaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CgppbXBvcnQgb3JnLmhhbWNyZXN0LkRlc2NyaXB0aW9uOwppbXBvcnQgb3JnLmptb2NrLmFwaS5BY3Rpb247CmltcG9ydCBvcmcuam1vY2suYXBpLkludm9jYXRpb247CgovKioKICogUGVyZm9ybXMgbXVsdGlwbGUgYWN0aW9ucyBldmVyeSB0aW1lIGl0IGlzIGludm9rZWQuCiAqIAogKiBAYXV0aG9yIG5hdAogKgogKi8KcHVibGljIGNsYXNzIERvQWxsQWN0aW9uIGltcGxlbWVudHMgQWN0aW9uIHsKICAgIHByaXZhdGUgZmluYWwgQWN0aW9uW10gYWN0aW9uczsKICAgIAogICAgcHVibGljIERvQWxsQWN0aW9uKEFjdGlvbi4uLiBhY3Rpb25zKSB7CiAgICAgICAgdGhpcy5hY3Rpb25zID0gYWN0aW9ucy5jbG9uZSgpOwogICAgfQogICAgCiAgICBwdWJsaWMgT2JqZWN0IGludm9rZShJbnZvY2F0aW9uIGludm9jYXRpb24pIHRocm93cyBUaHJvd2FibGUgewogICAgICAgIE9iamVjdCByZXN1bHQgPSBudWxsOwogICAgICAgIAogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWN0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICByZXN1bHQgPSBhY3Rpb25zW2ldLmludm9rZShpbnZvY2F0aW9uKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIAogICAgcHVibGljIHZvaWQgZGVzY3JpYmVUbyhEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZExpc3QoImRvIGFsbCBvZiAiLCAiLCAiLCAiIiwgQXJyYXlzLmFzTGlzdChhY3Rpb25zKSk7CiAgICB9Cn0KUEsDBAoAAAAAAHd5dzew3BslrgMAAK4DAAAxAAAAb3JnL2ptb2NrL2xpYi9hY3Rpb24vUmV0dXJuRW51bWVyYXRpb25BY3Rpb24uamF2YXBhY2thZ2Ugb3JnLmptb2NrLmxpYi5hY3Rpb247CgppbXBvcnQgc3RhdGljIGphdmEudXRpbC5Db2xsZWN0aW9ucy5lbnVtZXJhdGlvbjsKCmltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwppbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CmltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CgppbXBvcnQgb3JnLmhhbWNyZXN0LkRlc2NyaXB0aW9uOwppbXBvcnQgb3JnLmptb2NrLmFwaS5BY3Rpb247CmltcG9ydCBvcmcuam1vY2suYXBpLkludm9jYXRpb247CgovKioKICogUmV0dXJucyBhbiB7QGxpbmsgRW51bWVyYXRpb259IG92ZXIgYSBjb2xsZWN0aW9uLgogKiAKICogQGF1dGhvciBuYXQKICovCnB1YmxpYyBjbGFzcyBSZXR1cm5FbnVtZXJhdGlvbkFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbiB7CiAgICBwcml2YXRlIENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbjsKICAgIAogICAgcHVibGljIFJldHVybkVudW1lcmF0aW9uQWN0aW9uKENvbGxlY3Rpb248Pz4gY29sbGVjdGlvbikgewogICAgICAgIHRoaXMuY29sbGVjdGlvbiA9IGNvbGxlY3Rpb247CiAgICB9CiAgICAKICAgIHB1YmxpYyBSZXR1cm5FbnVtZXJhdGlvbkFjdGlvbihPYmplY3QuLi4gYXJyYXkpIHsKICAgICAgICB0aGlzLmNvbGxlY3Rpb24gPSBBcnJheXMuYXNMaXN0KGFycmF5KTsKICAgIH0KICAgIAogICAgcHVibGljIEVudW1lcmF0aW9uPD8+IGludm9rZShJbnZvY2F0aW9uIGludm9jYXRpb24pIHRocm93cyBUaHJvd2FibGUgewogICAgICAgIHJldHVybiBlbnVtZXJhdGlvbihjb2xsZWN0aW9uKTsKICAgIH0KICAgIAogICAgcHVibGljIHZvaWQgZGVzY3JpYmVUbyhEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFZhbHVlTGlzdCgicmV0dXJuIGVudW1lcmF0aW9uIG92ZXIgIiwgIiwgIiwgIiIsIGNvbGxlY3Rpb24pOwogICAgfQp9ClBLAwQKAAAAAAB3eXc3/jgMGGUDAABlAwAALgAAAG9yZy9qbW9jay9saWIvYWN0aW9uL1JldHVybkl0ZXJhdG9yQWN0aW9uLmphdmFwYWNrYWdlIG9yZy5qbW9jay5saWIuYWN0aW9uOwoKaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CmltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKCmltcG9ydCBvcmcuaGFtY3Jlc3QuRGVzY3JpcHRpb247CmltcG9ydCBvcmcuam1vY2suYXBpLkFjdGlvbjsKaW1wb3J0IG9yZy5qbW9jay5hcGkuSW52b2NhdGlvbjsKCi8qKgogKiBSZXR1cm5zIGFuIHtAbGluayBJdGVyYXRvcn0gb3ZlciBhIGNvbGxlY3Rpb24uCiAqIAogKiBAYXV0aG9yIG5hdAogKi8KcHVibGljIGNsYXNzIFJldHVybkl0ZXJhdG9yQWN0aW9uIGltcGxlbWVudHMgQWN0aW9uIHsKICAgIHByaXZhdGUgQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uOwogICAgCiAgICBwdWJsaWMgUmV0dXJuSXRlcmF0b3JBY3Rpb24oQ29sbGVjdGlvbjw/PiBjb2xsZWN0aW9uKSB7CiAgICAgICAgdGhpcy5jb2xsZWN0aW9uID0gY29sbGVjdGlvbjsKICAgIH0KICAgIAogICAgcHVibGljIFJldHVybkl0ZXJhdG9yQWN0aW9uKE9iamVjdC4uLiBhcnJheSkgewogICAgICAgIHRoaXMuY29sbGVjdGlvbiA9IEFycmF5cy5hc0xpc3QoYXJyYXkpOwogICAgfQogICAgCiAgICBwdWJsaWMgSXRlcmF0b3I8Pz4gaW52b2tlKEludm9jYXRpb24gaW52b2NhdGlvbikgdGhyb3dzIFRocm93YWJsZSB7CiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb24uaXRlcmF0b3IoKTsKICAgIH0KICAgIAogICAgcHVibGljIHZvaWQgZGVzY3JpYmVUbyhEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFZhbHVlTGlzdCgicmV0dXJuIGl0ZXJhdG9yIG92ZXIgIiwgIiwgIiwgIiIsIGNvbGxlY3Rpb24pOwogICAgfQp9ClBLAwQKAAAAAAByrUU2qegCUXECAABxAgAAKwAAAG9yZy9qbW9jay9saWIvYWN0aW9uL1JldHVyblZhbHVlQWN0aW9uLmphdmEvKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQgak1vY2sub3JnCiAqLwpwYWNrYWdlIG9yZy5qbW9jay5saWIuYWN0aW9uOwoKaW1wb3J0IG9yZy5oYW1jcmVzdC5EZXNjcmlwdGlvbjsKaW1wb3J0IG9yZy5qbW9jay5hcGkuQWN0aW9uOwppbXBvcnQgb3JnLmptb2NrLmFwaS5JbnZvY2F0aW9uOwoKLyoqCiAqIFJldHVybnMgYSB2YWx1ZS4KICogCiAqIEBhdXRob3IgbmF0CiAqCiAqLwpwdWJsaWMgY2xhc3MgUmV0dXJuVmFsdWVBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb24gewogICAgcHJpdmF0ZSBPYmplY3QgcmVzdWx0OwoKICAgIHB1YmxpYyBSZXR1cm5WYWx1ZUFjdGlvbihPYmplY3QgcmVzdWx0KSB7CiAgICAgICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7CiAgICB9CgogICAgcHVibGljIE9iamVjdCBpbnZva2UoSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB0aHJvd3MgVGhyb3dhYmxlIHsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIHB1YmxpYyB2b2lkIGRlc2NyaWJlVG8oRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRUZXh0KCJyZXR1cm5zICIpOwogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFZhbHVlKHJlc3VsdCk7CiAgICB9Cn0KUEsDBAoAAAAAAGNl9zZPhNMrsgcAALIHAAAlAAAAb3JnL2ptb2NrL2xpYi9hY3Rpb24vVGhyb3dBY3Rpb24uamF2YS8qICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCBqTW9jay5vcmcKICovCnBhY2thZ2Ugb3JnLmptb2NrLmxpYi5hY3Rpb247CgppbXBvcnQgb3JnLmhhbWNyZXN0LkRlc2NyaXB0aW9uOwppbXBvcnQgb3JnLmptb2NrLmFwaS5BY3Rpb247CmltcG9ydCBvcmcuam1vY2suYXBpLkludm9jYXRpb247CgovKioKICogVGhyb3dzIGFuIGV4Y2VwdGlvbi4KICogCiAqIEBhdXRob3IgbmF0CiAqCiAqLwpwdWJsaWMgY2xhc3MgVGhyb3dBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb24gewogICAgcHJpdmF0ZSBUaHJvd2FibGUgdGhyb3dhYmxlOwogICAgCiAgICBwdWJsaWMgVGhyb3dBY3Rpb24oVGhyb3dhYmxlIHRocm93YWJsZSkgewogICAgICAgIHRoaXMudGhyb3dhYmxlID0gdGhyb3dhYmxlOwogICAgfQoKICAgIHB1YmxpYyBPYmplY3QgaW52b2tlKEludm9jYXRpb24gaW52b2NhdGlvbikgdGhyb3dzIFRocm93YWJsZSB7CiAgICAgICAgaWYgKGlzVGhyb3dpbmdDaGVja2VkRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgY2hlY2tUeXBlQ29tcGF0aWJsaXR5KGludm9jYXRpb24uZ2V0SW52b2tlZE1ldGhvZCgpLmdldEV4Y2VwdGlvblR5cGVzKCkpOwogICAgICAgIH0KCiAgICAgICAgdGhyb3dhYmxlLmZpbGxJblN0YWNrVHJhY2UoKTsKICAgICAgICB0aHJvdyB0aHJvd2FibGU7CiAgICB9CgogICAgcHVibGljIHZvaWQgZGVzY3JpYmVUbyhEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikgewogICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZFRleHQoInRocm93cyAiKTsKICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRWYWx1ZSh0aHJvd2FibGUpOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBjaGVja1R5cGVDb21wYXRpYmxpdHkoQ2xhc3M8Pz5bXSBhbGxvd2VkRXhjZXB0aW9uVHlwZXMpIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFsbG93ZWRFeGNlcHRpb25UeXBlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoYWxsb3dlZEV4Y2VwdGlvblR5cGVzW2ldLmlzSW5zdGFuY2UodGhyb3dhYmxlKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmVwb3J0SW5jb21wYXRpYmxlQ2hlY2tlZEV4Y2VwdGlvbihhbGxvd2VkRXhjZXB0aW9uVHlwZXMpOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCByZXBvcnRJbmNvbXBhdGlibGVDaGVja2VkRXhjZXB0aW9uKENsYXNzPD8+W10gYWxsb3dlZFR5cGVzKSB7CiAgICAgICAgU3RyaW5nQnVmZmVyIG1lc3NhZ2UgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CgogICAgICAgIG1lc3NhZ2UuYXBwZW5kKCJ0cmllZCB0byB0aHJvdyBhICIpOwogICAgICAgIG1lc3NhZ2UuYXBwZW5kKHRocm93YWJsZS5nZXRDbGFzcygpLmdldE5hbWUoKSk7CiAgICAgICAgbWVzc2FnZS5hcHBlbmQoIiBmcm9tIGEgbWV0aG9kIHRoYXQgdGhyb3dzICIpOwoKICAgICAgICBpZiAoYWxsb3dlZFR5cGVzLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKCJubyBleGNlcHRpb25zIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbGxvd2VkVHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChpID4gMCkKICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmFwcGVuZCgiLCIpOwogICAgICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQoYWxsb3dlZFR5cGVzW2ldLmdldE5hbWUoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihtZXNzYWdlLnRvU3RyaW5nKCkpOwogICAgfQogICAgCiAgICBwcml2YXRlIGJvb2xlYW4gaXNUaHJvd2luZ0NoZWNrZWRFeGNlcHRpb24oKSB7CiAgICAgICAgcmV0dXJuICEodGhyb3dhYmxlIGluc3RhbmNlb2YgUnVudGltZUV4Y2VwdGlvbiB8fCB0aHJvd2FibGUgaW5zdGFuY2VvZiBFcnJvcik7CiAgICB9Cn0KUEsDBAoAAAAAAHKtRTbmpfWIDQIAAA0CAAAkAAAAb3JnL2ptb2NrL2xpYi9hY3Rpb24vVm9pZEFjdGlvbi5qYXZhLyogIENvcHlyaWdodCAoYykgMjAwMC0yMDA0IGpNb2NrLm9yZwogKi8KcGFja2FnZSBvcmcuam1vY2subGliLmFjdGlvbjsKCmltcG9ydCBvcmcuaGFtY3Jlc3QuRGVzY3JpcHRpb247CmltcG9ydCBvcmcuam1vY2suYXBpLkFjdGlvbjsKaW1wb3J0IG9yZy5qbW9jay5hcGkuSW52b2NhdGlvbjsKCi8qKgogKiBSZXR1cm5zIG5vdGhpbmcgZnJvbSBhIHZvaWQgbWV0aG9kLgogKi8KcHVibGljIGNsYXNzIFZvaWRBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb24gewogICAgcHVibGljIHN0YXRpYyBmaW5hbCBWb2lkQWN0aW9uIElOU1RBTkNFID0gbmV3IFZvaWRBY3Rpb24oKTsKCiAgICBwdWJsaWMgT2JqZWN0IGludm9rZShJbnZvY2F0aW9uIGludm9jYXRpb24pIHRocm93cyBUaHJvd2FibGUgewogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIGRlc2NyaWJlVG8oRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRUZXh0KCJpcyB2b2lkIik7CiAgICB9Cn0KUEsDBAoAAAAAANpo1zimDjD55AYAAOQGAAAzAAAAb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L0RldGVybWluaXN0aWNFeGVjdXRvci5qYXZhcGFja2FnZSBvcmcuam1vY2subGliLmNvbmN1cnJlbnQ7CgppbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKaW1wb3J0IGphdmEudXRpbC5MaXN0OwppbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3I7CgoKLyoqCiAqIEFuIHtAbGluayBFeGVjdXRvcn0gdGhhdCBleGVjdXRlcyBjb21tYW5kcyBvbiB0aGUgdGhyZWFkIHRoYXQgY2FsbHMKICoge0BsaW5rICNydW5QZW5kaW5nQ29tbWFuZHMoKSBydW5QZW5kaW5nQ29tbWFuZHN9IG9yIHtAbGluayAjcnVuVW50aWxJZGxlKCkgcnVuVW50aWxJZGxlfS4gCiAqIFRoaXMgaXMgdXNlZnVsIHdoZW4gdXNpbmcgTW9jayBPYmplY3RzIHRvIHRlc3QgY29kZSB0aGF0IHNwYXducyBiYWNrZ3JvdW5kIHRhc2tzLgogKiAKICogQGF1dGhvciBuYXQKICovCnB1YmxpYyBjbGFzcyBEZXRlcm1pbmlzdGljRXhlY3V0b3IgaW1wbGVtZW50cyBFeGVjdXRvciB7CiAgICBwcml2YXRlIExpc3Q8UnVubmFibGU+IGNvbW1hbmRzID0gbmV3IEFycmF5TGlzdDxSdW5uYWJsZT4oKTsKCiAgICBwdWJsaWMgRGV0ZXJtaW5pc3RpY0V4ZWN1dG9yKCkgewogICAgICAgIHN1cGVyKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBleGVjdXRvciBpcyBpZGxlIC0tIGhhcyBubyBwZW5kaW5nIGJhY2tncm91bmQgdGFza3Mgd2FpdGluZyB0byBiZSBydW4uCiAgICAgKiAKICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgbm8gYmFja2dyb3VuZCB0YXNrcyB0byBiZSBydW4sIGZhbHNlIG90aGVyd2lzZS4KICAgICAqIEBzZWUgI3J1blBlbmRpbmdDb21tYW5kcygpCiAgICAgKiBAc2VlICNydW5VbnRpbElkbGUoKQogICAgICovCiAgICBwdWJsaWMgYm9vbGVhbiBpc0lkbGUoKSB7CiAgICAgICAgcmV0dXJuIGNvbW1hbmRzLmlzRW1wdHkoKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJ1bnMgYWxsIGNvbW1hbmRzIHRoYXQgYXJlIGN1cnJlbnRseSBwZW5kaW5nLiBJZiB0aG9zZSBjb21tYW5kcyBhbHNvCiAgICAgKiBzY2hlZHVsZSBjb21tYW5kcyBmb3IgZXhlY3V0aW9uLCB0aGUgc2NoZWR1bGVkIGNvbW1hbmRzIHdpbGwgPGVtPm5vdDwvZW0+CiAgICAgKiBiZSBleGVjdXRlZCB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIHtAbGluayAjcnVuUGVuZGluZ0NvbW1hbmRzKCl9IG9yCiAgICAgKiB7QGxpbmsgI3J1blVudGlsSWRsZSgpfS4KICAgICAqLwogICAgcHVibGljIHZvaWQgcnVuUGVuZGluZ0NvbW1hbmRzKCkgewogICAgICAgIExpc3Q8UnVubmFibGU+IGNvbW1hbmRzVG9SdW4gPSBjb21tYW5kczsKICAgICAgICBjb21tYW5kcyA9IG5ldyBBcnJheUxpc3Q8UnVubmFibGU+KCk7CiAgICAKICAgICAgICBmb3IgKFJ1bm5hYmxlIGNvbW1hbmQ6IGNvbW1hbmRzVG9SdW4pIHsKICAgICAgICAgICAgY29tbWFuZC5ydW4oKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSdW5zIGV4ZWN1dGVkIGNvbW1hbmRzIHVudGlsIHRoZXJlIGFyZSBubyBjb21tYW5kcyBwZW5kaW5nIGV4ZWN1dGlvbiwgYnV0CiAgICAgKiBkb2VzIG5vdCB0aWNrIHRpbWUgZm9yd2FyZC4KICAgICAqLwogICAgcHVibGljIHZvaWQgcnVuVW50aWxJZGxlKCkgewogICAgICAgIHdoaWxlICghaXNJZGxlKCkpIHsKICAgICAgICAgICAgcnVuUGVuZGluZ0NvbW1hbmRzKCk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoUnVubmFibGUgY29tbWFuZCkgewogICAgICAgIGNvbW1hbmRzLmFkZChjb21tYW5kKTsKICAgIH0KCn0KUEsDBAoAAAAAANpo1zhh7JLIySIAAMkiAAA0AAAAb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L0RldGVybWluaXN0aWNTY2hlZHVsZXIuamF2YXBhY2thZ2Ugb3JnLmptb2NrLmxpYi5jb25jdXJyZW50OwoKaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwppbXBvcnQgamF2YS51dGlsLkxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZTsKaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkRlbGF5ZWQ7CmltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRpb25FeGNlcHRpb247CmltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcjsKaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yU2VydmljZTsKaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZTsKaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsKaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEZ1dHVyZTsKaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwppbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjsKCmltcG9ydCBvcmcuam1vY2subGliLmNvbmN1cnJlbnQuaW50ZXJuYWwuRGVsdGFRdWV1ZTsKCgovKioKICogQSB7QGxpbmsgU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlfSB0aGF0IGV4ZWN1dGVzIGNvbW1hbmRzIG9uIHRoZSB0aHJlYWQgdGhhdCBjYWxscwogKiB7QGxpbmsgI3J1bk5leHRQZW5kaW5nQ29tbWFuZCgpIHJ1bk5leHRQZW5kaW5nQ29tbWFuZH0sIHtAbGluayAjcnVuVW50aWxJZGxlKCkgcnVuVW50aWxJZGxlfSBvciAKICoge0BsaW5rICN0aWNrKGxvbmcsIFRpbWVVbml0KSB0aWNrfS4gIE9iamVjdHMgb2YgdGhpcyBjbGFzcyBjYW4gYWxzbyBiZSB1c2VkCiAqIGFzIHtAbGluayBFeGVjdXRvcn1zIG9yIHtAbGluayBFeGVjdXRvclNlcnZpY2V9cyBpZiB5b3UganVzdCB3YW50IHRvIGNvbnRyb2wgYmFja2dyb3VuZCBleGVjdXRpb24gCiAqIGFuZCBkb24ndCBuZWVkIHRvIHNjaGVkdWxlIGNvbW1hbmRzLCBidXQgaXQgbWF5IGJlIHNpbXBsZXIgdG8gdXNlIGEge0BsaW5rIERldGVybWluaXN0aWNFeGVjdXRvcn0uCiAqIAogKiBAYXV0aG9yIG5hdAogKi8KcHVibGljIGNsYXNzIERldGVybWluaXN0aWNTY2hlZHVsZXIgaW1wbGVtZW50cyBTY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UgewogICAgcHJpdmF0ZSBmaW5hbCBEZWx0YVF1ZXVlPFNjaGVkdWxlZFRhc2s8Pz4+IGRlbHRhUXVldWUgPSBuZXcgRGVsdGFRdWV1ZTxTY2hlZHVsZWRUYXNrPD8+PigpOwogICAgCiAgICAvKioKICAgICAqIFJ1bnMgdGltZSBmb3J3YXJkcyBieSBhIGdpdmVuIGR1cmF0aW9uLCBleGVjdXRpbmcgYW55IGNvbW1hbmRzIHNjaGVkdWxlZCBmb3IKICAgICAqIGV4ZWN1dGlvbiBkdXJpbmcgdGhhdCB0aW1lIHBlcmlvZCwgYW5kIGFueSBiYWNrZ3JvdW5kIHRhc2tzIHNwYXduZWQgYnkgdGhlIAogICAgICogc2NoZWR1bGVkIHRhc2tzLiAgVGhlcmVmb3JlLCB3aGVuIGEgY2FsbCB0byB0aWNrIHJldHVybnMsIHRoZSBleGVjdXRvciAKICAgICAqIHdpbGwgYmUgaWRsZS4KICAgICAqIAogICAgICogQHBhcmFtIGR1cmF0aW9uCiAgICAgKiBAcGFyYW0gdGltZVVuaXQKICAgICAqLwogICAgcHVibGljIHZvaWQgdGljayhsb25nIGR1cmF0aW9uLCBUaW1lVW5pdCB0aW1lVW5pdCkgewogICAgICAgIGxvbmcgcmVtYWluaW5nID0gdG9UaWNrcyhkdXJhdGlvbiwgdGltZVVuaXQpOwogICAgICAgIAogICAgICAgIGRvIHsKICAgICAgICAgICAgcmVtYWluaW5nID0gZGVsdGFRdWV1ZS50aWNrKHJlbWFpbmluZyk7CiAgICAgICAgICAgIHJ1blVudGlsSWRsZSgpOwogICAgICAgICAgICAKICAgICAgICB9IHdoaWxlIChkZWx0YVF1ZXVlLmlzTm90RW1wdHkoKSAmJiByZW1haW5pbmcgPiAwKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBSdW5zIGFsbCBjb21tYW5kcyBzY2hlZHVsZWQgdG8gYmUgZXhlY3V0ZWQgaW1tZWRpYXRlbHkgYnV0IGRvZXMgCiAgICAgKiBub3QgdGljayB0aW1lIGZvcndhcmQuCiAgICAgKi8KICAgIHB1YmxpYyB2b2lkIHJ1blVudGlsSWRsZSgpIHsKICAgICAgICB3aGlsZSAoIWlzSWRsZSgpKSB7CiAgICAgICAgICAgIHJ1bk5leHRQZW5kaW5nQ29tbWFuZCgpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBSdW5zIHRoZSBuZXh0IGNvbW1hbmQgc2NoZWR1bGVkIHRvIGJlIGV4ZWN1dGVkIGltbWVkaWF0ZWx5LgogICAgICovCiAgICBwdWJsaWMgdm9pZCBydW5OZXh0UGVuZGluZ0NvbW1hbmQoKSB7CiAgICAgICAgU2NoZWR1bGVkVGFzazw/PiBzY2hlZHVsZWRUYXNrID0gZGVsdGFRdWV1ZS5wb3AoKTsKICAgICAgICAKICAgICAgICBzY2hlZHVsZWRUYXNrLnJ1bigpOwogICAgICAgIAogICAgICAgIGlmIChzY2hlZHVsZWRUYXNrLnJlcGVhdHMoKSkgewogICAgICAgICAgICBkZWx0YVF1ZXVlLmFkZChzY2hlZHVsZWRUYXNrLnJlcGVhdERlbGF5LCBzY2hlZHVsZWRUYXNrKTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIC8qKgogICAgICogUmVwb3J0cyB3aGV0aGVyIHNjaGVkdWxlciBpcyAiaWRsZSI6IGhhcyBubyBjb21tYW5kcyBwZW5kaW5nIGltbWVkaWF0ZSBleGVjdXRpb24uCiAgICAgKiAKICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgbm8gY29tbWFuZHMgcGVuZGluZyBpbW1lZGlhdGUgZXhlY3V0aW9uLAogICAgICogICAgICAgICBmYWxzZSBpZiB0aGVyZSBhcmUgY29tbWFuZHMgcGVuZGluZyBpbW1lZGlhdGUgZXhlY3V0aW9uLgogICAgICovCiAgICBwdWJsaWMgYm9vbGVhbiBpc0lkbGUoKSB7CiAgICAgICAgcmV0dXJuIGRlbHRhUXVldWUuaXNFbXB0eSgpIHx8IGRlbHRhUXVldWUuZGVsYXkoKSA+IDA7CiAgICB9CiAgICAKICAgIHB1YmxpYyB2b2lkIGV4ZWN1dGUoUnVubmFibGUgY29tbWFuZCkgewogICAgICAgIHNjaGVkdWxlKGNvbW1hbmQsIDAsIFRpbWVVbml0LlNFQ09ORFMpOwogICAgfQogICAgCiAgICBwdWJsaWMgU2NoZWR1bGVkRnV0dXJlPD8+IHNjaGVkdWxlKFJ1bm5hYmxlIGNvbW1hbmQsIGxvbmcgZGVsYXksIFRpbWVVbml0IHVuaXQpIHsKICAgICAgICBTY2hlZHVsZWRUYXNrPFZvaWQ+IHRhc2sgPSBuZXcgU2NoZWR1bGVkVGFzazxWb2lkPihjb21tYW5kKTsKICAgICAgICBkZWx0YVF1ZXVlLmFkZCh0b1RpY2tzKGRlbGF5LCB1bml0KSwgdGFzayk7CiAgICAgICAgcmV0dXJuIHRhc2s7CiAgICB9CiAgICAKICAgIHB1YmxpYyA8Vj4gU2NoZWR1bGVkRnV0dXJlPFY+IHNjaGVkdWxlKENhbGxhYmxlPFY+IGNhbGxhYmxlLCBsb25nIGRlbGF5LCBUaW1lVW5pdCB1bml0KSB7CiAgICAgICAgU2NoZWR1bGVkVGFzazxWPiB0YXNrID0gbmV3IFNjaGVkdWxlZFRhc2s8Vj4oY2FsbGFibGUpOwogICAgICAgIGRlbHRhUXVldWUuYWRkKHRvVGlja3MoZGVsYXksIHVuaXQpLCB0YXNrKTsKICAgICAgICByZXR1cm4gdGFzazsKICAgIH0KICAgIAogICAgcHVibGljIFNjaGVkdWxlZEZ1dHVyZTw/PiBzY2hlZHVsZUF0Rml4ZWRSYXRlKFJ1bm5hYmxlIGNvbW1hbmQsIGxvbmcgaW5pdGlhbERlbGF5LCBsb25nIHBlcmlvZCwgVGltZVVuaXQgdW5pdCkgewogICAgICAgIHJldHVybiBzY2hlZHVsZVdpdGhGaXhlZERlbGF5KGNvbW1hbmQsIGluaXRpYWxEZWxheSwgcGVyaW9kLCB1bml0KTsKICAgIH0KICAgIAogICAgcHVibGljIFNjaGVkdWxlZEZ1dHVyZTw/PiBzY2hlZHVsZVdpdGhGaXhlZERlbGF5KFJ1bm5hYmxlIGNvbW1hbmQsIGxvbmcgaW5pdGlhbERlbGF5LCBsb25nIGRlbGF5LCBUaW1lVW5pdCB1bml0KSB7CiAgICAgICAgU2NoZWR1bGVkVGFzazxPYmplY3Q+IHRhc2sgPSBuZXcgU2NoZWR1bGVkVGFzazxPYmplY3Q+KHRvVGlja3MoZGVsYXksIHVuaXQpLCBjb21tYW5kKTsKICAgICAgICBkZWx0YVF1ZXVlLmFkZCh0b1RpY2tzKGluaXRpYWxEZWxheSwgdW5pdCksIHRhc2spOwogICAgICAgIHJldHVybiB0YXNrOwogICAgfQogICAgCiAgICBwdWJsaWMgYm9vbGVhbiBhd2FpdFRlcm1pbmF0aW9uKGxvbmcgdGltZW91dCwgVGltZVVuaXQgdW5pdCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKICAgICAgICB0aHJvdyBibG9ja2luZ09wZXJhdGlvbnNOb3RTdXBwb3J0ZWQoKTsKICAgIH0KCiAgICBwdWJsaWMgPFQ+IExpc3Q8RnV0dXJlPFQ+PiBpbnZva2VBbGwoQ29sbGVjdGlvbjxDYWxsYWJsZTxUPj4gdGFza3MpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CiAgICAgICAgdGhyb3cgYmxvY2tpbmdPcGVyYXRpb25zTm90U3VwcG9ydGVkKCk7CiAgICB9CgogICAgcHVibGljIDxUPiBMaXN0PEZ1dHVyZTxUPj4gaW52b2tlQWxsKENvbGxlY3Rpb248Q2FsbGFibGU8VD4+IHRhc2tzLCBsb25nIHRpbWVvdXQsIFRpbWVVbml0IHVuaXQpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CiAgICAgICAgdGhyb3cgYmxvY2tpbmdPcGVyYXRpb25zTm90U3VwcG9ydGVkKCk7CiAgICB9CiAgICAKICAgIHB1YmxpYyA8VD4gVCBpbnZva2VBbnkoQ29sbGVjdGlvbjxDYWxsYWJsZTxUPj4gdGFza3MpCiAgICAgICAgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBFeGVjdXRpb25FeGNlcHRpb24gCiAgICB7CiAgICAgICAgdGhyb3cgYmxvY2tpbmdPcGVyYXRpb25zTm90U3VwcG9ydGVkKCk7CiAgICB9CgogICAgcHVibGljIDxUPiBUIGludm9rZUFueShDb2xsZWN0aW9uPENhbGxhYmxlPFQ+PiB0YXNrcywgbG9uZyB0aW1lb3V0LCBUaW1lVW5pdCB1bml0KSAKICAgICAgICB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIEV4ZWN1dGlvbkV4Y2VwdGlvbiwgVGltZW91dEV4Y2VwdGlvbiAKICAgIHsKICAgICAgICB0aHJvdyBibG9ja2luZ09wZXJhdGlvbnNOb3RTdXBwb3J0ZWQoKTsKICAgIH0KCiAgICBwdWJsaWMgYm9vbGVhbiBpc1NodXRkb3duKCkgewogICAgICAgIHRocm93IHNodXRkb3duTm90U3VwcG9ydGVkKCk7CiAgICB9CgogICAgcHVibGljIGJvb2xlYW4gaXNUZXJtaW5hdGVkKCkgewogICAgICAgIHRocm93IHNodXRkb3duTm90U3VwcG9ydGVkKCk7CiAgICB9CgogICAgcHVibGljIHZvaWQgc2h1dGRvd24oKSB7CiAgICAgICAgdGhyb3cgc2h1dGRvd25Ob3RTdXBwb3J0ZWQoKTsKICAgIH0KCiAgICBwdWJsaWMgTGlzdDxSdW5uYWJsZT4gc2h1dGRvd25Ob3coKSB7CiAgICAgICAgdGhyb3cgc2h1dGRvd25Ob3RTdXBwb3J0ZWQoKTsKICAgIH0KICAgIAogICAgcHVibGljIDxUPiBGdXR1cmU8VD4gc3VibWl0KENhbGxhYmxlPFQ+IGNhbGxhYmxlKSB7CiAgICAgICAgcmV0dXJuIHNjaGVkdWxlKGNhbGxhYmxlLCAwLCBUaW1lVW5pdC5TRUNPTkRTKTsKICAgIH0KICAgIAogICAgcHVibGljIEZ1dHVyZTw/PiBzdWJtaXQoUnVubmFibGUgY29tbWFuZCkgewogICAgICAgIHJldHVybiBzdWJtaXQoY29tbWFuZCwgbnVsbCk7CiAgICB9CiAgICAKICAgIHB1YmxpYyA8VD4gRnV0dXJlPFQ+IHN1Ym1pdChSdW5uYWJsZSBjb21tYW5kLCBUIHJlc3VsdCkgewogICAgICAgIHJldHVybiBzdWJtaXQobmV3IENhbGxhYmxlUnVubmFibGVBZGFwdGVyPFQ+KGNvbW1hbmQsIHJlc3VsdCkpOwogICAgfQogICAgCiAgICBwcml2YXRlIGZpbmFsIGNsYXNzIENhbGxhYmxlUnVubmFibGVBZGFwdGVyPFQ+IGltcGxlbWVudHMgQ2FsbGFibGU8VD4gewogICAgICAgIHByaXZhdGUgZmluYWwgUnVubmFibGUgcnVubmFibGU7CiAgICAgICAgcHJpdmF0ZSBmaW5hbCBUIHJlc3VsdDsKICAgICAgICAKICAgICAgICBwdWJsaWMgQ2FsbGFibGVSdW5uYWJsZUFkYXB0ZXIoUnVubmFibGUgcnVubmFibGUsIFQgcmVzdWx0KSB7CiAgICAgICAgICAgIHRoaXMucnVubmFibGUgPSBydW5uYWJsZTsKICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBPdmVycmlkZQogICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgICAgIHJldHVybiBydW5uYWJsZS50b1N0cmluZygpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIFQgY2FsbCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAgICBydW5uYWJsZS5ydW4oKTsKICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHByaXZhdGUgZmluYWwgY2xhc3MgU2NoZWR1bGVkVGFzazxUPiBpbXBsZW1lbnRzIFNjaGVkdWxlZEZ1dHVyZTxUPiwgUnVubmFibGUgewogICAgICAgIHB1YmxpYyBmaW5hbCBsb25nIHJlcGVhdERlbGF5OwogICAgICAgIHB1YmxpYyBmaW5hbCBDYWxsYWJsZTxUPiBjb21tYW5kOwogICAgICAgIHByaXZhdGUgYm9vbGVhbiBpc0NhbmNlbGxlZCA9IGZhbHNlOwogICAgICAgIHByaXZhdGUgYm9vbGVhbiBpc0RvbmUgPSBmYWxzZTsKICAgICAgICBwcml2YXRlIFQgZnV0dXJlUmVzdWx0OwogICAgICAgIHByaXZhdGUgRXhjZXB0aW9uIGZhaWx1cmUgPSBudWxsOwogICAgICAgIAogICAgICAgIHB1YmxpYyBTY2hlZHVsZWRUYXNrKENhbGxhYmxlPFQ+IGNvbW1hbmQpIHsKICAgICAgICAgICAgdGhpcy5yZXBlYXREZWxheSA9IC0xOwogICAgICAgICAgICB0aGlzLmNvbW1hbmQgPSBjb21tYW5kOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBwdWJsaWMgU2NoZWR1bGVkVGFzayhSdW5uYWJsZSBjb21tYW5kKSB7CiAgICAgICAgICAgIHRoaXMoLTEsIGNvbW1hbmQpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBwdWJsaWMgU2NoZWR1bGVkVGFzayhsb25nIHJlcGVhdERlbGF5LCBSdW5uYWJsZSBjb21tYW5kKSB7CiAgICAgICAgICAgIHRoaXMucmVwZWF0RGVsYXkgPSByZXBlYXREZWxheTsKICAgICAgICAgICAgdGhpcy5jb21tYW5kID0gbmV3IENhbGxhYmxlUnVubmFibGVBZGFwdGVyPFQ+KGNvbW1hbmQsIG51bGwpOyAKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmQudG9TdHJpbmcoKSArICIgcmVwZWF0RGVsYXk9IiArIHJlcGVhdERlbGF5OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBwdWJsaWMgYm9vbGVhbiByZXBlYXRzKCkgewogICAgICAgICAgICByZXR1cm4gcmVwZWF0RGVsYXkgPj0gMDsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBsb25nIGdldERlbGF5KFRpbWVVbml0IHVuaXQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJub3Qgc3VwcG9ydGVkIik7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmVUbyhEZWxheWVkIG8pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJub3Qgc3VwcG9ydGVkIik7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgYm9vbGVhbiBjYW5jZWwoYm9vbGVhbiBtYXlJbnRlcnJ1cHRJZlJ1bm5pbmcpIHsKICAgICAgICAgICAgaXNDYW5jZWxsZWQgPSB0cnVlOwogICAgICAgICAgICByZXR1cm4gZGVsdGFRdWV1ZS5yZW1vdmUodGhpcyk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgVCBnZXQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7CiAgICAgICAgICAgIGlmICghaXNEb25lKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBibG9ja2luZ09wZXJhdGlvbnNOb3RTdXBwb3J0ZWQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGZhaWx1cmUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4ZWN1dGlvbkV4Y2VwdGlvbihmYWlsdXJlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIGZ1dHVyZVJlc3VsdDsKICAgICAgICB9CgogICAgICAgIHB1YmxpYyBUIGdldChsb25nIHRpbWVvdXQsIFRpbWVVbml0IHVuaXQpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgRXhlY3V0aW9uRXhjZXB0aW9uLCBUaW1lb3V0RXhjZXB0aW9uIHsKICAgICAgICAgICAgcmV0dXJuIGdldCgpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0NhbmNlbGxlZCgpIHsKICAgICAgICAgICAgcmV0dXJuIGlzQ2FuY2VsbGVkOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0RvbmUoKSB7CiAgICAgICAgICAgIHJldHVybiBpc0RvbmU7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBmdXR1cmVSZXN1bHQgPSBjb21tYW5kLmNhbGwoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgIGZhaWx1cmUgPSBlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlzRG9uZSA9IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgbG9uZyB0b1RpY2tzKGxvbmcgZHVyYXRpb24sIFRpbWVVbml0IHRpbWVVbml0KSB7CiAgICAgICAgcmV0dXJuIFRpbWVVbml0Lk1JTExJU0VDT05EUy5jb252ZXJ0KGR1cmF0aW9uLCB0aW1lVW5pdCk7CiAgICB9CiAgICAKICAgIHByaXZhdGUgVW5zdXBwb3J0ZWRTeW5jaHJvbm91c09wZXJhdGlvbkV4Y2VwdGlvbiBibG9ja2luZ09wZXJhdGlvbnNOb3RTdXBwb3J0ZWQoKSB7CiAgICAgICAgcmV0dXJuIG5ldyBVbnN1cHBvcnRlZFN5bmNocm9ub3VzT3BlcmF0aW9uRXhjZXB0aW9uKCJjYW5ub3QgcGVyZm9ybSBibG9ja2luZyB3YWl0IG9uIGEgdGFzayBzY2hlZHVsZWQgb24gYSAiICsgRGV0ZXJtaW5pc3RpY1NjaGVkdWxlci5jbGFzcy5nZXROYW1lKCkpOwogICAgfQogICAgCiAgICBwcml2YXRlIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIHNodXRkb3duTm90U3VwcG9ydGVkKCkgewogICAgICAgIHJldHVybiBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oInNodXRkb3duIG5vdCBzdXBwb3J0ZWQiKTsKICAgIH0KfQpQSwMECgAAAAAA2mjXOKPONJeFAQAAhQEAAEYAAABvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvVW5zdXBwb3J0ZWRTeW5jaHJvbm91c09wZXJhdGlvbkV4Y2VwdGlvbi5qYXZhcGFja2FnZSBvcmcuam1vY2subGliLmNvbmN1cnJlbnQ7CgovKioKICogVGhyb3duIHRvIHJlcG9ydCB0aGF0IGEge0BsaW5rIERldGVybWluaXN0aWNTY2hlZHVsZXJ9IGhhcyBiZWVuIGFza2VkIHRvIHBlcmZvcm0KICogYSBibG9ja2luZyB3YWl0LCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLgogKiAKICogQGF1dGhvciBuYXQKICoKICovCnB1YmxpYyBjbGFzcyBVbnN1cHBvcnRlZFN5bmNocm9ub3VzT3BlcmF0aW9uRXhjZXB0aW9uIGV4dGVuZHMgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gewogICAgcHVibGljIFVuc3VwcG9ydGVkU3luY2hyb25vdXNPcGVyYXRpb25FeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKICAgICAgICBzdXBlcihtZXNzYWdlKTsKICAgIH0KfQpQSwMECgAAAAAA2mjXODTPYue4CwAAuAsAADEAAABvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvaW50ZXJuYWwvRGVsdGFRdWV1ZS5qYXZhcGFja2FnZSBvcmcuam1vY2subGliLmNvbmN1cnJlbnQuaW50ZXJuYWw7CgoKcHVibGljIGNsYXNzIERlbHRhUXVldWU8VD4gewogICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTm9kZTxUPiB7CiAgICAgICAgcHVibGljIGZpbmFsIFQgdmFsdWU7CiAgICAgICAgcHVibGljIGxvbmcgZGVsYXk7CiAgICAgICAgcHVibGljIE5vZGU8VD4gbmV4dCA9IG51bGw7CiAgICAgICAgCiAgICAgICAgcHVibGljIE5vZGUoVCB2YWx1ZSwgbG9uZyBuYW5vcykgewogICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgIHRoaXMuZGVsYXkgPSBuYW5vczsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHByaXZhdGUgTm9kZTxUPiBoZWFkID0gbnVsbDsKICAgIAogICAgcHVibGljIGJvb2xlYW4gaXNFbXB0eSgpIHsKICAgICAgICByZXR1cm4gaGVhZCA9PSBudWxsOwogICAgfQogICAgCiAgICBwdWJsaWMgYm9vbGVhbiBpc05vdEVtcHR5KCkgewogICAgICAgIHJldHVybiAhaXNFbXB0eSgpOwogICAgfQogICAgCiAgICBwdWJsaWMgVCBuZXh0KCkgewogICAgICAgIHJldHVybiBoZWFkLnZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBsb25nIGRlbGF5KCkgewogICAgICAgIHJldHVybiBoZWFkLmRlbGF5OwogICAgfQogICAgCiAgICBwdWJsaWMgdm9pZCBhZGQobG9uZyBkZWxheSwgVCB2YWx1ZSkgewogICAgICAgIE5vZGU8VD4gbmV3Tm9kZSA9IG5ldyBOb2RlPFQ+KHZhbHVlLCBkZWxheSk7CiAgICAgICAgCiAgICAgICAgTm9kZTxUPiBwcmV2ID0gbnVsbDsKICAgICAgICBOb2RlPFQ+IG5leHQgPSBoZWFkOwogICAgICAgIAogICAgICAgIHdoaWxlIChuZXh0ICE9IG51bGwgJiYgbmV4dC5kZWxheSA8PSBuZXdOb2RlLmRlbGF5KSB7CiAgICAgICAgICAgIG5ld05vZGUuZGVsYXkgLT0gbmV4dC5kZWxheTsKICAgICAgICAgICAgcHJldiA9IG5leHQ7CiAgICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChwcmV2ID09IG51bGwpIHsKICAgICAgICAgICAgaGVhZCA9IG5ld05vZGU7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBwcmV2Lm5leHQgPSBuZXdOb2RlOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAobmV4dCAhPSBudWxsKSB7CiAgICAgICAgICAgIG5leHQuZGVsYXkgLT0gbmV3Tm9kZS5kZWxheTsKICAgICAgICAgICAgCiAgICAgICAgICAgIG5ld05vZGUubmV4dCA9IG5leHQ7CiAgICAgICAgfQogICAgfQoKCiAgICBwdWJsaWMgbG9uZyB0aWNrKGxvbmcgdGltZVVuaXRzKSB7CiAgICAgICAgaWYgKGhlYWQgPT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gMEw7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGhlYWQuZGVsYXkgPj0gdGltZVVuaXRzKSB7CiAgICAgICAgICAgIGhlYWQuZGVsYXkgLT0gdGltZVVuaXRzOwogICAgICAgICAgICByZXR1cm4gMEw7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBsb25nIGxlZnRvdmVyID0gdGltZVVuaXRzIC0gaGVhZC5kZWxheTsKICAgICAgICAgICAgaGVhZC5kZWxheSA9IDBMOwogICAgICAgICAgICByZXR1cm4gbGVmdG92ZXI7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBUIHBvcCgpIHsKICAgICAgICBpZiAoaGVhZC5kZWxheSA+IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiY2Fubm90IHBvcCB0aGUgaGVhZCBlbGVtZW50IHdoZW4gaXQgaGFzIGEgbm9uLXplcm8gZGVsYXkiKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgVCBwb3BwZWQgPSBoZWFkLnZhbHVlOwogICAgICAgIGhlYWQgPSBoZWFkLm5leHQ7CiAgICAgICAgcmV0dXJuIHBvcHBlZDsKICAgIH0KICAgIAogICAgcHVibGljIGJvb2xlYW4gcmVtb3ZlKFQgZWxlbWVudCkgewogICAgICAgIE5vZGU8VD4gcHJldiA9IG51bGw7CiAgICAgICAgTm9kZTxUPiBub2RlID0gaGVhZDsKICAgICAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmIG5vZGUudmFsdWUgIT0gZWxlbWVudCkgewogICAgICAgICAgICBwcmV2ID0gbm9kZTsKICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChub2RlLm5leHQgIT0gbnVsbCkgewogICAgICAgICAgICBub2RlLm5leHQuZGVsYXkgKz0gbm9kZS5kZWxheTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHByZXYgPT0gbnVsbCkgewogICAgICAgICAgICBoZWFkID0gbm9kZS5uZXh0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcHJldi5uZXh0ID0gbm9kZS5uZXh0OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIAogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgICAgIHNiLmFwcGVuZChnZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSkKICAgICAgICAgIC5hcHBlbmQoIlsiKTsKICAgICAgICAKICAgICAgICBOb2RlPFQ+IG5vZGUgPSBoZWFkOwogICAgICAgIHdoaWxlIChub2RlICE9IG51bGwpIHsKICAgICAgICAgICAgaWYgKG5vZGUgIT0gaGVhZCkgewogICAgICAgICAgICAgICAgc2IuYXBwZW5kKCIsICIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNiLmFwcGVuZCgiKyIpCiAgICAgICAgICAgICAgLmFwcGVuZChub2RlLmRlbGF5KQogICAgICAgICAgICAgIC5hcHBlbmQoIjogIikKICAgICAgICAgICAgICAuYXBwZW5kKG5vZGUudmFsdWUpOwogICAgICAgICAgICAKICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDsKICAgICAgICB9CiAgICAgICAgc2IuYXBwZW5kKCJdIik7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgICB9Cn0KUEsDBAoAAAAAAGsDOza8dDnRigAAAIoAAAAiAAAAb3JnL2ptb2NrL3N5bnRheC9BY3Rpb25DbGF1c2UuamF2YXBhY2thZ2Ugb3JnLmptb2NrLnN5bnRheDsKCmltcG9ydCBvcmcuam1vY2suYXBpLkFjdGlvbjsKCgpwdWJsaWMgaW50ZXJmYWNlIEFjdGlvbkNsYXVzZSB7CiAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCB3aWxsKEFjdGlvbiBhY3Rpb24pOwp9ClBLAwQKAAAAAADBeEw1G1aeG6YBAACmAQAALwAAAG9yZy9qbW9jay9zeW50YXgvQXJndW1lbnRDb25zdHJhaW50UGhyYXNlcy5qYXZhcGFja2FnZSBvcmcuam1vY2suc3ludGF4OwoKaW1wb3J0IG9yZy5oYW1jcmVzdC5NYXRjaGVyOwoKcHVibGljIGludGVyZmFjZSBBcmd1bWVudENvbnN0cmFpbnRQaHJhc2VzIHsKICAgIDxUPiBUIHdpdGgoTWF0Y2hlcjxUPiBtYXRjaGVyKTsKICAgIGJvb2xlYW4gd2l0aChNYXRjaGVyPEJvb2xlYW4+IG1hdGNoZXIpOwogICAgYnl0ZSB3aXRoKE1hdGNoZXI8Qnl0ZT4gbWF0Y2hlcik7CiAgICBzaG9ydCB3aXRoKE1hdGNoZXI8U2hvcnQ+IG1hdGNoZXIpOwogICAgaW50IHdpdGgoTWF0Y2hlcjxJbnRlZ2VyPiBtYXRjaGVyKTsKICAgIGxvbmcgd2l0aChNYXRjaGVyPExvbmc+IG1hdGNoZXIpOwogICAgZmxvYXQgd2l0aChNYXRjaGVyPEZsb2F0PiBtYXRjaGVyKTsKICAgIGRvdWJsZSB3aXRoKE1hdGNoZXI8RG91YmxlPiBtYXRjaGVyKTsKfQpQSwMECgAAAAAAFEFCN5jILSYTAgAAEwIAACcAAABvcmcvam1vY2svc3ludGF4L0NhcmRpbmFsaXR5Q2xhdXNlLmphdmFwYWNrYWdlIG9yZy5qbW9jay5zeW50YXg7CgppbXBvcnQgb3JnLmhhbWNyZXN0Lk1hdGNoZXI7CgoKcHVibGljIGludGVyZmFjZSBDYXJkaW5hbGl0eUNsYXVzZSB7CiAgICBSZWNlaXZlckNsYXVzZSBleGFjdGx5KGludCBjb3VudCk7CiAgICBSZWNlaXZlckNsYXVzZSBhdExlYXN0KGludCBjb3VudCk7CiAgICBSZWNlaXZlckNsYXVzZSBiZXR3ZWVuKGludCBtaW5Db3VudCwgaW50IG1heENvdW50KTsKICAgIFJlY2VpdmVyQ2xhdXNlIGF0TW9zdChpbnQgY291bnQpOwogICAgCiAgICA8VD4gVCBvbmUoVCBtb2NrT2JqZWN0KTsKICAgIAogICAgPFQ+IFQgYWxsb3dpbmcoVCBtb2NrT2JqZWN0KTsKICAgIE1ldGhvZENsYXVzZSBhbGxvd2luZyhNYXRjaGVyPD8+IG1vY2tPYmplY3RNYXRjaGVyKTsKICAgIAogICAgPFQ+IFQgaWdub3JpbmcoVCBtb2NrT2JqZWN0KTsKICAgIE1ldGhvZENsYXVzZSBpZ25vcmluZyhNYXRjaGVyPD8+IG1vY2tPYmplY3RNYXRjaGVyKTsKICAgIAogICAgPFQ+IFQgbmV2ZXIoVCBtb2NrT2JqZWN0KTsKfQpQSwMECgAAAAAANZA1Nm/QlfLoAAAA6AAAACIAAABvcmcvam1vY2svc3ludGF4L01ldGhvZENsYXVzZS5qYXZhcGFja2FnZSBvcmcuam1vY2suc3ludGF4OwoKaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKCmltcG9ydCBvcmcuaGFtY3Jlc3QuTWF0Y2hlcjsKCnB1YmxpYyBpbnRlcmZhY2UgTWV0aG9kQ2xhdXNlIHsKICAgIFBhcmFtZXRlcnNDbGF1c2UgbWV0aG9kKE1hdGNoZXI8TWV0aG9kPiBtZXRob2RNYXRjaGVyKTsKICAgIFBhcmFtZXRlcnNDbGF1c2UgbWV0aG9kKFN0cmluZyBuYW1lUmVnZXgpOwp9ClBLAwQKAAAAAACLPjs12QzQDMAAAADAAAAAJgAAAG9yZy9qbW9jay9zeW50YXgvUGFyYW1ldGVyc0NsYXVzZS5qYXZhcGFja2FnZSBvcmcuam1vY2suc3ludGF4OwoKaW1wb3J0IG9yZy5oYW1jcmVzdC5NYXRjaGVyOwoKcHVibGljIGludGVyZmFjZSBQYXJhbWV0ZXJzQ2xhdXNlIGV4dGVuZHMgTWV0aG9kQ2xhdXNlIHsKICAgIHZvaWQgd2l0aChNYXRjaGVyPD8+Li4uIHBhcmFtZXRlck1hdGNoZXJzKTsKICAgIHZvaWQgd2l0aE5vQXJndW1lbnRzKCk7Cn0KUEsDBAoAAAAAAGNm9za1p0o1rQAAAK0AAAAkAAAAb3JnL2ptb2NrL3N5bnRheC9SZWNlaXZlckNsYXVzZS5qYXZhcGFja2FnZSBvcmcuam1vY2suc3ludGF4OwoKaW1wb3J0IG9yZy5oYW1jcmVzdC5NYXRjaGVyOwoKcHVibGljIGludGVyZmFjZSBSZWNlaXZlckNsYXVzZSB7CiAgICA8VD4gVCBvZihUIG1vY2tPYmplY3Qp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bGFzc1BLAQIUAwoAAAAAAHlYGDlY/moQ6wkAAOsJAAAqAAAAAAAAAAAAAACkgRGSAABvcmcvam1vY2svaW50ZXJuYWwvRmFrZU9iamVjdE1ldGhvZHMuY2xhc3NQSwECFAMKAAAAAAB5WBg5ndgyrXYCAAB2AgAAIwAAAAAAAAAAAAAApIFEnAAAb3JnL2ptb2NrL2ludGVybmFsL0Zvcm1hdHRpbmcuY2xhc3NQSwECFAMKAAAAAAB5WBg5MMS1EtMDAADTAwAAMgAAAAAAAAAAAAAApIH7ngAAb3JnL2ptb2NrL2ludGVybmFsL0luU3RhdGVPcmRlcmluZ0NvbnN0cmFpbnQuY2xhc3NQSwECFAMKAAAAAAB5WBg5KUy0vgILAAACCwAALQAAAAAAAAAAAAAApIEeowAAb3JnL2ptb2NrL2ludGVybmFsL0ludm9jYXRpb25EaXNwYXRjaGVyLmNsYXNzUEsBAhQDCgAAAAAAeVgYOcsGagouBgAALgYAACsAAAAAAAAAAAAAAKSBa64AAG9yZy9qbW9jay9pbnRlcm5hbC9JbnZvY2F0aW9uRGl2ZXJ0ZXIuY2xhc3NQSwECFAMKAAAAAAB5WBg57ZcgN/sTAAD7EwAALgAAAAAAAAAAAAAApIHitAAAb3JnL2ptb2NrL2ludGVybmFsL0ludm9jYXRpb25FeHBlY3RhdGlvbi5jbGFzc1BLAQIUAwoAAAAAAHlYGDkzvpgK0BcAANAXAAA1AAAAAAAAAAAAAACkgSnJAABvcmcvam1vY2svaW50ZXJuYWwvSW52b2NhdGlvbkV4cGVjdGF0aW9uQnVpbGRlci5jbGFzc1BLAQIUAwoAAAAAAHlYGDlnueia9wMAAPcDAAA6AAAAAAAAAAAAAACkgUzhAABvcmcvam1vY2svaW50ZXJuYWwvSW52b2NhdGlvblRvRXhwZWN0YXRpb25UcmFuc2xhdG9yLmNsYXNzUEsBAhQDCgAAAAAAeVgYOd666BbIBAAAyAQAAEMAAAAAAAAAAAAAAKSBm+UAAG9yZy9qbW9jay9pbnRlcm5hbC9OYW1lZFNlcXVlbmNlJEluU2VxdWVuY2VPcmRlcmluZ0NvbnN0cmFpbnQuY2xhc3NQSwECFAMKAAAAAAB5WBg53rbRlvAGAADwBgAAJgAAAAAAAAAAAAAApIHE6gAAb3JnL2ptb2NrL2ludGVybmFsL05hbWVkU2VxdWVuY2UuY2xhc3NQSwECFAMKAAAAAAB5WBg53KcxyfUEAAD1BAAANwAAAAAAAAAAAAAApIH48QAAb3JnL2ptb2NrL2ludGVybmFsL09iamVjdE1ldGhvZEV4cGVjdGF0aW9uQm91bmNlci5jbGFzc1BLAQIUAwoAAAAAAHlYGDkTh8RczwAAAM8AAAArAAAAAAAAAAAAAACkgUL3AABvcmcvam1vY2svaW50ZXJuYWwvT3JkZXJpbmdDb25zdHJhaW50LmNsYXNzUEsBAhQDCgAAAAAAeVgYOdRPhaYWBAAAFgQAAC4AAAAAAAAAAAAAAKSBWvgAAG9yZy9qbW9jay9pbnRlcm5hbC9Qcm94aWVkT2JqZWN0SWRlbnRpdHkuY2xhc3NQSwECFAMKAAAAAAB5WBg5CVSpBbYNAAC2DQAAMQAAAAAAAAAAAAAApIG8/AAAb3JnL2ptb2NrL2ludGVybmFsL1JldHVybkRlZmF1bHRWYWx1ZUFjdGlvbi5jbGFzc1BLAQIUAwoAAAAAAHlYGDm2C2PrjwsAAI8LAAAtAAAAAAAAAAAAAACkgcEKAQBvcmcvam1vY2svaW50ZXJuYWwvU2VhcmNoaW5nQ2xhc3NMb2FkZXIuY2xhc3NQSwECFAMKAAAAAAB5WBg5MQmAGbMAAACzAAAAIwAAAAAAAAAAAAAApIGbFgEAb3JnL2ptb2NrL2ludGVybmFsL1NpZGVFZmZlY3QuY2xhc3NQSwECFAMKAAAAAAB5WBg5sMRfgrAAAACwAAAAHgAAAAAAAAAAAAAApIGPFwEAb3JnL2ptb2NrL2ludGVybmFsL1N0YXRlLmNsYXNzUEsBAhQDCgAAAAAAeVgYObpvJ22DBQAAgwUAACcAAAAAAAAAAAAAAKSBexgBAG9yZy9qbW9jay9pbnRlcm5hbC9TdGF0ZU1hY2hpbmUkMS5jbGFzc1BLAQIUAwoAAAAAAHlYGDn5olpC7wQAAO8EAAAnAAAAAAAAAAAAAACkgUMeAQBvcmcvam1vY2svaW50ZXJuYWwvU3RhdGVNYWNoaW5lJDIuY2xhc3NQSwECFAMKAAAAAAB5WBg5qcMgsQAIAAAACAAAJQAAAAAAAAAAAAAApIF3IwEAb3JnL2ptb2NrL2ludGVybmFsL1N0YXRlTWFjaGluZS5jbGFzc1BLAQIUAwoAAAAAAHlYGDmcqaqqvAAAALwAAAAnAAAAAAAAAAAAAACkgborAQBvcmcvam1vY2svaW50ZXJuYWwvU3RhdGVQcmVkaWNhdGUuY2xhc3NQSwECFAMKAAAAAAB5WBg52fghPJsEAACbBAAALgAAAAAAAAAAAAAApIG7LAEAb3JnL2ptb2NrL2ludGVybmFsL21hdGNoZXIvTWV0aG9kTWF0Y2hlci5jbGFzc1BLAQIUAwoAAAAAAHpYGDlqNJBWtwUAALcFAAAyAAAAAAAAAAAAAACkgaIxAQBvcmcvam1vY2svaW50ZXJuYWwvbWF0Y2hlci9NZXRob2ROYW1lTWF0Y2hlci5jbGFzc1BLAQIUAwoAAAAAAHpYGDlWQ6ixxQMAAMUDAAAyAAAAAAAAAAAAAACkgak3AQBvcmcvam1vY2svaW50ZXJuYWwvbWF0Y2hlci9Nb2NrT2JqZWN0TWF0Y2hlci5jbGFzc1BLAQIUAwoAAAAAAHpYGDmRIZY9KAYAACgGAAAyAAAAAAAAAAAAAACkgb47AQBvcmcvam1vY2svaW50ZXJuYWwvbWF0Y2hlci9QYXJhbWV0ZXJzTWF0Y2hlci5jbGFzc1BLAQIUAwoAAAAAAHpYGDlSZo5tNwMAADcDAAAsAAAAAAAAAAAAAACkgTZCAQBvcmcvam1vY2svbGliL0Fzc2VydGlvbkVycm9yVHJhbnNsYXRvci5jbGFzc1BLAQIUAwoAAAAAAHpYGDl6kZfzLAYAACwGAAApAAAAAAAAAAAAAACkgbdFAQBvcmcvam1vY2svbGliL0NhbWVsQ2FzZU5hbWluZ1NjaGVtZS5jbGFzc1BLAQIUAwoAAAAAAHpYGDkRRQ6ingIAAJ4CAAA2AAAAAAAAAAAAAACkgSpMAQBvcmcvam1vY2svbGliL0lkZW50aXR5RXhwZWN0YXRpb25FcnJvclRyYW5zbGF0b3IuY2xhc3NQSwECFAMKAAAAAAB6WBg5ESRU3k4FAABOBQAAMAAAAAAAAAAAAAAApIEcTwEAb3JnL2ptb2NrL2xpYi9KYXZhUmVmbGVjdGlvbkltcG9zdGVyaXNlciQxLmNsYXNzUEsBAhQDCgAAAAAAelgYOWXZ1qW9CAAAvQgAAC4AAAAAAAAAAAAAAKSBuFQBAG9yZy9qbW9jay9saWIvSmF2YVJlZmxlY3Rpb25JbXBvc3RlcmlzZXIuY2xhc3NQSwECFAMKAAAAAAB6WBg5VGIgQzUHAAA1BwAAKAAAAAAAAAAAAAAApIHBXQEAb3JnL2ptb2NrL2xpYi9MYXN0V29yZE5hbWluZ1NjaGVtZS5jbGFzc1BLAQIUAwoAAAAAAHpYGDn0Hqi4uAMAALgDAAAlAAAAAAAAAAAAAACkgTxlAQBvcmcvam1vY2svbGliL1JldHJvTmFtaW5nU2NoZW1lLmNsYXNzUEsBAhQDCgAAAAAAelgYOQrwGQSqBgAAqgYAACkAAAAAAAAAAAAAAKSBN2kBAG9yZy9qbW9jay9saWIvYWN0aW9uL0FjdGlvblNlcXVlbmNlLmNsYXNzUEsBAhQDCgAAAAAAelgYOQKXtn2xAgAAsQIAACcAAAAAAAAAAAAAAKSBKHABAG9yZy9qbW9jay9saWIvYWN0aW9uL0N1c3RvbUFjdGlvbi5jbGFzc1BLAQIUAwoAAAAAAHpYGDkISls88wQAAPMEAAAmAAAAAAAAAAAAAACkgR5zAQBvcmcvam1vY2svbGliL2FjdGlvbi9Eb0FsbEFjdGlvbi5jbGFzc1BLAQIUAwoAAAAAAHpYGDnAOcaS0gYAANIGAAAyAAAAAAAAAAAAAACkgVV4AQBvcmcvam1vY2svbGliL2FjdGlvbi9SZXR1cm5FbnVtZXJhdGlvbkFjdGlvbi5jbGFzc1BLAQIUAwoAAAAAAHpYGDmu/SwopQYAAKUGAAAvAAAAAAAAAAAAAACkgXd/AQBvcmcvam1vY2svbGliL2FjdGlvbi9SZXR1cm5JdGVyYXRvckFjdGlvbi5jbGFzc1BLAQIUAwoAAAAAAHpYGDmd3NhACAQAAAgEAAAsAAAAAAAAAAAAAACkgWmGAQBvcmcvam1vY2svbGliL2FjdGlvbi9SZXR1cm5WYWx1ZUFjdGlvbi5jbGFzc1BLAQIUAwoAAAAAAHpYGDmACMrXMQoAADEKAAAmAAAAAAAAAAAAAACkgbuKAQBvcmcvam1vY2svbGliL2FjdGlvbi9UaHJvd0FjdGlvbi5jbGFzc1BLAQIUAwoAAAAAAHpYGDmR03b3lgMAAJYDAAAlAAAAAAAAAAAAAACkgTCVAQBvcmcvam1vY2svbGliL2FjdGlvbi9Wb2lkQWN0aW9uLmNsYXNzUEsBAhQDCgAAAAAAelgYOSHuSoB3BQAAdwUAADQAAAAAAAAAAAAAAKSBCZkBAG9yZy9qbW9jay9saWIvY29uY3VycmVudC9EZXRlcm1pbmlzdGljRXhlY3V0b3IuY2xhc3NQSwECFAMKAAAAAAB6WBg5BmazCtMFAADTBQAATQAAAAAAAAAAAAAApIHSngEAb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L0RldGVybWluaXN0aWNTY2hlZHVsZXIkQ2FsbGFibGVSdW5uYWJsZUFkYXB0ZXIuY2xhc3NQSwECFAMKAAAAAAB6WBg5gxc15fgRAAD4EQAAQwAAAAAAAAAAAAAApIEQpQEAb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L0RldGVybWluaXN0aWNTY2hlZHVsZXIkU2NoZWR1bGVkVGFzay5jbGFzc1BLAQIUAwoAAAAAAHpYGDmSG7GB7SAAAO0gAAA1AAAAAAAAAAAAAACkgWm3AQBvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvRGV0ZXJtaW5pc3RpY1NjaGVkdWxlci5jbGFzc1BLAQIUAwoAAAAAAHpYGDnPt3Br4gEAAOIBAABHAAAAAAAAAAAAAACkganYAQBvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvVW5zdXBwb3J0ZWRTeW5jaHJvbm91c09wZXJhdGlvbkV4Y2VwdGlvbi5jbGFzc1BLAQIUAwoAAAAAAHpYGDl6Qym2NgMAADYDAAA3AAAAAAAAAAAAAACkgfDaAQBvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvaW50ZXJuYWwvRGVsdGFRdWV1ZSROb2RlLmNsYXNzUEsBAhQDCgAAAAAAelgYOU3KGGxyDAAAcgwAADIAAAAAAAAAAAAAAKSBe94BAG9yZy9qbW9jay9saWIvY29uY3VycmVudC9pbnRlcm5hbC9EZWx0YVF1ZXVlLmNsYXNzUEsBAhQDCgAAAAAAeVgYOa4xVBGlAAAApQAAACMAAAAAAAAAAAAAAKSBPesBAG9yZy9qbW9jay9zeW50YXgvQWN0aW9uQ2xhdXNlLmNsYXNzUEsBAhQDCgAAAAAAeVgYORfMcC+dAwAAnQMAADAAAAAAAAAAAAAAAKSBI+wBAG9yZy9qbW9j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AhQDCgAAAAAAyAE7NgrVrluRAAAAkQAAACwAAAAAAAAAAAAAAKSBP4YCAG9yZy9qbW9jay9pbnRlcm5hbC9FeHBlY3RhdGlvbkNvbGxlY3Rvci5qYXZhUEsBAhQDCgAAAAAALVvXOKA8zAPzBgAA8wYAACkAAAAAAAAAAAAAAKSBGocCAG9yZy9qbW9jay9pbnRlcm5hbC9GYWtlT2JqZWN0TWV0aG9kcy5qYXZhUEsBAhQDCgAAAAAAR7ubN9P0Z1mfAAAAnwAAACIAAAAAAAAAAAAAAKSBVI4CAG9yZy9qbW9jay9pbnRlcm5hbC9Gb3JtYXR0aW5nLmphdmFQSwECFAMKAAAAAABOfmQ2JZ0TyCYCAAAmAgAAMQAAAAAAAAAAAAAApIEzjwIAb3JnL2ptb2NrL2ludGVybmFsL0luU3RhdGVPcmRlcmluZ0NvbnN0cmFpbnQuamF2YVBLAQIUAwoAAAAAADOSIziImrYRmgcAAJoHAAAsAAAAAAAAAAAAAACkgaiRAgBvcmcvam1vY2svaW50ZXJuYWwvSW52b2NhdGlvbkRpc3BhdGNoZXIuamF2YVBLAQIUAwoAAAAAAPuyeDUqUTCONgMAADYDAAAqAAAAAAAAAAAAAACkgYyZAgBvcmcvam1vY2svaW50ZXJuYWwvSW52b2NhdGlvbkRpdmVydGVyLmphdmFQSwECFAMKAAAAAABHu5s3jdbz5psPAACbDwAALQAAAAAAAAAAAAAApIEKnQIAb3JnL2ptb2NrL2ludGVybmFsL0ludm9jYXRpb25FeHBlY3RhdGlvbi5qYXZhUEsBAhQDCgAAAAAAD0/XOIDDHH4zEgAAMxIAADQAAAAAAAAAAAAAAKSB8KwCAG9yZy9qbW9jay9pbnRlcm5hbC9JbnZvY2F0aW9uRXhwZWN0YXRpb25CdWlsZGVyLmphdmFQSwECFAMKAAAAAAAPT9c4tFU0k7ACAACwAgAAOQAAAAAAAAAAAAAApIF1vwIAb3JnL2ptb2NrL2ludGVybmFsL0ludm9jYXRpb25Ub0V4cGVjdGF0aW9uVHJhbnNsYXRvci5qYXZhUEsBAhQDCgAAAAAASlV6NoWv2+o+BgAAPgYAACUAAAAAAAAAAAAAAKSBfMICAG9yZy9qbW9jay9pbnRlcm5hbC9OYW1lZFNlcXVlbmNlLmphdmFQSwECFAMKAAAAAAAtW9c4OjOi6YoDAACKAwAANgAAAAAAAAAAAAAApIH9yAIAb3JnL2ptb2NrL2ludGVybmFsL09iamVjdE1ldGhvZEV4cGVjdGF0aW9uQm91bmNlci5qYXZhUEsBAhQDCgAAAAAA9mE9NleluvSkAAAApAAAACoAAAAAAAAAAAAAAKSB28wCAG9yZy9qbW9jay9pbnRlcm5hbC9PcmRlcmluZ0NvbnN0cmFpbnQuamF2YVBLAQIUAwoAAAAAAC1b1zhCccuUjwIAAI8CAAAtAAAAAAAAAAAAAACkgcfNAgBvcmcvam1vY2svaW50ZXJuYWwvUHJveGllZE9iamVjdElkZW50aXR5LmphdmFQSwECFAMKAAAAAABjZfc2TGVGo3QMAAB0DAAAMAAAAAAAAAAAAAAApIGh0AIAb3JnL2ptb2NrL2ludGVybmFsL1JldHVybkRlZmF1bHRWYWx1ZUFjdGlvbi5qYXZhUEsBAhQDCgAAAAAAqmTjOBGG+VPpCQAA6QkAACwAAAAAAAAAAAAAAKSBY90CAG9yZy9qbW9jay9pbnRlcm5hbC9TZWFyY2hpbmdDbGFzc0xvYWRlci5qYXZhUEsBAhQDCgAAAAAAdEhiNnFElzVAAQAAQAEAACIAAAAAAAAAAAAAAKSBlucCAG9yZy9qbW9jay9pbnRlcm5hbC9TaWRlRWZmZWN0LmphdmFQSwECFAMKAAAAAAB0SGI2vGjmkGQAAABkAAAAHQAAAAAAAAAAAAAApIEW6QIAb3JnL2ptb2NrL2ludGVybmFsL1N0YXRlLmphdmFQSwECFAMKAAAAAACxZC84mkWhtO8FAADvBQAAJAAAAAAAAAAAAAAApIG16QIAb3JnL2ptb2NrL2ludGVybmFsL1N0YXRlTWFjaGluZS5qYXZhUEsBAhQDCgAAAAAAdEhiNqP8rzSVAAAAlQAAACYAAAAAAAAAAAAAAKSB5u8CAG9yZy9qbW9jay9pbnRlcm5hbC9TdGF0ZVByZWRpY2F0ZS5qYXZhUEsBAhQDCgAAAAAAc5neNjwqgEZiAgAAYgIAAC0AAAAAAAAAAAAAAKSBv/ACAG9yZy9qbW9jay9pbnRlcm5hbC9tYXRjaGVyL01ldGhvZE1hdGNoZXIuamF2YVBLAQIUAwoAAAAAAPZhPTYLiDbRhwIAAIcCAAAxAAAAAAAAAAAAAACkgWzzAgBvcmcvam1vY2svaW50ZXJuYWwvbWF0Y2hlci9NZXRob2ROYW1lTWF0Y2hlci5qYXZhUEsBAhQDCgAAAAAA9mE9NtJfc6HvAQAA7wEAADEAAAAAAAAAAAAAAKSBQvYCAG9yZy9qbW9jay9pbnRlcm5hbC9tYXRjaGVyL01vY2tPYmplY3RNYXRjaGVyLmphdmFQSwECFAMKAAAAAAD2YT02ll8XAAkEAAAJBAAAMQAAAAAAAAAAAAAApIGA+AIAb3JnL2ptb2NrL2ludGVybmFsL21hdGNoZXIvUGFyYW1ldGVyc01hdGNoZXIuamF2YVBLAQIUAwoAAAAAANteeTVo6xkMygIAAMoCAAArAAAAAAAAAAAAAACkgdj8AgBvcmcvam1vY2svbGliL0Fzc2VydGlvbkVycm9yVHJhbnNsYXRvci5qYXZhUEsBAhQDCgAAAAAAOmZYNsiTRWllBQAAZQUAACgAAAAAAAAAAAAAAKSB6/8CAG9yZy9qbW9jay9saWIvQ2FtZWxDYXNlTmFtaW5nU2NoZW1lLmphdmFQSwECFAMKAAAAAAByrUU2C50g/mkCAABpAgAANQAAAAAAAAAAAAAApIGWBQMAb3JnL2ptb2NrL2xpYi9JZGVudGl0eUV4cGVjdGF0aW9uRXJyb3JUcmFuc2xhdG9yLmphdmFQSwECFAMKAAAAAAAgnwQ3w264ylEGAABRBgAALQAAAAAAAAAAAAAApIFSCAMAb3JnL2ptb2NrL2xpYi9KYXZhUmVmbGVjdGlvbkltcG9zdGVyaXNlci5qYXZhUEsBAhQDCgAAAAAAdEhiNnKBZHfjBwAA4wcAACcAAAAAAAAAAAAAAKSB7g4DAG9yZy9qbW9jay9saWIvTGFzdFdvcmROYW1pbmdTY2hlbWUuamF2YVBLAQIUAwoAAAAAAPuyeDXRC5LFngIAAJ4CAAAkAAAAAAAAAAAAAACkgRYXAwBvcmcvam1vY2svbGliL1JldHJvTmFtaW5nU2NoZW1lLmphdmFQSwECFAMKAAAAAAC5Q6M2/HRkeDYEAAA2BAAAKAAAAAAAAAAAAAAApIH2GQMAb3JnL2ptb2NrL2xpYi9hY3Rpb24vQWN0aW9uU2VxdWVuY2UuamF2YVBLAQIUAwoAAAAAAHKtRTahx88QYAIAAGACAAAmAAAAAAAAAAAAAACkgXIeAwBvcmcvam1vY2svbGliL2FjdGlvbi9DdXN0b21BY3Rpb24uamF2YVBLAQIUAwoAAAAAAHKtRTaPM31ANwMAADcDAAAlAAAAAAAAAAAAAACkgRYhAwBvcmcvam1vY2svbGliL2FjdGlvbi9Eb0FsbEFjdGlvbi5qYXZhUEsBAhQDCgAAAAAAd3l3N7DcGyWuAwAArgMAADEAAAAAAAAAAAAAAKSBkCQDAG9yZy9qbW9jay9saWIvYWN0aW9uL1JldHVybkVudW1lcmF0aW9uQWN0aW9uLmphdmFQSwECFAMKAAAAAAB3eXc3/jgMGGUDAABlAwAALgAAAAAAAAAAAAAApIGNKAMAb3JnL2ptb2NrL2xpYi9hY3Rpb24vUmV0dXJuSXRlcmF0b3JBY3Rpb24uamF2YVBLAQIUAwoAAAAAAHKtRTap6AJRcQIAAHECAAArAAAAAAAAAAAAAACkgT4sAwBvcmcvam1vY2svbGliL2FjdGlvbi9SZXR1cm5WYWx1ZUFjdGlvbi5qYXZhUEsBAhQDCgAAAAAAY2X3Nk+E0yuyBwAAsgcAACUAAAAAAAAAAAAAAKSB+C4DAG9yZy9qbW9jay9saWIvYWN0aW9uL1Rocm93QWN0aW9uLmphdmFQSwECFAMKAAAAAAByrUU25qX1iA0CAAANAgAAJAAAAAAAAAAAAAAApIHtNgMAb3JnL2ptb2NrL2xpYi9hY3Rpb24vVm9pZEFjdGlvbi5qYXZhUEsBAhQDCgAAAAAA2mjXOKYOMPnkBgAA5AYAADMAAAAAAAAAAAAAAKSBPDkDAG9yZy9qbW9jay9saWIvY29uY3VycmVudC9EZXRlcm1pbmlzdGljRXhlY3V0b3IuamF2YVBLAQIUAwoAAAAAANpo1zhh7JLIySIAAMkiAAA0AAAAAAAAAAAAAACkgXFAAwBvcmcvam1vY2svbGliL2NvbmN1cnJlbnQvRGV0ZXJtaW5pc3RpY1NjaGVkdWxlci5qYXZhUEsBAhQDCgAAAAAA2mjXOKPONJeFAQAAhQEAAEYAAAAAAAAAAAAAAKSBjGMDAG9yZy9qbW9jay9saWIvY29uY3VycmVudC9VbnN1cHBvcnRlZFN5bmNocm9ub3VzT3BlcmF0aW9uRXhjZXB0aW9uLmphdmFQSwECFAMKAAAAAADaaNc4NM9i57gLAAC4CwAAMQAAAAAAAAAAAAAApIF1ZQMAb3JnL2ptb2NrL2xpYi9jb25jdXJyZW50L2ludGVybmFsL0RlbHRhUXVldWUuamF2YVBLAQIUAwoAAAAAAGsDOza8dDnRigAAAIoAAAAiAAAAAAAAAAAAAACkgXxxAwBvcmcvam1vY2svc3ludGF4L0FjdGlvbkNsYXVzZS5qYXZhUEsBAhQDCgAAAAAAwXhMNRtWnhumAQAApgEAAC8AAAAAAAAAAAAAAKSBRnIDAG9yZy9qbW9jay9zeW50YXgvQXJndW1lbnRDb25zdHJhaW50UGhyYXNlcy5qYXZhUEsBAhQDCgAAAAAAFEFCN5jILSYTAgAAEwIAACcAAAAAAAAAAAAAAKSBOXQDAG9yZy9qbW9jay9zeW50YXgvQ2FyZGluYWxpdHlDbGF1c2UuamF2YVBLAQIUAwoAAAAAADWQNTZv0JXy6AAAAOgAAAAiAAAAAAAAAAAAAACkgZF2AwBvcmcvam1vY2svc3ludGF4L01ldGhvZENsYXVzZS5qYXZhUEsBAhQDCgAAAAAAiz47NdkM0AzAAAAAwAAAACYAAAAAAAAAAAAAAKSBuXcDAG9yZy9qbW9jay9zeW50YXgvUGFyYW1ldGVyc0NsYXVzZS5qYXZhUEsBAhQDCgAAAAAAY2b3NrWnSjWtAAAArQAAACQAAAAAAAAAAAAAAKSBvXgDAG9yZy9qbW9jay9zeW50YXgvUmVjZWl2ZXJDbGF1c2UuamF2YVBLAQIUAwoAAAAAAHRIYjbPIFzmzwAAAM8AAAAiAAAAAAAAAAAAAACkgax5AwBvcmcvam1vY2svc3ludGF4L1N0YXRlc0NsYXVzZS5qYXZhUEsFBgAAAACXAJcAlzIAALt6AwAAAA==