시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 128 MB 184 28 25 24.038%

문제

테러 조직 NWERC(New World Ensemble for Rebellious Coders)가 우리 사회에 큰 위협이 되고 있다. 다행히도 우리는 그들에게 들키지 않고 그들의 통신 내용을 가로채는 방법을 알아냈다. 하지만 그들의 통신은 암호화되어 있었다.

우리가 정보원들을 통해 알아낸 사실은, 그들의 메시지는 알파벳 소문자로만 이루어져 있으며 그들의 암호화 방식이 BAPC(Basic Alphabet Permutation Code ; 일대일 치환 방식) 라는 것이다. 암호화 과정에서 모든 같은 알파벳들은 그 알파벳과 동일하거나 다른 단 하나의 문자로 대응되어 암호화된다. 만일 두 문자가 암호화되기 전 다른 문자였다면, 암호화된 문장에서도 두 문자는 명백히 다른 문자로 나타난다.  예를 들면, "hello" 는 "ifmmp" 또는 "holle" 로는 암호화될 수 있지만, "cnoiz" 혹은 "bgrrb" 로는 암호화될 수 없다.

하지만 이 사실만으로는 경우의 수가 너무 많아 암호를 해독할 수가 없기에 그간 암호를 해독하려는 우리의 노력은 매번 수포로 돌아갔다. 그러던 중, 우리의 정보원이 해독된 통신 내용의 일부를 얻어내는 데에 성공했다. 그리고 그 해독된 문장은 아마 우리가 초창기부터 가로채 온 통신문들 중 단 하나에 정확히 대응될 가능성이 굉장히 높다고 확신했다.

이제 우리가 주는 해독된 문장 하나와 암호화된 문장의 목록이 주어지면, 가능한 한 최대한 해독된 형태의 a-z까지의 26개 알파벳의 암호화 표를 찾은 후, 우리가 최근에 가로챈 통신문 X를 해독할 수 있는 데까지 해독하여 출력하는 것이 당신의 임무이다.

X의 어떤 글자에 대한 해독 결과가 단 하나로 정해질 수밖에 없다면 반드시 해독된 문자를 출력해야 하고, 어떤 글자에 대한 해독 결과가 둘 이상일 수 있을 경우엔 해독문에서 해당 문자의 위치에 '?' 를 대신 출력하면 된다. 이 경우, 반드시 해당 문자가 두 문자 이상으로 모순 없이 해독될 수 있어야 한다.

주어진 목록에서 둘 이상의 암호문이 해독문에 대응될 수 있어 어떤 암호문으로부터 알파벳 암호화 표를 작성해야 할 지 알 수 없는 경우에도, 일부 문자는 해독 가능할 수 있음에 유의하라.(예제 3)

입력

첫 줄에 테스트 케이스의 수 T가 주어진다. (T≤100)

각 테스트 케이스는 다음과 같이 구성되어 있다.

  • 정수 N (1≤N≤100) : 암호화된 문장의 갯수
  • 다음 N줄에 걸쳐 문자열 N개 : 암호화된 문장
  • 문자열 1개 : 해독된 문장
  • 문자열 1개 : 해독하고자 하는 통신문 X

모든 문자열은 1개 이상 1000개 이하의 알파벳 소문자로 이루어져 있다.

출력

첫 줄에 X에 대한 해독문을 출력한다.

해독할 수 있는 문자일 경우 해독된 문자를, 해독할 수 없는 문자일 경우 '?' 를 출력하며, 만일 주어진 해독문에 대응되는 암호문이 하나도 없을 경우, 해독문 대신 문자열 "IMPOSSIBLE" 을 출력한다.

예제 입력 1

3
3
mtahovcjqxels
irajsbkticlur
gnubipwdgkryf
aboringsample
rbunyfka
2
ejotydins
xchmrwbcxg
decrypted
dmvenw
2
abccdeb
afccdgf
message
abcdefg

예제 출력 1

problem?
IMPOSSIBLE
m?sa???
W3sicHJvYmxlbV9pZCI6IjkzNjkiLCJwcm9ibGVtX2xhbmciOiIwIiwidGl0bGUiOiJcdWM1NTRcdWQ2MzggXHVhZTY4XHVhZTMwIiwiZGVzY3JpcHRpb24iOiI8cD5cdWQxNGNcdWI3ZWMgXHVjODcwXHVjOWMxJm5ic3A7TldFUkMoTmV3IFdvcmxkIEVuc2VtYmxlIGZvciBSZWJlbGxpb3VzIENvZGVycylcdWFjMDAgXHVjNmIwXHViOWFjIFx1YzBhY1x1ZDY4Y1x1YzVkMCBcdWQwNzAmbmJzcDtcdWM3MDRcdWQ2MTFcdWM3NzQgXHViNDE4XHVhY2UwIFx1Yzc4OFx1YjJlNC4gXHViMmU0XHVkNTg5XHVkNzg4XHViM2M0Jm5ic3A7XHVjNmIwXHViOWFjXHViMjk0IFx1YWRmOFx1YjRlNFx1YzVkMFx1YWM4YyBcdWI0ZTRcdWQwYTRcdWM5YzAgXHVjNTRhXHVhY2UwIFx1YWRmOFx1YjRlNFx1Yzc1OCBcdWQxYjVcdWMyZTAgXHViMGI0XHVjNmE5XHVjNzQ0IFx1YWMwMFx1Yjg1Y1x1Y2M0NFx1YjI5NCBcdWJjMjlcdWJjOTVcdWM3NDQgXHVjNTRjXHVjNTQ0XHViMGM4XHViMmU0LiBcdWQ1NThcdWM5YzBcdWI5Y2MgXHVhZGY4XHViNGU0XHVjNzU4IFx1ZDFiNVx1YzJlMFx1Yzc0MCBcdWM1NTRcdWQ2MzhcdWQ2NTRcdWI0MThcdWM1YjQgXHVjNzg4XHVjNWM4XHViMmU0LjxcL3A+PHA+XHVjNmIwXHViOWFjXHVhYzAwIFx1YzgxNVx1YmNmNFx1YzZkMFx1YjRlNFx1Yzc0NCBcdWQxYjVcdWQ1NzQgXHVjNTRjXHVjNTQ0XHViMGI4IFx1YzBhY1x1YzJlNFx1Yzc0MCwgXHVhZGY4XHViNGU0XHVjNzU4IFx1YmE1NFx1YzJkY1x1YzljMFx1YjI5NCBcdWM1NGNcdWQzMGNcdWJjYjMgXHVjMThjXHViYjM4XHVjNzkwXHViODVjXHViOWNjIFx1Yzc3NFx1YjhlOFx1YzViNFx1YzgzOCBcdWM3ODhcdWM3M2NcdWJhNzAgXHVhZGY4XHViNGU0XHVjNzU4IFx1YzU1NFx1ZDYzOFx1ZDY1NCBcdWJjMjlcdWMyZGRcdWM3NzQgQkFQQyhCYXNpYyBBbHBoYWJldCBQZXJtdXRhdGlvbiBDb2RlIDsgXHVjNzdjXHViMzAwXHVjNzdjIFx1Y2U1OFx1ZDY1OCBcdWJjMjlcdWMyZGQpIFx1Yjc3Y1x1YjI5NCBcdWFjODNcdWM3NzRcdWIyZTQuIFx1YzU1NFx1ZDYzOFx1ZDY1NCBcdWFjZmNcdWM4MTVcdWM1ZDBcdWMxMWMgXHViYWE4XHViNGUwIFx1YWMxOVx1Yzc0MCBcdWM1NGNcdWQzMGNcdWJjYjNcdWI0ZTRcdWM3NDAgXHVhZGY4IFx1YzU0Y1x1ZDMwY1x1YmNiM1x1YWNmYyZuYnNwO1x1YjNkOVx1Yzc3Y1x1ZDU1OFx1YWM3MFx1YjA5OCBcdWIyZTRcdWI5NzggXHViMmU4Jm5ic3A7XHVkNTU4XHViMDk4XHVjNzU4IFx1YmIzOFx1Yzc5MFx1Yjg1YyBcdWIzMDBcdWM3NTFcdWI0MThcdWM1YjQgXHVjNTU0XHVkNjM4XHVkNjU0XHViNDFjXHViMmU0LiBcdWI5Y2NcdWM3N2MgXHViNDUwIFx1YmIzOFx1Yzc5MFx1YWMwMCBcdWM1NTRcdWQ2MzhcdWQ2NTRcdWI0MThcdWFlMzAgXHVjODA0IFx1YjJlNFx1Yjk3OCBcdWJiMzhcdWM3OTBcdWM2MDBcdWIyZTRcdWJhNzQsIFx1YzU1NFx1ZDYzOFx1ZDY1NFx1YjQxYyBcdWJiMzhcdWM3YTVcdWM1ZDBcdWMxMWNcdWIzYzQgXHViNDUwIFx1YmIzOFx1Yzc5MFx1YjI5NCBcdWJhODVcdWJjMzFcdWQ3ODggXHViMmU0XHViOTc4IFx1YmIzOFx1Yzc5MFx1Yjg1YyBcdWIwOThcdWQwYzBcdWIwOWNcdWIyZTQuICZuYnNwO1x1YzYwOFx1Yjk3YyBcdWI0ZTRcdWJhNzQsIFwiaGVsbG9cIiBcdWIyOTQgXCJpZm1tcFwiIFx1YjYxMFx1YjI5NCBcImhvbGxlXCIgXHViODVjXHViMjk0IFx1YzU1NFx1ZDYzOFx1ZDY1NFx1YjQyMCBcdWMyMTggXHVjNzg4XHVjOWMwXHViOWNjLCBcImNub2l6XCIgXHVkNjM5XHVjNzQwIFwiYmdycmJcIiBcdWI4NWNcdWIyOTQgXHVjNTU0XHVkNjM4XHVkNjU0XHViNDIwIFx1YzIxOCBcdWM1YzZcdWIyZTQuPFwvcD48cD5cdWQ1NThcdWM5YzBcdWI5Y2MgXHVjNzc0IFx1YzBhY1x1YzJlNFx1YjljY1x1YzczY1x1Yjg1Y1x1YjI5NCBcdWFjYmRcdWM2YjBcdWM3NTggXHVjMjE4XHVhYzAwIFx1YjEwOFx1YmIzNCBcdWI5Y2VcdWM1NDQgXHVjNTU0XHVkNjM4XHViOTdjIFx1ZDU3NFx1YjNjNVx1ZDU2MCBcdWMyMThcdWFjMDAgXHVjNWM2XHVhZTMwXHVjNWQwIFx1YWRmOFx1YWMwNCBcdWM1NTRcdWQ2MzhcdWI5N2MgXHVkNTc0XHViM2M1XHVkNTU4XHViODI0XHViMjk0IFx1YzZiMFx1YjlhY1x1Yzc1OCBcdWIxNzhcdWI4MjVcdWM3NDAgXHViOWU0XHViYzg4IFx1YzIxOFx1ZDNlY1x1Yjg1YyBcdWIzY2NcdWM1NDRcdWFjMTRcdWIyZTQuIFx1YWRmOFx1YjdlY1x1YjM1OCBcdWM5MTEsIFx1YzZiMFx1YjlhY1x1Yzc1OCBcdWM4MTVcdWJjZjRcdWM2ZDBcdWM3NzQgXHVkNTc0XHViM2M1XHViNDFjIFx1ZDFiNVx1YzJlMCBcdWIwYjRcdWM2YTlcdWM3NTggXHVjNzdjXHViZDgwXHViOTdjIFx1YzViYlx1YzViNFx1YjBiNFx1YjI5NCBcdWIzNzBcdWM1ZDAgXHVjMTMxXHVhY2Y1XHVkNTg4XHViMmU0LiBcdWFkZjhcdWI5YWNcdWFjZTAgXHVhZGY4Jm5ic3A7XHVkNTc0XHViM2M1XHViNDFjIFx1YmIzOFx1YzdhNVx1Yzc0MCZuYnNwO1x1YzU0NFx1YjljOCBcdWM2YjBcdWI5YWNcdWFjMDAgXHVjZDA4XHVjYzNkXHVhZTMwXHViZDgwXHVkMTMwIFx1YWMwMFx1Yjg1Y1x1Y2M0NCBcdWM2MjggXHVkMWI1XHVjMmUwXHViYjM4XHViNGU0IFx1YzkxMSBcdWIyZTggXHVkNTU4XHViMDk4XHVjNWQwIFx1YzgxNVx1ZDY1NVx1ZDc4OCBcdWIzMDBcdWM3NTFcdWI0MjAgXHVhYzAwXHViMmE1XHVjMTMxXHVjNzc0IFx1YWQ0OVx1YzdhNVx1ZDc4OCBcdWIxOTJcdWIyZTRcdWFjZTAgXHVkNjU1XHVjMmUwXHVkNTg4XHViMmU0LjxcL3A+PHA+XHVjNzc0XHVjODFjIFx1YzZiMFx1YjlhY1x1YWMwMCBcdWM4ZmNcdWIyOTQgXHVkNTc0XHViM2M1XHViNDFjIFx1YmIzOFx1YzdhNSBcdWQ1NThcdWIwOThcdWM2NDAmbmJzcDtcdWM1NTRcdWQ2MzhcdWQ2NTRcdWI0MWMgXHViYjM4XHVjN2E1XHVjNzU4IFx1YmFhOVx1Yjg1ZFx1Yzc3NCBcdWM4ZmNcdWM1YjRcdWM5YzBcdWJhNzQsIFx1YWMwMFx1YjJhNVx1ZDU1YyBcdWQ1NWMgXHVjZDVjXHViMzAwXHVkNTVjIFx1ZDU3NFx1YjNjNVx1YjQxYyBcdWQ2MTVcdWQwZGNcdWM3NTgmbmJzcDthLXpcdWFlNGNcdWM5YzBcdWM3NTggMjZcdWFjMWMmbmJzcDtcdWM1NGNcdWQzMGNcdWJjYjNcdWM3NTggXHVjNTU0XHVkNjM4XHVkNjU0Jm5ic3A7XHVkNDVjXHViOTdjIFx1Y2MzZVx1Yzc0MCBcdWQ2YzQsJm5ic3A7XHVjNmIwXHViOWFjXHVhYzAwIFx1Y2Q1Y1x1YWRmY1x1YzVkMCBcdWFjMDBcdWI4NWNcdWNjNDggXHVkMWI1XHVjMmUwXHViYjM4IFhcdWI5N2MgXHVkNTc0XHViM2M1XHVkNTYwIFx1YzIxOCBcdWM3ODhcdWIyOTQgXHViMzcwXHVhZTRjXHVjOWMwIFx1ZDU3NFx1YjNjNVx1ZDU1OFx1YzVlYyBcdWNkOWNcdWI4MjVcdWQ1NThcdWIyOTQgXHVhYzgzXHVjNzc0IFx1YjJmOVx1YzJlMFx1Yzc1OCBcdWM3ODRcdWJiMzRcdWM3NzRcdWIyZTQuPFwvcD48cD5YXHVjNzU4IFx1YzViNFx1YjVhNCBcdWFlMDBcdWM3OTBcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDU3NFx1YjNjNSBcdWFjYjBcdWFjZmNcdWFjMDAmbmJzcDtcdWIyZTgmbmJzcDtcdWQ1NThcdWIwOThcdWI4NWMgXHVjODE1XHVkNTc0XHVjOWM4IFx1YzIxOFx1YmMxNlx1YzVkMCBcdWM1YzZcdWIyZTRcdWJhNzQgXHViYzE4XHViNGRjXHVjMmRjIFx1ZDU3NFx1YjNjNVx1YjQxYyBcdWJiMzhcdWM3OTBcdWI5N2MgXHVjZDljXHViODI1XHVkNTc0XHVjNTdjIFx1ZDU1OFx1YWNlMCwgXHVjNWI0XHViNWE0IFx1YWUwMFx1Yzc5MFx1YzVkMCBcdWIzMDBcdWQ1NWMmbmJzcDtcdWQ1NzRcdWIzYzUgXHVhY2IwXHVhY2ZjXHVhYzAwIFx1YjQ1OCBcdWM3NzRcdWMwYzFcdWM3N2MgXHVjMjE4IFx1Yzc4OFx1Yzc0NCBcdWFjYmRcdWM2YjBcdWM1ZDQgXHVkNTc0XHViM2M1XHViYjM4XHVjNWQwXHVjMTFjIFx1ZDU3NFx1YjJmOSBcdWJiMzhcdWM3OTBcdWM3NTggXHVjNzA0XHVjZTU4XHVjNWQwICc/JyZuYnNwO1x1Yjk3YyBcdWIzMDBcdWMyZTAmbmJzcDtcdWNkOWNcdWI4MjVcdWQ1NThcdWJhNzQgXHViNDFjXHViMmU0LiBcdWM3NzQgXHVhY2JkXHVjNmIwLCBcdWJjMThcdWI0ZGNcdWMyZGMgXHVkNTc0XHViMmY5IFx1YmIzOFx1Yzc5MFx1YWMwMCBcdWI0NTAgXHViYjM4XHVjNzkwIFx1Yzc3NFx1YzBjMVx1YzczY1x1Yjg1YyBcdWJhYThcdWMyMWMgXHVjNWM2XHVjNzc0Jm5ic3A7XHVkNTc0XHViM2M1XHViNDIwIFx1YzIxOCBcdWM3ODhcdWM1YjRcdWM1N2MgXHVkNTVjXHViMmU0LjxcL3A+PHA+XHVjOGZjXHVjNWI0XHVjOWM0Jm5ic3A7XHViYWE5XHViODVkXHVjNWQwXHVjMTFjJm5ic3A7XHViNDU4IFx1Yzc3NFx1YzBjMVx1Yzc1OCBcdWM1NTRcdWQ2MzhcdWJiMzhcdWM3NzQgXHVkNTc0XHViM2M1XHViYjM4XHVjNWQwIFx1YjMwMFx1Yzc1MVx1YjQyMCBcdWMyMTggXHVjNzg4XHVjNWI0IFx1YzViNFx1YjVhNCBcdWM1NTRcdWQ2MzhcdWJiMzhcdWM3M2NcdWI4NWNcdWJkODBcdWQxMzAgXHVjNTRjXHVkMzBjXHViY2IzIFx1YzU1NFx1ZDYzOFx1ZDY1NCBcdWQ0NWNcdWI5N2MgXHVjNzkxXHVjMTMxXHVkNTc0XHVjNTdjIFx1ZDU2MCBcdWM5YzAgXHVjNTRjIFx1YzIxOCBcdWM1YzZcdWIyOTQmbmJzcDtcdWFjYmRcdWM2YjBcdWM1ZDBcdWIzYzQsIFx1Yzc3Y1x1YmQ4MCBcdWJiMzhcdWM3OTBcdWIyOTQgXHVkNTc0XHViM2M1IFx1YWMwMFx1YjJhNVx1ZDU2MCBcdWMyMTggXHVjNzg4XHVjNzRjXHVjNWQwIFx1YzcyMFx1Yzc1OFx1ZDU1OFx1Yjc3Yy4oXHVjNjA4XHVjODFjIDMpPFwvcD4iLCJpbnB1dCI6IjxwPlx1Y2NhYiBcdWM5MDRcdWM1ZDAgXHVkMTRjXHVjMmE0XHVkMmI4IFx1Y2YwMFx1Yzc3NFx1YzJhNFx1Yzc1OCBcdWMyMTggVFx1YWMwMCBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQuIChUXHUyMjY0MTAwKTxcL3A+PHA+XHVhYzAxIFx1ZDE0Y1x1YzJhNFx1ZDJiOCBcdWNmMDBcdWM3NzRcdWMyYTRcdWIyOTQgXHViMmU0XHVjNzRjXHVhY2ZjIFx1YWMxOVx1Yzc3NCBcdWFkNmNcdWMxMzFcdWI0MThcdWM1YjQgXHVjNzg4XHViMmU0LjxcL3A+PHVsPjxsaT5cdWM4MTVcdWMyMTggTiAoMVx1MjI2NE5cdTIyNjQxMDApIDogXHVjNTU0XHVkNjM4XHVkNjU0XHViNDFjIFx1YmIzOFx1YzdhNVx1Yzc1OCBcdWFjMmZcdWMyMTg8XC9saT48bGk+XHViMmU0XHVjNzRjIE5cdWM5MDRcdWM1ZDAgXHVhYzc4XHVjY2QwIFx1YmIzOFx1Yzc5MFx1YzVmNCBOXHVhYzFjIDogXHVjNTU0XHVkNjM4XHVkNjU0XHViNDFjIFx1YmIzOFx1YzdhNTxcL2xpPjxsaT5cdWJiMzhcdWM3OTBcdWM1ZjQgMVx1YWMxYyA6IFx1ZDU3NFx1YjNjNVx1YjQxYyBcdWJiMzhcdWM3YTU8XC9saT48bGk+XHViYjM4XHVjNzkwXHVjNWY0IDFcdWFjMWMgOiBcdWQ1NzRcdWIzYzVcdWQ1NThcdWFjZTBcdWM3OTAgXHVkNTU4XHViMjk0IFx1ZDFiNVx1YzJlMFx1YmIzOCBYPFwvbGk+PFwvdWw+PHA+XHViYWE4XHViNGUwIFx1YmIzOFx1Yzc5MFx1YzVmNFx1Yzc0MCAxXHVhYzFjIFx1Yzc3NFx1YzBjMSAxMDAwXHVhYzFjIFx1Yzc3NFx1ZDU1OFx1Yzc1OCBcdWM1NGNcdWQzMGNcdWJjYjMgXHVjMThjXHViYjM4XHVjNzkwXHViODVjIFx1Yzc3NFx1YjhlOFx1YzViNFx1YzgzOCBcdWM3ODhcdWIyZTQuPFwvcD4iLCJvdXRwdXQiOiI8cD5cdWNjYWIgXHVjOTA0XHVjNWQwIFhcdWM1ZDAgXHViMzAwXHVkNTVjIFx1ZDU3NFx1YjNjNVx1YmIzOFx1Yzc0NCBcdWNkOWNcdWI4MjVcdWQ1NWNcdWIyZTQuPFwvcD48cD5cdWQ1NzRcdWIzYzVcdWQ1NjAgXHVjMjE4IFx1Yzc4OFx1YjI5NCBcdWJiMzhcdWM3OTBcdWM3N2MgXHVhY2JkXHVjNmIwIFx1ZDU3NFx1YjNjNVx1YjQxYyBcdWJiMzhcdWM3OTBcdWI5N2MsIFx1ZDU3NFx1YjNjNVx1ZDU2MCBcdWMyMTggXHVjNWM2XHViMjk0IFx1YmIzOFx1Yzc5MFx1Yzc3YyBcdWFjYmRcdWM2YjAgJz8nIFx1Yjk3YyBcdWNkOWNcdWI4MjVcdWQ1NThcdWJhNzAsIFx1YjljY1x1Yzc3YyBcdWM4ZmNcdWM1YjRcdWM5YzQmbmJzcDtcdWQ1NzRcdWIzYzVcdWJiMzhcdWM1ZDAgXHViMzAwXHVjNzUxXHViNDE4XHViMjk0IFx1YzU1NFx1ZDYzOFx1YmIzOFx1Yzc3NCBcdWQ1NThcdWIwOThcdWIzYzQgXHVjNWM2XHVjNzQ0IFx1YWNiZFx1YzZiMCwgXHVkNTc0XHViM2M1XHViYjM4IFx1YjMwMFx1YzJlMCBcdWJiMzhcdWM3OTBcdWM1ZjQgXCJJTVBPU1NJQkxFXCIgXHVjNzQ0IFx1Y2Q5Y1x1YjgyNVx1ZDU1Y1x1YjJlNC48XC9wPiIsImhpbnQiOiIiLCJvcmlnaW5hbCI6IjAiLCJwcm9ibGVtX2xhbmdfY29kZSI6Ilx1ZDU1Y1x1YWQ2ZFx1YzViNCJ9LHsicHJvYmxlbV9pZCI6IjkzNjkiLCJwcm9ibGVtX2xhbmciOiIxIiwidGl0bGUiOiJDcmFja2luZyB0aGUgQ29kZSIsImRlc2NyaXB0aW9uIjoiPHA+QSB0ZXJyb3Jpc3Qgb3JnYW5pc2F0aW9uIGtub3duIGFzIHRoZSBOZXcgV29ybGQgRW5zZW1ibGUgZm9yIFJlYmVsbGlvdXMgQ29kZXJzIChOV0VSQyk8YnIgXC8+XHJcbmlzIGEgbWVuYWNlIHRvIG91ciBzb2NpZXR5LiBGb3J0dW5hdGVseSwgd2UgaGF2ZSBmb3VuZCBhIHdheSB0byBpbnRlcmNlcHQgdGhlaXIgY29tbXVuaWNhdGlvbnMgJm5ic3A7d2l0aG91dCB0aGVtIGtub3dpbmcgaXQuIFRoZXJlIGlzIGEgcHJvYmxlbSBob3dldmVyLCBzaW5jZSB0aGVpciBtZXNzYWdlcyBhcmUgZW5jcnlwdGVkLjxcL3A+XHJcblxyXG48cD5XaGF0IHdlIGRvIGtub3cgZnJvbSBpbnRlbGxpZ2VuY2UgaXMgdGhhdCB0aGVpciBtZXNzYWdlcyBjb25zaXN0IG9mIGxvd2VyY2FzZSBsZXR0ZXJzIG9ubHksIGFuZCB0aGF0IHRoZSBlbmNyeXB0aW9uIG1ldGhvZCBpcyB0aGUgQmFzaWMgQWxwaGFiZXQgUGVybXV0YXRpb24gQ29kZSAoQkFQQykuIEluIHRoaXMgY29kZSwgZXZlcnkgc2FtZSBsZXR0ZXIgaXMgcmVwbGFjZWQgd2l0aCBhbm90aGVyIChsb3dlcmNhc2UpIGxldHRlciBmcm9tIHRoZSBhbHBoYWJldCAob3IgcG9zc2libHkgdGhlIHNhbWUgbGV0dGVyKS4gT2J2aW91c2x5LCB0d28gZGlmZmVyZW50IGxldHRlcnMgaW4gdGhlIG9yaWdpbmFsIG1lc3NhZ2UgYXJlIHN0aWxsIGRpZmZlcmVudCBhZnRlciBlbmNyeXB0aW9uLCBzbyB0aGF0IHRoZXJlIGlzIGEgdW5pcXVlIGRlY3J5cHRpb24uIFNvIGZvciBleGFtcGxlLCAmbGRxdW87aGVsbG8mcmRxdW87IG1pZ2h0IGJlIGVuY3J5cHRlZCBhcyAmbGRxdW87aWZtbXAmcmRxdW87IG9yICZsZHF1bztob2xsZSZyZHF1bzssIGJ1dCBub3QgYXMgJmxkcXVvO2Nub2l6JnJkcXVvOyBvciAmbGRxdW87YmdycmImcmRxdW87LjxcL3A+XHJcblxyXG48cD5TdGlsbCwgdGhpcyBsZWF2ZXMgYSBsb3Qgb2YgcG9zc2liaWxpdGllcywgYW5kIG91ciBlZmZvcnRzIHRvIGJyZWFrIHRoZSBjb2RlIGhhdmUgYmVlbiBpbiB2YWluIHNvIGZhci4gRm9ydHVuYXRlbHksIHdlIGhhZCBhIHN0cm9rZSBvZiBsdWNrOiB0aHJvdWdoIGFuIGluZm9ybWFudCwgd2Ugd2VyZSBhYmxlIHRvIGdldCBob2xkIG9mIGEgZGVjcnlwdGVkIG1lc3NhZ2UgRC4gV2UgZG8gbm90IGhhdmUgdGhlIGNvcnJlc3BvbmRpbmcgZW5jcnlwdGVkIG1lc3NhZ2UsIGJ1dCB3ZSBhcmUgZmFpcmx5IGNlcnRhaW4gdGhhdCBpdCBtdXN0IGJlIHNvbWV3aGVyZSBpbiBhIGxpc3Qgb2YgaW50ZXJjZXB0ZWQgZW5jcnlwdGVkIG1lc3NhZ2VzIHdlIGhhdmUuPFwvcD5cclxuXHJcbjxwPllvdXIgdGFzayBpcyB0byB3cml0ZSBhIHByb2dyYW0gd2hpY2gsIGdpdmVuIHRoZSBvcmlnaW5hbCBtZXNzYWdlIEQgYW5kIGEgbGlzdCBvZiBlbmNyeXB0ZWQgbWVzc2FnZXMsIHdvcmtzIG91dCB3aGljaCBlbmNyeXB0ZWQgbGV0dGVyIGJlbG9uZ3MgdG8gd2hpY2ggZGVjcnlwdGVkIGxldHRlciAoYXNzdW1pbmcgdGhhdCBvbmUgb2YgdGhlIGVuY3J5cHRlZCBtZXNzYWdlcyBjb3JyZXNwb25kcyB0byB0aGUgb3JpZ2luYWwgbWVzc2FnZSksIGZvciBhcyBtdWNoIGFzIGlzIHBvc3NpYmxlLjxcL3A+XHJcblxyXG48cD5UaGlzIHNob3VsZCB0aGVuIGJlIHVzZWQgdG8gZGVjcnlwdCBhIGZyZXNobHkgaW50ZXJjZXB0ZWQgZW5jb2RlZCBtZXNzYWdlIFgsIGFzIG11Y2ggYXMgcG9zc2libGUuIFNwZWNpXHVmYjAxY2FsbHksIGVhY2ggbGV0dGVyIG9mIFggZm9yIHdoaWNoIGl0IGNhbiBiZSBkZXRlcm1pbmVkIHdpdGggYWJzb2x1dGUgY2VydGFpbnR5IHdoYXQgaXQgcmVwcmVzZW50cyAmbmRhc2g7IGVpdGhlciBkaXJlY3RseSBvciBkZWR1Y3RpdmVseSAmbmRhc2g7IHNob3VsZCBiZSBkZWNyeXB0ZWQuIEFsbCBvdGhlciBsZXR0ZXJzIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIHF1ZXN0aW9uIG1hcmsuPFwvcD5cclxuXHJcbjxwPk5vdGUgdGhhdCwgZXZlbiB3aGVuIG11bHRpcGxlIG1lc3NhZ2VzIGNhbiBjb3JyZXNwb25kIHRvIEQsIGl0IG1heSBzdGlsbCBiZSBwb3NzaWJsZSB0byBkZWNyeXB0IGNlcnRhaW4gbGV0dGVycyAoc2VlIGZvciBleGFtcGxlIHRoZSB0aGlyZCB0ZXN0IGNhc2UgaW4gdGhlIHNhbXBsZSBpbnB1dCkuPFwvcD5cclxuIiwiaW5wdXQiOiI8cD5PbiB0aGUgXHVmYjAxcnN0IGxpbmUgb25lIHBvc2l0aXZlIG51bWJlcjogdGhlIG51bWJlciBvZiB0ZXN0IGNhc2VzLCBhdCBtb3N0IDEwMC4gQWZ0ZXIgdGhhdCBwZXIgdGVzdCBjYXNlOjxcL3A+XHJcblxyXG48dWw+XHJcblx0PGxpPm9uZSBsaW5lIHdpdGggYSBzaW5nbGUgaW50ZWdlciBuICgxICZsZTsgbiAmbGU7IDEwMCk6IHRoZSBudW1iZXIgb2YgZW5jcnlwdGVkIG1lc3NhZ2VzLjxcL2xpPlxyXG5cdDxsaT5uIGxpbmVzIHdpdGggYSBzaW5nbGUgc3RyaW5nIE08c3ViPmk8XC9zdWI+OiB0aGUgZW5jcnlwdGVkIG1lc3NhZ2VzLjxcL2xpPlxyXG5cdDxsaT5vbmUgbGluZSB3aXRoIGEgc2luZ2xlIHN0cmluZyBEOiB0aGUgZGVjcnlwdGVkIG1lc3NhZ2UsIGFzc3VtZWQgdG8gY29ycmVzcG9uZCB0byBvbmUgb2YgdGhlIGVuY3J5cHRlZCBtZXNzYWdlcy48XC9saT5cclxuXHQ8bGk+b25lIGxpbmUgd2l0aCBhIHNpbmdsZSBzdHJpbmcgWDogdGhlIG1lc3NhZ2UgdG8gYmUgZGVjb2RlZC48XC9saT5cclxuPFwvdWw+XHJcblxyXG48cD5BbGwgc3RyaW5ncyBjb25zaXN0IG9mIGF0IGxlYXN0IDEgYW5kIGF0IG1vc3QgMSAwMDAgbG93ZXJjYXNlIGxldHRlcnMuPFwvcD5cclxuIiwib3V0cHV0IjoiPHA+UGVyIHRlc3QgY2FzZTo8XC9wPlxyXG5cclxuPHVsPlxyXG5cdDxsaT5vbmUgbGluZSB3aXRoIGEgc2luZ2xlIHN0cmluZyBZIC4gRm9yIGVhY2ggbGV0dGVyIGluIFgsIHRoZSBjb3JyZXNwb25kaW5nIGxldHRlciBpbiBZIHNob3VsZCBiZSB0aGUgZGVjcnlwdGVkIGNvdW50ZXJwYXJ0LCBvciBhICZsc3F1bzs/JnJzcXVvOyBpZiBpdCBpcyB1bmtub3duLiBJZiB0aGVyZSBpcyBubyBlbmNyeXB0ZWQgbWVzc2FnZSBNaSB0aGF0IGNvdWxkIHBvc3NpYmx5IGJlIHRoZSBlbmNyeXB0ZWQgdmVyc2lvbiBvZiBELCB0aGVuIHRoZSBzdHJpbmcgc2hvdWxkIGJlICZsZHF1bztJTVBPU1NJQkxFJnJkcXVvOyBpbnN0ZWFkLjxcL2xpPlxyXG48XC91bD5cclxuIiwiaGludCI6IiIsIm9yaWdpbmFsIjoiMSIsInByb2JsZW1fbGFuZ19jb2RlIjoiXHVjNjAxXHVjNWI0In1d