시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 128 MB 193 21 16 14.953%

문제

연종이는 리포지토리에서 코드를 리뷰하던 중, 신입사원 규현이가 인터넷에서 찾아서 복사 붙여넣기한 소스를 발견햇다. 만약, 소스 코드의 작성자가 이 사실을 알게될 경우, 연종이의 회사는 거액의 소송을 당할 수 있고, 지금까지 쌓아올린 공든 탑을 한 순간에 무너뜨릴 수 있다. 연종이는 긴급 회의를 열었고, 절대로 인터넷에서 찾은 소스를 사용하지 말 것을 당부했다.

직원들은 연종이의 말을 들을리가 없으므로, 계속해서 인터넷에서 소스를 복사할 것이다. 따라서, 연종이는 다음과 같은 모니터링 시스템을 만들기로 했다.

연종이가 만들 시스템은 다음과 같이 작동한다.

매번 새로운 소스를 제출할 때 마다, 바뀐 소스의 전체 내용을 알려져있는 모든 오픈 소스 리포지토리와 비교한다. 각 파일에서 가장 많이 겹치는 연속된 줄이 기록될 것이다.

이러한 소스 비교는 줄 단위로 이루어진다. 빈 줄, 공백만 포함한 줄은 비교를 하지 않고, 줄의 개수로 세지 않는다. 각 줄의 앞에 있는 공백과 뒤에 있는 공백도 또한 무시되고, 연속된 공백도 공백 1개로 생각한다. 모든 비교는 대소문자를 가린다.

연종이가 만드려고 하는 프로그램을 만드는 프로그램을 작성하시오.

입력

첫째 줄에는 알려져 있는 오픈 소스의 개수 N이 주어진다. (0 ≤ N ≤ 100) 그 다음 줄부터 오픈 소스의 정보가 주어진다. 각 오픈 소스의 첫째 줄에는 파일 이름이 주어진다. 파일 이름은 공백을 포함하지 않으며, 중복되지 않는다. 또한, 길이는 최대 254글자이다. 다음 줄부터 소스의 내용이 주어지며, 소스의 마지막 줄에는 "***END***"가 주어진다. 이것은 소스 코드의 일부가 아니며, 마지막을 표시하기 위한 줄이다.

오픈 소스의 정보가 모두 주어진 이후에는 비교할 소스가 주어진다. 이 소스의 마지막 줄에도 "***END***"가 주어진다.

모든 줄은 254글자 이내이다. 모든 소스 코드는 10000줄 이내이다. 코드와 파일 이름은 ASCII문자 32~126을 포함하며, 입력은 106글자를 넘지 않는다. 

출력

첫째 줄에 가장 많이 겹치는 연속된 줄의 수를 출력한다. (빈 줄은 세지 않는다) 그 다음, 공백을 출력한 뒤 해당하는 소스의 파일 이름을 출력한다. 소스 코드가 여러 개일 경우에는 공백으로 구분하여 출력하며, 입력으로 주어진 순서를 지켜야 한다. 만약, 겹치는 줄이 없을 때는 0을 출력한다.

예제 입력 1

2
HelloWorld.c
int Main() {
    printf("Hello %d\n",i);
}
***END***
Add.c
int Main() {
  for (int i=0; i<10; i++)
    sum += i;
  printf("SUM %d", sum);
}
***END***
int Main() {
  printf("Hello %d\n",i);
  printf("THE END\n");
}
***END***

예제 출력 1

2 HelloWorld.c

힌트

W3sicHJvYmxlbV9pZCI6IjUwNDQiLCJwcm9ibGVtX2xhbmciOiIwIiwidGl0bGUiOiJcdWNmNTRcdWI0ZGMgXHVjODA4XHViM2M0IiwiZGVzY3JpcHRpb24iOiI8cD5cdWM1ZjBcdWM4ODVcdWM3NzRcdWIyOTQgXHViOWFjXHVkM2VjXHVjOWMwXHVkMWEwXHViOWFjXHVjNWQwXHVjMTFjIFx1Y2Y1NFx1YjRkY1x1Yjk3YyBcdWI5YWNcdWJkZjBcdWQ1NThcdWIzNTggXHVjOTExLCBcdWMyZTBcdWM3ODVcdWMwYWNcdWM2ZDAgXHVhZGRjXHVkNjA0XHVjNzc0XHVhYzAwIFx1Yzc3OFx1ZDEzMFx1YjEzN1x1YzVkMFx1YzExYyBcdWNjM2VcdWM1NDRcdWMxMWMgXHViY2Y1XHVjMGFjIFx1YmQ5OVx1YzVlY1x1YjEyM1x1YWUzMFx1ZDU1YyBcdWMxOGNcdWMyYTRcdWI5N2MgXHViYzFjXHVhY2FjXHVkNTg3XHViMmU0LiBcdWI5Y2NcdWM1N2QsIFx1YzE4Y1x1YzJhNCBcdWNmNTRcdWI0ZGNcdWM3NTggXHVjNzkxXHVjMTMxXHVjNzkwXHVhYzAwIFx1Yzc3NCBcdWMwYWNcdWMyZTRcdWM3NDQgXHVjNTRjXHVhYzhjXHViNDIwIFx1YWNiZFx1YzZiMCwgXHVjNWYwXHVjODg1XHVjNzc0XHVjNzU4IFx1ZDY4Y1x1YzBhY1x1YjI5NCBcdWFjNzBcdWM1NjFcdWM3NTggXHVjMThjXHVjMWExXHVjNzQ0IFx1YjJmOVx1ZDU2MCBcdWMyMTggXHVjNzg4XHVhY2UwLCBcdWM5YzBcdWFlMDhcdWFlNGNcdWM5YzAgXHVjMzEzXHVjNTQ0XHVjNjJjXHViOWIwIFx1YWNmNVx1YjRlMCBcdWQwZDFcdWM3NDQgXHVkNTVjIFx1YzIxY1x1YWMwNFx1YzVkMCBcdWJiMzRcdWIxMDhcdWI3MjhcdWI5YjQgXHVjMjE4IFx1Yzc4OFx1YjJlNC4gXHVjNWYwXHVjODg1XHVjNzc0XHViMjk0IFx1YWUzNFx1YWUwOSBcdWQ2OGNcdWM3NThcdWI5N2MgXHVjNWY0XHVjNWM4XHVhY2UwLCBcdWM4MDhcdWIzMDBcdWI4NWMgXHVjNzc4XHVkMTMwXHViMTM3XHVjNWQwXHVjMTFjIFx1Y2MzZVx1Yzc0MCBcdWMxOGNcdWMyYTRcdWI5N2MgXHVjMGFjXHVjNmE5XHVkNTU4XHVjOWMwIFx1YjlkMCBcdWFjODNcdWM3NDQgXHViMmY5XHViZDgwXHVkNTg4XHViMmU0LjxcL3A+XHJcblxyXG5cclxuXHJcbjxwPlx1YzljMVx1YzZkMFx1YjRlNFx1Yzc0MCBcdWM1ZjBcdWM4ODVcdWM3NzRcdWM3NTggXHViOWQwXHVjNzQ0IFx1YjRlNFx1Yzc0NFx1YjlhY1x1YWMwMCBcdWM1YzZcdWM3M2NcdWJiYzBcdWI4NWMsIFx1YWNjNFx1YzE4ZFx1ZDU3NFx1YzExYyBcdWM3NzhcdWQxMzBcdWIxMzdcdWM1ZDBcdWMxMWMgXHVjMThjXHVjMmE0XHViOTdjIFx1YmNmNVx1YzBhY1x1ZDU2MCBcdWFjODNcdWM3NzRcdWIyZTQuIFx1YjUzMFx1Yjc3Y1x1YzExYywgXHVjNWYwXHVjODg1XHVjNzc0XHViMjk0IFx1YjJlNFx1Yzc0Y1x1YWNmYyBcdWFjMTlcdWM3NDAgXHViYWE4XHViMmM4XHVkMTMwXHViOWMxIFx1YzJkY1x1YzJhNFx1ZDE1Y1x1Yzc0NCBcdWI5Y2NcdWI0ZTRcdWFlMzBcdWI4NWMgXHVkNTg4XHViMmU0LjxcL3A+XHJcblxyXG5cclxuXHJcbjxwPlx1YzVmMFx1Yzg4NVx1Yzc3NFx1YWMwMCBcdWI5Y2NcdWI0ZTQgXHVjMmRjXHVjMmE0XHVkMTVjXHVjNzQwIFx1YjJlNFx1Yzc0Y1x1YWNmYyBcdWFjMTlcdWM3NzQgXHVjNzkxXHViM2Q5XHVkNTVjXHViMmU0LjxcL3A+XHJcblxyXG5cclxuXHJcbjxwPlx1YjllNFx1YmM4OCBcdWMwYzhcdWI4NWNcdWM2YjQgXHVjMThjXHVjMmE0XHViOTdjIFx1YzgxY1x1Y2Q5Y1x1ZDU2MCBcdWI1NGMgXHViOWM4XHViMmU0LCBcdWJjMTRcdWIwMTAgXHVjMThjXHVjMmE0XHVjNzU4IFx1YzgwNFx1Y2NiNCBcdWIwYjRcdWM2YTlcdWM3NDQgXHVjNTRjXHViODI0XHVjODM4XHVjNzg4XHViMjk0IFx1YmFhOFx1YjRlMCBcdWM2MjRcdWQ1MDggXHVjMThjXHVjMmE0IFx1YjlhY1x1ZDNlY1x1YzljMFx1ZDFhMFx1YjlhY1x1YzY0MCBcdWJlNDRcdWFkNTBcdWQ1NWNcdWIyZTQuIFx1YWMwMSBcdWQzMGNcdWM3N2NcdWM1ZDBcdWMxMWMgXHVhYzAwXHVjN2E1IFx1YjljZVx1Yzc3NCBcdWFjYjlcdWNlNThcdWIyOTQgXHVjNWYwXHVjMThkXHViNDFjIFx1YzkwNFx1Yzc3NCBcdWFlMzBcdWI4NWRcdWI0MjAgXHVhYzgzXHVjNzc0XHViMmU0LjxcL3A+XHJcblxyXG5cclxuXHJcbjxwPlx1Yzc3NFx1YjdlY1x1ZDU1YyBcdWMxOGNcdWMyYTQgXHViZTQ0XHVhZDUwXHViMjk0IFx1YzkwNCBcdWIyZThcdWM3MDRcdWI4NWMgXHVjNzc0XHViOGU4XHVjNWI0XHVjOWM0XHViMmU0LiBcdWJlNDggXHVjOTA0LCBcdWFjZjVcdWJjMzFcdWI5Y2MgXHVkM2VjXHVkNTY4XHVkNTVjIFx1YzkwNFx1Yzc0MCBcdWJlNDRcdWFkNTBcdWI5N2MgXHVkNTU4XHVjOWMwIFx1YzU0YVx1YWNlMCwgXHVjOTA0XHVjNzU4IFx1YWMxY1x1YzIxOFx1Yjg1YyBcdWMxMzhcdWM5YzAgXHVjNTRhXHViMjk0XHViMmU0LiBcdWFjMDEgXHVjOTA0XHVjNzU4IFx1YzU1ZVx1YzVkMCBcdWM3ODhcdWIyOTQgXHVhY2Y1XHViYzMxXHVhY2ZjIFx1YjRhNFx1YzVkMCBcdWM3ODhcdWIyOTQgXHVhY2Y1XHViYzMxXHViM2M0IFx1YjYxMFx1ZDU1YyBcdWJiMzRcdWMyZGNcdWI0MThcdWFjZTAsIFx1YzVmMFx1YzE4ZFx1YjQxYyBcdWFjZjVcdWJjMzFcdWIzYzQgXHVhY2Y1XHViYzMxIDFcdWFjMWNcdWI4NWMgXHVjMGRkXHVhYzAxXHVkNTVjXHViMmU0LiBcdWJhYThcdWI0ZTAgXHViZTQ0XHVhZDUwXHViMjk0IFx1YjMwMFx1YzE4Y1x1YmIzOFx1Yzc5MFx1Yjk3YyBcdWFjMDBcdWI5YjBcdWIyZTQuPFwvcD5cclxuXHJcblxyXG5cclxuPHA+XHVjNWYwXHVjODg1XHVjNzc0XHVhYzAwIFx1YjljY1x1YjRkY1x1YjgyNFx1YWNlMCBcdWQ1NThcdWIyOTQgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzQ0IFx1YjljY1x1YjRkY1x1YjI5NCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NDQgXHVjNzkxXHVjMTMxXHVkNTU4XHVjMmRjXHVjNjI0LjxcL3A+XHJcbiIsImlucHV0IjoiXHJcblxyXG48cD5cdWNjYWJcdWM5ZjggXHVjOTA0XHVjNWQwXHViMjk0IFx1YzU0Y1x1YjgyNFx1YzgzOCBcdWM3ODhcdWIyOTQgXHVjNjI0XHVkNTA4IFx1YzE4Y1x1YzJhNFx1Yzc1OCBcdWFjMWNcdWMyMTggTlx1Yzc3NCBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQuICgwICZsZTsgTiAmbGU7IDEwMCkgXHVhZGY4IFx1YjJlNFx1Yzc0YyBcdWM5MDRcdWJkODBcdWQxMzAgXHVjNjI0XHVkNTA4IFx1YzE4Y1x1YzJhNFx1Yzc1OCBcdWM4MTVcdWJjZjRcdWFjMDAgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiBcdWFjMDEgXHVjNjI0XHVkNTA4IFx1YzE4Y1x1YzJhNFx1Yzc1OCBcdWNjYWJcdWM5ZjggXHVjOTA0XHVjNWQwXHViMjk0IFx1ZDMwY1x1Yzc3YyBcdWM3NzRcdWI5ODRcdWM3NzQgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiBcdWQzMGNcdWM3N2MgXHVjNzc0XHViOTg0XHVjNzQwIFx1YWNmNVx1YmMzMVx1Yzc0NCBcdWQzZWNcdWQ1NjhcdWQ1NThcdWM5YzAgXHVjNTRhXHVjNzNjXHViYTcwLCBcdWM5MTFcdWJjZjVcdWI0MThcdWM5YzAgXHVjNTRhXHViMjk0XHViMmU0LiBcdWI2MTBcdWQ1NWMsIFx1YWUzOFx1Yzc3NFx1YjI5NCBcdWNkNWNcdWIzMDAgMjU0XHVhZTAwXHVjNzkwXHVjNzc0XHViMmU0LiBcdWIyZTRcdWM3NGMgXHVjOTA0XHViZDgwXHVkMTMwIFx1YzE4Y1x1YzJhNFx1Yzc1OCBcdWIwYjRcdWM2YTlcdWM3NzQgXHVjOGZjXHVjNWI0XHVjOWMwXHViYTcwLCBcdWMxOGNcdWMyYTRcdWM3NTggXHViOWM4XHVjOWMwXHViOWM5IFx1YzkwNFx1YzVkMFx1YjI5NCAmcXVvdDsqKipFTkQqKiomcXVvdDtcdWFjMDAgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiBcdWM3NzRcdWFjODNcdWM3NDAgXHVjMThjXHVjMmE0IFx1Y2Y1NFx1YjRkY1x1Yzc1OCBcdWM3N2NcdWJkODBcdWFjMDAgXHVjNTQ0XHViMmM4XHViYTcwLCBcdWI5YzhcdWM5YzBcdWI5YzlcdWM3NDQgXHVkNDVjXHVjMmRjXHVkNTU4XHVhZTMwIFx1YzcwNFx1ZDU1YyBcdWM5MDRcdWM3NzRcdWIyZTQuPFwvcD5cclxuXHJcblxyXG5cclxuPHA+XHVjNjI0XHVkNTA4IFx1YzE4Y1x1YzJhNFx1Yzc1OCBcdWM4MTVcdWJjZjRcdWFjMDAgXHViYWE4XHViNDUwIFx1YzhmY1x1YzViNFx1YzljNCBcdWM3NzRcdWQ2YzRcdWM1ZDBcdWIyOTQgXHViZTQ0XHVhZDUwXHVkNTYwIFx1YzE4Y1x1YzJhNFx1YWMwMCBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQuIFx1Yzc3NCBcdWMxOGNcdWMyYTRcdWM3NTggXHViOWM4XHVjOWMwXHViOWM5IFx1YzkwNFx1YzVkMFx1YjNjNCAmcXVvdDsqKipFTkQqKiomcXVvdDtcdWFjMDAgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LjxcL3A+XHJcblxyXG5cclxuXHJcbjxwPlx1YmFhOFx1YjRlMCBcdWM5MDRcdWM3NDAgMjU0XHVhZTAwXHVjNzkwIFx1Yzc3NFx1YjBiNFx1Yzc3NFx1YjJlNC4gXHViYWE4XHViNGUwIFx1YzE4Y1x1YzJhNCBcdWNmNTRcdWI0ZGNcdWIyOTQgMTAwMDBcdWM5MDQgXHVjNzc0XHViMGI0XHVjNzc0XHViMmU0LiBcdWNmNTRcdWI0ZGNcdWM2NDAgXHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0MCBBU0NJSVx1YmIzOFx1Yzc5MCAzMn4xMjZcdWM3NDQgXHVkM2VjXHVkNTY4XHVkNTU4XHViYTcwLCBcdWM3ODVcdWI4MjVcdWM3NDAgMTA8c3VwPjY8XC9zdXA+XHVhZTAwXHVjNzkwXHViOTdjIFx1YjExOFx1YzljMCBcdWM1NGFcdWIyOTRcdWIyZTQuJm5ic3A7PFwvcD5cclxuIiwib3V0cHV0IjoiPHA+XHVjY2FiXHVjOWY4IFx1YzkwNFx1YzVkMCBcdWFjMDBcdWM3YTUgXHViOWNlXHVjNzc0IFx1YWNiOVx1Y2U1OFx1YjI5NCBcdWM1ZjBcdWMxOGRcdWI0MWMgXHVjOTA0XHVjNzU4IFx1YzIxOFx1Yjk3YyBcdWNkOWNcdWI4MjVcdWQ1NWNcdWIyZTQuIChcdWJlNDggXHVjOTA0XHVjNzQwIFx1YzEzOFx1YzljMCBcdWM1NGFcdWIyOTRcdWIyZTQpIFx1YWRmOCBcdWIyZTRcdWM3NGMsIFx1YWNmNVx1YmMzMVx1Yzc0NCBcdWNkOWNcdWI4MjVcdWQ1NWMgXHViNGE0IFx1ZDU3NFx1YjJmOVx1ZDU1OFx1YjI5NCBcdWMxOGNcdWMyYTRcdWM3NTggXHVkMzBjXHVjNzdjIFx1Yzc3NFx1Yjk4NFx1Yzc0NCBcdWNkOWNcdWI4MjVcdWQ1NWNcdWIyZTQuIFx1YzE4Y1x1YzJhNCBcdWNmNTRcdWI0ZGNcdWFjMDAgXHVjNWVjXHViN2VjIFx1YWMxY1x1Yzc3YyBcdWFjYmRcdWM2YjBcdWM1ZDBcdWIyOTQgXHVhY2Y1XHViYzMxXHVjNzNjXHViODVjIFx1YWQ2Y1x1YmQ4NFx1ZDU1OFx1YzVlYyBcdWNkOWNcdWI4MjVcdWQ1NThcdWJhNzAsIFx1Yzc4NVx1YjgyNVx1YzczY1x1Yjg1YyBcdWM4ZmNcdWM1YjRcdWM5YzQgXHVjMjFjXHVjMTFjXHViOTdjIFx1YzljMFx1Y2YxY1x1YzU3YyBcdWQ1NWNcdWIyZTQuIFx1YjljY1x1YzU3ZCwgXHVhY2I5XHVjZTU4XHViMjk0IFx1YzkwNFx1Yzc3NCBcdWM1YzZcdWM3NDQgXHViNTRjXHViMjk0IDBcdWM3NDQgXHVjZDljXHViODI1XHVkNTVjXHViMmU0LjxcL3A+XHJcbiIsImhpbnQiOiIiLCJvcmlnaW5hbCI6IjAiLCJwcm9ibGVtX2xhbmdfY29kZSI6Ilx1ZDU1Y1x1YWQ2ZFx1YzViNCJ9LHsicHJvYmxlbV9pZCI6IjUwNDQiLCJwcm9ibGVtX2xhbmciOiIxIiwidGl0bGUiOiJDb2RlIFRoZWZ0IiwiZGVzY3JpcHRpb24iOiI8cD5XaGlsZSByZXZpZXdpbmcgY29kZSByZWNlbnRseSBiZWluZyBjaGVja2VkIGludG8gdGhlIHJlcG9zaXRvcnksIEppbSBkaXNjb3ZlcmVkIHRoYXQgc29tZSBlbXBsb3llZXMgbm93IGFuZCB0aGVuIHNlZW1lZCB0byBjb3B5IGNvZGUgcmlnaHQgZnJvbSB0aGUgSW50ZXJuZXQgaW50byB0aGUgY29tcGFueSBjb2RlIGJhc2UuIFRoaXMgd291bGQgYmUgYSBwb3RlbnRpYWwgZGlzYXN0ZXIgYXMgdGhlIGNvbXBhbnkgdGhlbiByaXNrcyBnZXR0aW5nIHN1ZWQgYnkgY29weXJpZ2h0IGhvbGRlcnMgb2YgdGhlIG9yaWdpbmFsIGNvZGUuIFRoZSBvYnZpb3VzIHNvbHV0aW9uLCB0YWxraW5nIHRvIHRoZSBlbXBsb3llZXMgYW5kIGtpbmRseSBhc2sgdGhlbSBub3QgdG8gc3VibWl0IGFueSBzdG9sZW4gY29kZSwgc2VlbWVkIHRvIHNvbHZlIHRoZSBwcm9ibGVtLiBTdGlsbCwgaXQgd2FzIGRlY2lkZWQgdGhhdCBhIHNjcmVlbmluZyBwcm9jZXNzIHNob3VsZCBiZSBpbnRyb2R1Y2VkIHRvIGRldGVjdCBuZXdseSBzdG9sZW4gY29kZS48XC9wPlxyXG5cclxuPHA+VGhlIHNjcmVlbmluZyB3b3VsZCB3b3JrIGFzIGZvbGxvd3M6IEV2ZXJ5IHRpbWUgbmV3IGNvZGUgd2FzIGNoZWNrZWQgaW4sIHRoZSBmdWxsIGNvbnRlbnRzIG9mIHRoZSBjaGFuZ2VkIGxlcyB3aGVyZSBtYXRjaGVkIGFnYWluc3QgYSByZXBvc2l0b3J5IG9mIGtub3duIG9wZW4gc291cmNlIGNvZGUuIEZvciBlYWNoIGxlIHRoZSBsb25nZXN0IG1hdGNoLCBpbiBudW1iZXIgb2YgY29uc2VjdXRpdmUgbGluZXMsIHNob3VsZCBiZSByZXBvcnRlZC48XC9wPlxyXG5cclxuPHA+Q29tcGFyaXNvbiBpcyBkb25lIGxpbmUgYnkgbGluZS4gRW1wdHkgbGluZXMsIGFuZCBsaW5lcyBvbmx5IGNvbnRhaW5pbmcgc3BhY2UsIGFyZSBpZ25vcmVkIGR1cmluZyBjb21wYXJpc29uIGFuZCBub3QgY291bnRlZC4gTGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIHNob3VsZCBiZSBpZ25vcmVkIGNvbXBsZXRlbHkgYW5kIGNvbnNlY3V0aXZlIHNwYWNlIGNoYXJhY3RlcnMgaW5zaWRlIHRoZSBsaW5lcyBhcmUgdHJlYXRlZCBhcyBvbmUgc2luZ2xlIHNwYWNlLiBUaGUgY29tcGFyaXNvbiBpcyBjYXNlLXNlbnNpdGl2ZS48XC9wPlxyXG4iLCJpbnB1dCI6IjxwPlRlc3QgZGF0YSBzdGFydHMgd2l0aCB0aGUgbnVtYmVyIDAgJmxlOyBOICZsZTsgMTAwIG9mIGNvZGUgZnJhZ21lbnRzIGluIHRoZSByZXBvc2l0b3J5LiBUaGVuIGZvbGxvd3MsIGZvciBlYWNoIGNvZGUgZnJhZ21lbnQsIG9uZSBsaW5lIGNvbnRhaW5pbmcgdGhlIGZpbGUgbmFtZSB0aGF0IHRoZSBmcmFnbWVudCB3YXMgZmV0Y2hlZCBmcm9tIGFuZCB0aGUgY29udGVudHMgb2YgdGhlIGZyYWdtZW50IG9uIHN1YnNlcXVlbnQgbGluZXMuIEZpbGUgbmFtZXMgd2lsbCBuZWl0aGVyIGNvbnRhaW4gd2hpdGVzcGFjZSBub3IgYmUgZ3VhcmFudGVlZCB0byBiZSB1bmlxdWUuIFRoZSBuYW1lIGlzIGF0IG1vc3QgMjU0IGNoYXJhY3RlcnMgbG9uZy4gRWFjaCBmcmFnbWVudCBpcyB0ZXJtaW5hdGVkIGJ5ICoqKkVORCoqKiBvbiBhIGxpbmUgYnkgaXRzIG93bi4gVGhpcyBsaW5lIGlzIG5vdCBjb25zaWRlcmVkIGJlaW5nIHBhcnQgb2YgdGhlIGZyYWdtZW50LjxcL3A+XHJcblxyXG48cD5BZnRlciB0aGUgZnJhZ21lbnRzIGluIHRoZSByZXBvc2l0b3J5IGhhdmUgYWxsIGJlZW4gbGlzdGVkLCBjb21lcyB0aGUgYWN0dWFsIGNvZGUgc25pcHBldCB0byBmaW5kIG1hdGNoZXMgZm9yLiBUaGlzIHNuaXBwZXQgaXMgYWxzbyB0ZXJtaW5hdGVkIGJ5ICoqKkVORCoqKiBvbiBhIGxpbmUgYnkgaXRzIG93bi48XC9wPlxyXG5cclxuPHA+TGluZXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgbm8gbG9uZ2VyIHRoYW4gMjU0IGNoYXJhY3RlcnMuIE5vIGNvZGUgZnJhZ21lbnQgd2lsbCBiZSBsb25nZXIgdGhhbiAxMDAwMCBsaW5lcy4gQW55IGNvZGUgYW5kIGZpbGUgbmFtZSBsaW5lcyB3aWxsIG9ubHkgY29udGFpbiB0aGUgQVNDSUkgY2hhcmFjdGVycyAzMi0xMjYuIFRoZSB0b3RhbCBzaXplIG9mIHRoZSBpbnB1dCBmaWxlIHdpbGwgbm90IGV4Y2VlZCAxMDYgY2hhcmFjdGVycy48XC9wPlxyXG4iLCJvdXRwdXQiOiI8cD5Gb3IgZWFjaCB0ZXN0IGNhc2UsIHdyaXRlIHRoZSBudW1iZXIgb2YgbWF0Y2hpbmcgY29uc2VjdXRpdmUgbGluZXMgKGVtcHR5IGxpbmVzIG5vdCBjb3VudGVkKSBpbiBhIGxvbmdlc3QgbWF0Y2ggZnJvbSB0aGUgcmVwb3NpdG9yeSwgZm9sbG93ZWQgYnkgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgZmlsZSBuYW1lcyBvZiBlYWNoIGZyYWdtZW50cyBjb250YWluaW5nIGEgbWF0Y2ggb2YgdGhpcyBsZW5ndGgsIGdpdmVuIGluIHRoZSBvcmRlciB0aGF0IHRoZSBtYXRjaGluZyBmcmFnbWVudHMgd2VyZSBwcmVzZW50ZWQgaW4gdGhlIHJlcG9zaXRvcnkgZGVzY3JpcHRpb24uIElmIG5vIGZyYWdtZW50cyBtYXRjaCwgd3JpdGUgdGhlIG51bWJlciAwIG9uIGEgbGluZSBvZiBpdHMgb3duLjxcL3A+XHJcbiIsImhpbnQiOiIiLCJvcmlnaW5hbCI6IjEiLCJwcm9ibGVtX2xhbmdfY29kZSI6Ilx1YzYwMVx1YzViNCJ9XQ==