시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 512 MB44121317349.856%

문제

N개의 행과 N개의 열로 구성된 2차원 정수 배열 A가 있다. A[r, c]는 r번째 행 c번째 열에 위치한 원소의 값을 나타낸다.

이 배열에 총 M번의 연산을 적용하는 배열 놀이를 생각해보자.

각 연산에 대해  1 <= r1 <= r2 <= N, 1 <= c1 <= c2  <= N, -1,000 <= v <= 1,000을 만족하는 다섯 개의 정수 파라미터 (r1, c1, r2, c2, v)가 주어지는데, 이 연산은 (r1, c1)부터 (r2, c2)까지 사각형 영역에 속한 A[r, c]의 값을 v만큼 더하는 것이다.

예를 들어 N = 3 그리고 A = [ [ 1 2 3 ] [ 4 5 6 ] [ 7 8 9 ] ] 인 2차원 배열을 생각해보자. 아래와 같은 3개의 연산을 순서대로 적용한다고 하자.

  • 연산 1: (r1 = 1, c1 = 1, r2 = 2, c2 = 3, v = 3)
  • 연산 2: (r1 = 2, c1 = 2, r2 = 3, c2 = 2, v = -5)
  • 연산 3: (r1 = 1, c1 = 1, r2 = 3, c2 = 2, v = 1)

연산을 적용하기 전 A는 아래와 같다.

A = [ [ 1 2 3 ]
      [ 4 5 6 ]
      [ 7 8 9 ] ].

연산 1을 적용하면 첫 두 행에 포함된 여섯 개의 원소 값이 바뀌게 되어 아래와 같아진다 (굵게 표시된 수들의 값이 바뀌었다):

A = [ [ 4 5 6 ]
      [ 7 8 9 ]
      [ 7 8 9 ] ].

연산 2를 적용한 후:

A = [ [ 4 5 6 ]
      [ 7 3 9 ]
      [ 7 3 9 ] ].

연산 3을 적용한 후:

A = [ [ 5 6 6 ]
      [ 8 4 9 ]
      [ 8 4 9 ] ].

이렇게 총 3개의 연산을 모두 적용하고 난 후, 당신은 마지막에 얻은 배열의 각 행의 원소들의 합과 각 열의 원소들의 합을 구하고 싶다. 위의 예제의 경우, 행의 원소들의 합은 [17, 21, 21] 이며 (1번 행 부터 3번 행까지) 열의 원소들의 합은 [21, 14, 24] 이다 (1번 열 부터 3번 열 까지).

입력으로 N, M, 2차원 배열 A, 그리고 M개의 연산이 주어졌을 때, 배열에 연산을 모두 적용한 후 해당 배열의 행의 원소들의 합과 열의 원소들의 합을 구하는 프로그램을 작성하시오.

입력

첫 줄에 테스트 케이스의 수 T가 주어진다 (1 <= T <= 10).

각 테스트 케이스에 대하여: 첫 줄에 두 개의 정수 N과 M이 공백으로 구분되어 주어진다 (1 <= N <= 1,000 과 1 <= M <= 1,000 을 만족한다).

다음 N줄에 걸쳐서 2차원 배열 A가 주어지는데, i-번째 줄이 i-번째 행을 나타낸다. 각 줄의 j번째 정수는 j-번째 열의 원소 값을 나타낸다. 배열 A의 각 원소의 값은 1이상 1,000 이하의 정수이다.

다음 M줄에 걸쳐서 각 줄에 다섯 개의 정수 r1, c1, r2, c2, v가 공백으로 구분되어 주어진다. 항상 1 <= r1 <= r2 <= N 그리고 1 <= c1 <= c2 <= N 그리고 -1,000 <= v <= 1,000 을 만족한다. 

출력

각 테스트 케이스에 대해 두 줄에 걸쳐서 정답을 출력해야 한다.

두 줄 중 첫 줄에는 N개의 정수로 표현된 각 행의 합을 공백으로 구분하여 출력하고 (1번 행 부터 N번 행 까지)

둘째 줄에는 N개의 정수로 표현된 각 열의 합을 공백으로 구분하여 출력한다 (1번 열 부터 N번 열 까지).

예제 입력 1

3
3 3
1 2 3
4 5 6
7 8 9
1 1 2 3 3
2 2 3 2 -5
1 1 3 2 1
2 1
10 20
30 40
1 1 2 2 -30
1 3
1000
1 1 1 1 1000
1 1 1 1 -1000
1 1 1 1 1000

예제 출력 1

17 21 21
21 14 24
-30 10
-20 0
2000
2000

힌트

첫 번째 테스트 케이스는 문제에 설명되어있다.

두 번째 테스트 케이스의 경우, 연산을 적용하면 배열이 아래와 같이 바뀐다:

[ [ -20 -10 ]
  [   0  10 ] ].

따라서 행의 원소들 합은 [ -30, 10 ] 그리고 열의 원소들 합은 [ -20, 0 ] 가 된다.

세 번째 테스트 케이스의 경우, 연산을 모두 적용하면 원소 값이 2000인 1x1 배열이 남는다.

Python보다 PyPy의 속도가 대부분의 경우에 더 빠르니, Python으로 시간 초과를 받은 경우 PyPy를 사용하는 것이 좋다.

W3sicHJvYmxlbV9pZCI6IjE3MTIzIiwicHJvYmxlbV9sYW5nIjoiMCIsInRpdGxlIjoiXHViYzMwXHVjNWY0IFx1YjE4MFx1Yzc3NCIsImRlc2NyaXB0aW9uIjoiPHA+Tlx1YWMxY1x1Yzc1OCBcdWQ1ODlcdWFjZmMgTlx1YWMxY1x1Yzc1OCBcdWM1ZjRcdWI4NWMgXHVhZDZjXHVjMTMxXHViNDFjIDJcdWNjMjhcdWM2ZDAgXHVjODE1XHVjMjE4IFx1YmMzMFx1YzVmNCBBXHVhYzAwIFx1Yzc4OFx1YjJlNC4gQVtyLCBjXVx1YjI5NCByXHViYzg4XHVjOWY4IFx1ZDU4OSBjXHViYzg4XHVjOWY4IFx1YzVmNFx1YzVkMCBcdWM3MDRcdWNlNThcdWQ1NWMgXHVjNmQwXHVjMThjXHVjNzU4IFx1YWMxMlx1Yzc0NCBcdWIwOThcdWQwYzBcdWIwYjhcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1Yzc3NCBcdWJjMzBcdWM1ZjRcdWM1ZDAgXHVjZDFkIE1cdWJjODhcdWM3NTggXHVjNWYwXHVjMGIwXHVjNzQ0IFx1YzgwMVx1YzZhOVx1ZDU1OFx1YjI5NCBcdWJjMzBcdWM1ZjQgXHViMTgwXHVjNzc0XHViOTdjIFx1YzBkZFx1YWMwMVx1ZDU3NFx1YmNmNFx1Yzc5MC48XC9wPlxyXG5cclxuPHA+XHVhYzAxIFx1YzVmMFx1YzBiMFx1YzVkMCBcdWIzMDBcdWQ1NzQgJm5ic3A7MSAmbHQ7PSByMSAmbHQ7PSByMiAmbHQ7PSBOLCAxICZsdDs9IGMxICZsdDs9IGMyICZuYnNwOyZsdDs9IE4sIC0xLDAwMCAmbHQ7PSB2ICZsdDs9IDEsMDAwXHVjNzQ0IFx1YjljY1x1Yzg3MVx1ZDU1OFx1YjI5NCBcdWIyZTRcdWMxMmYgXHVhYzFjXHVjNzU4IFx1YzgxNVx1YzIxOCBcdWQzMGNcdWI3N2NcdWJiZjhcdWQxMzAgKHIxLCBjMSwgcjIsIGMyLCB2KVx1YWMwMCBcdWM4ZmNcdWM1YjRcdWM5YzBcdWIyOTRcdWIzNzAsIFx1Yzc3NCBcdWM1ZjBcdWMwYjBcdWM3NDAgKHIxLCBjMSlcdWJkODBcdWQxMzAgKHIyLCBjMilcdWFlNGNcdWM5YzAgXHVjMGFjXHVhYzAxXHVkNjE1IFx1YzYwMVx1YzVlZFx1YzVkMCBcdWMxOGRcdWQ1NWMgQVtyLCBjXVx1Yzc1OCBcdWFjMTJcdWM3NDQgdlx1YjljY1x1ZDA3YyBcdWIzNTRcdWQ1NThcdWIyOTQgXHVhYzgzXHVjNzc0XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWM2MDhcdWI5N2MgXHViNGU0XHVjNWI0IE4gPSAzIFx1YWRmOFx1YjlhY1x1YWNlMCBBID0gWyBbIDEgMiAzIF0gWyA0IDUgNiBdIFsgNyA4IDkgXSBdIFx1Yzc3OCAyXHVjYzI4XHVjNmQwIFx1YmMzMFx1YzVmNFx1Yzc0NCBcdWMwZGRcdWFjMDFcdWQ1NzRcdWJjZjRcdWM3OTAuIFx1YzU0NFx1Yjc5OFx1YzY0MCBcdWFjMTlcdWM3NDAgM1x1YWMxY1x1Yzc1OCBcdWM1ZjBcdWMwYjBcdWM3NDQgXHVjMjFjXHVjMTFjXHViMzAwXHViODVjIFx1YzgwMVx1YzZhOVx1ZDU1Y1x1YjJlNFx1YWNlMCBcdWQ1NThcdWM3OTAuPFwvcD5cclxuXHJcbjx1bD5cclxuXHQ8bGk+XHVjNWYwXHVjMGIwIDE6IChyMSA9IDEsIGMxID0gMSwgcjIgPSAyLCBjMiA9IDMsIHYgPSAzKTxcL2xpPlxyXG5cdDxsaT5cdWM1ZjBcdWMwYjAgMjogKHIxID0gMiwgYzEgPSAyLCByMiA9IDMsIGMyID0gMiwgdiA9IC01KTxcL2xpPlxyXG5cdDxsaT5cdWM1ZjBcdWMwYjAgMzogKHIxID0gMSwgYzEgPSAxLCByMiA9IDMsIGMyID0gMiwgdiA9IDEpPFwvbGk+XHJcbjxcL3VsPlxyXG5cclxuPHA+XHVjNWYwXHVjMGIwXHVjNzQ0IFx1YzgwMVx1YzZhOVx1ZDU1OFx1YWUzMCBcdWM4MDQgQVx1YjI5NCBcdWM1NDRcdWI3OThcdWM2NDAgXHVhYzE5XHViMmU0LjxcL3A+XHJcblxyXG48cHJlPlxyXG5BID0gWyBbIDEgMiAzIF1cclxuICAgICAgWyA0IDUgNiBdXHJcbiAgICAgIFsgNyA4IDkgXSBdLjxcL3ByZT5cclxuXHJcbjxwPlx1YzVmMFx1YzBiMCAxXHVjNzQ0IFx1YzgwMVx1YzZhOVx1ZDU1OFx1YmE3NCBcdWNjYWIgXHViNDUwIFx1ZDU4OVx1YzVkMCBcdWQzZWNcdWQ1NjhcdWI0MWMgXHVjNWVjXHVjMTJmIFx1YWMxY1x1Yzc1OCBcdWM2ZDBcdWMxOGMgXHVhYzEyXHVjNzc0IFx1YmMxNFx1YjAwY1x1YWM4YyBcdWI0MThcdWM1YjQgXHVjNTQ0XHViNzk4XHVjNjQwIFx1YWMxOVx1YzU0NFx1YzljNFx1YjJlNCAoXHVhZDc1XHVhYzhjJm5ic3A7XHVkNDVjXHVjMmRjXHViNDFjIFx1YzIxOFx1YjRlNFx1Yzc1OCBcdWFjMTJcdWM3NzQgXHViYzE0XHViMDBjXHVjNWM4XHViMmU0KTo8XC9wPlxyXG5cclxuPHByZT5cclxuQSA9IFsgWyA8c3Ryb25nPjQgNSA2PFwvc3Ryb25nPiBdXHJcbiAgICAgIFsgPHN0cm9uZz43IDggOTxcL3N0cm9uZz4gXVxyXG4gICAgICBbIDcgOCA5IF0gXS48XC9wcmU+XHJcblxyXG48cD5cdWM1ZjBcdWMwYjAgMlx1Yjk3YyBcdWM4MDFcdWM2YTlcdWQ1NWMgXHVkNmM0OjxcL3A+XHJcblxyXG48cHJlPlxyXG5BID0gWyBbIDQgNSA2IF1cclxuICAgICAgWyA3IDxzdHJvbmc+MzxcL3N0cm9uZz4gOSBdXHJcbiAgICAgIFsgNyA8c3Ryb25nPjM8XC9zdHJvbmc+IDkgXSBdLjxcL3ByZT5cclxuXHJcbjxwPlx1YzVmMFx1YzBiMCAzXHVjNzQ0IFx1YzgwMVx1YzZhOVx1ZDU1YyBcdWQ2YzQ6PFwvcD5cclxuXHJcbjxwcmU+XHJcbkEgPSBbIFsgPHN0cm9uZz41IDY8XC9zdHJvbmc+IDYgXVxyXG4gICAgICBbIDxzdHJvbmc+OCA0PFwvc3Ryb25nPiA5IF1cclxuICAgICAgWyA8c3Ryb25nPjggNDxcL3N0cm9uZz4gOSBdIF0uPFwvcHJlPlxyXG5cclxuPHA+XHVjNzc0XHViODA3XHVhYzhjIFx1Y2QxZCAzXHVhYzFjXHVjNzU4IFx1YzVmMFx1YzBiMFx1Yzc0NCBcdWJhYThcdWI0NTAgXHVjODAxXHVjNmE5XHVkNTU4XHVhY2UwIFx1YjA5YyBcdWQ2YzQsIFx1YjJmOVx1YzJlMFx1Yzc0MCBcdWI5YzhcdWM5YzBcdWI5YzlcdWM1ZDAgXHVjNWJiXHVjNzQwIFx1YmMzMFx1YzVmNFx1Yzc1OCBcdWFjMDEgXHVkNTg5XHVjNzU4IFx1YzZkMFx1YzE4Y1x1YjRlNFx1Yzc1OCBcdWQ1NjlcdWFjZmMgXHVhYzAxIFx1YzVmNFx1Yzc1OCBcdWM2ZDBcdWMxOGNcdWI0ZTRcdWM3NTggXHVkNTY5XHVjNzQ0IFx1YWQ2Y1x1ZDU1OFx1YWNlMCBcdWMyZjZcdWIyZTQuIFx1YzcwNFx1Yzc1OCBcdWM2MDhcdWM4MWNcdWM3NTggXHVhY2JkXHVjNmIwLCBcdWQ1ODlcdWM3NTggXHVjNmQwXHVjMThjXHViNGU0XHVjNzU4IFx1ZDU2OVx1Yzc0MCBbMTcsIDIxLCAyMV0gXHVjNzc0XHViYTcwICgxXHViYzg4IFx1ZDU4OSBcdWJkODBcdWQxMzAgM1x1YmM4OCBcdWQ1ODlcdWFlNGNcdWM5YzApIFx1YzVmNFx1Yzc1OCBcdWM2ZDBcdWMxOGNcdWI0ZTRcdWM3NTggXHVkNTY5XHVjNzQwIFsyMSwgMTQsIDI0XSBcdWM3NzRcdWIyZTQgKDFcdWJjODggXHVjNWY0IFx1YmQ4MFx1ZDEzMCAzXHViYzg4IFx1YzVmNCBcdWFlNGNcdWM5YzApLjxcL3A+XHJcblxyXG48cD5cdWM3ODVcdWI4MjVcdWM3M2NcdWI4NWMgTiwgTSwgMlx1Y2MyOFx1YzZkMCBcdWJjMzBcdWM1ZjQgQSwgXHVhZGY4XHViOWFjXHVhY2UwIE1cdWFjMWNcdWM3NTggXHVjNWYwXHVjMGIwXHVjNzc0IFx1YzhmY1x1YzViNFx1Yzg0Y1x1Yzc0NCBcdWI1NGMsIFx1YmMzMFx1YzVmNFx1YzVkMCBcdWM1ZjBcdWMwYjBcdWM3NDQgXHViYWE4XHViNDUwIFx1YzgwMVx1YzZhOVx1ZDU1YyBcdWQ2YzQgXHVkNTc0XHViMmY5IFx1YmMzMFx1YzVmNFx1Yzc1OCBcdWQ1ODlcdWM3NTggXHVjNmQwXHVjMThjXHViNGU0XHVjNzU4IFx1ZDU2OVx1YWNmYyBcdWM1ZjRcdWM3NTggXHVjNmQwXHVjMThjXHViNGU0XHVjNzU4IFx1ZDU2OVx1Yzc0NCBcdWFkNmNcdWQ1NThcdWIyOTQgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4XHVjNzQ0IFx1Yzc5MVx1YzEzMVx1ZDU1OFx1YzJkY1x1YzYyNC48XC9wPlxyXG4iLCJpbnB1dCI6IjxwPlx1Y2NhYiBcdWM5MDRcdWM1ZDAgXHVkMTRjXHVjMmE0XHVkMmI4IFx1Y2YwMFx1Yzc3NFx1YzJhNFx1Yzc1OCBcdWMyMTggVFx1YWMwMCBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQgKDEgJmx0Oz0gVCAmbHQ7PSAxMCkuPFwvcD5cclxuXHJcbjxwPlx1YWMwMSBcdWQxNGNcdWMyYTRcdWQyYjggXHVjZjAwXHVjNzc0XHVjMmE0XHVjNWQwIFx1YjMwMFx1ZDU1OFx1YzVlYzogXHVjY2FiIFx1YzkwNFx1YzVkMCBcdWI0NTAgXHVhYzFjXHVjNzU4IFx1YzgxNVx1YzIxOCBOXHVhY2ZjIE1cdWM3NzQgXHVhY2Y1XHViYzMxXHVjNzNjXHViODVjIFx1YWQ2Y1x1YmQ4NFx1YjQxOFx1YzViNCBcdWM4ZmNcdWM1YjRcdWM5YzRcdWIyZTQgKDEgJmx0Oz0gTiAmbHQ7PSAxLDAwMCBcdWFjZmMgMSAmbHQ7PSBNICZsdDs9IDEsMDAwIFx1Yzc0NCBcdWI5Y2NcdWM4NzFcdWQ1NWNcdWIyZTQpLjxcL3A+XHJcblxyXG48cD5cdWIyZTRcdWM3NGMgTlx1YzkwNFx1YzVkMCBcdWFjNzhcdWNjZDBcdWMxMWMgMlx1Y2MyOFx1YzZkMCBcdWJjMzBcdWM1ZjQgQVx1YWMwMCBcdWM4ZmNcdWM1YjRcdWM5YzBcdWIyOTRcdWIzNzAsIGktXHViYzg4XHVjOWY4IFx1YzkwNFx1Yzc3NCBpLVx1YmM4OFx1YzlmOCBcdWQ1ODlcdWM3NDQgXHViMDk4XHVkMGMwXHViMGI4XHViMmU0LiBcdWFjMDEgXHVjOTA0XHVjNzU4IGpcdWJjODhcdWM5ZjggXHVjODE1XHVjMjE4XHViMjk0IGotXHViYzg4XHVjOWY4IFx1YzVmNFx1Yzc1OCBcdWM2ZDBcdWMxOGMgXHVhYzEyXHVjNzQ0IFx1YjA5OFx1ZDBjMFx1YjBiOFx1YjJlNC4gXHViYzMwXHVjNWY0IEFcdWM3NTggXHVhYzAxIFx1YzZkMFx1YzE4Y1x1Yzc1OCBcdWFjMTJcdWM3NDAgMVx1Yzc3NFx1YzBjMSAxLDAwMCBcdWM3NzRcdWQ1NThcdWM3NTggXHVjODE1XHVjMjE4XHVjNzc0XHViMmU0LjxcL3A+XHJcblxyXG48cD5cdWIyZTRcdWM3NGMgTVx1YzkwNFx1YzVkMCBcdWFjNzhcdWNjZDBcdWMxMWMgXHVhYzAxIFx1YzkwNFx1YzVkMCBcdWIyZTRcdWMxMmYgXHVhYzFjXHVjNzU4IFx1YzgxNVx1YzIxOCByMSwgYzEsIHIyLCBjMiwgdlx1YWMwMCBcdWFjZjVcdWJjMzFcdWM3M2NcdWI4NWMgXHVhZDZjXHViZDg0XHViNDE4XHVjNWI0IFx1YzhmY1x1YzViNFx1YzljNFx1YjJlNC4gXHVkNTZkXHVjMGMxIDEgJmx0Oz0gcjEgJmx0Oz0gcjIgJmx0Oz0gTiBcdWFkZjhcdWI5YWNcdWFjZTAgMSAmbHQ7PSBjMSAmbHQ7PSBjMiAmbHQ7PSBOIFx1YWRmOFx1YjlhY1x1YWNlMCAtMSwwMDAgJmx0Oz0gdiAmbHQ7PSAxLDAwMCBcdWM3NDQgXHViOWNjXHVjODcxXHVkNTVjXHViMmU0LiZuYnNwOzxcL3A+XHJcbiIsIm91dHB1dCI6IjxwPlx1YWMwMSBcdWQxNGNcdWMyYTRcdWQyYjggXHVjZjAwXHVjNzc0XHVjMmE0XHVjNWQwIFx1YjMwMFx1ZDU3NCBcdWI0NTAgXHVjOTA0XHVjNWQwIFx1YWM3OFx1Y2NkMFx1YzExYyBcdWM4MTVcdWIyZjVcdWM3NDQgXHVjZDljXHViODI1XHVkNTc0XHVjNTdjIFx1ZDU1Y1x1YjJlNC48XC9wPlxyXG5cclxuPHA+XHViNDUwIFx1YzkwNCBcdWM5MTEgXHVjY2FiIFx1YzkwNFx1YzVkMFx1YjI5NCBOXHVhYzFjXHVjNzU4IFx1YzgxNVx1YzIxOFx1Yjg1YyBcdWQ0NWNcdWQ2MDRcdWI0MWMgXHVhYzAxIFx1ZDU4OVx1Yzc1OCBcdWQ1NjlcdWM3NDQgXHVhY2Y1XHViYzMxXHVjNzNjXHViODVjIFx1YWQ2Y1x1YmQ4NFx1ZDU1OFx1YzVlYyBcdWNkOWNcdWI4MjVcdWQ1NThcdWFjZTAgKDFcdWJjODggXHVkNTg5IFx1YmQ4MFx1ZDEzMCBOXHViYzg4IFx1ZDU4OSBcdWFlNGNcdWM5YzApPFwvcD5cclxuXHJcbjxwPlx1YjQ1OFx1YzlmOCBcdWM5MDRcdWM1ZDBcdWIyOTQgTlx1YWMxY1x1Yzc1OCBcdWM4MTVcdWMyMThcdWI4NWMgXHVkNDVjXHVkNjA0XHViNDFjIFx1YWMwMSBcdWM1ZjRcdWM3NTggXHVkNTY5XHVjNzQ0IFx1YWNmNVx1YmMzMVx1YzczY1x1Yjg1YyBcdWFkNmNcdWJkODRcdWQ1NThcdWM1ZWMgXHVjZDljXHViODI1XHVkNTVjXHViMmU0ICgxXHViYzg4IFx1YzVmNCBcdWJkODBcdWQxMzAgTlx1YmM4OCBcdWM1ZjQgXHVhZTRjXHVjOWMwKS48XC9wPlxyXG4iLCJoaW50IjoiPHA+XHVjY2FiIFx1YmM4OFx1YzlmOCBcdWQxNGNcdWMyYTRcdWQyYjggXHVjZjAwXHVjNzc0XHVjMmE0XHViMjk0IFx1YmIzOFx1YzgxY1x1YzVkMCBcdWMxMjRcdWJhODVcdWI0MThcdWM1YjRcdWM3ODhcdWIyZTQuPFwvcD5cclxuXHJcbjxwPlx1YjQ1MCBcdWJjODhcdWM5ZjggXHVkMTRjXHVjMmE0XHVkMmI4IFx1Y2YwMFx1Yzc3NFx1YzJhNFx1Yzc1OCBcdWFjYmRcdWM2YjAsIFx1YzVmMFx1YzBiMFx1Yzc0NCBcdWM4MDFcdWM2YTlcdWQ1NThcdWJhNzQgXHViYzMwXHVjNWY0XHVjNzc0IFx1YzU0NFx1Yjc5OFx1YzY0MCBcdWFjMTlcdWM3NzQgXHViYzE0XHViMDEwXHViMmU0OjxcL3A+XHJcblxyXG48cHJlPlxyXG5bIFsgLTIwIC0xMCBdXHJcbiAgWyAgIDAgIDEwIF0gXS48XC9wcmU+XHJcblxyXG48cD5cdWI1MzBcdWI3N2NcdWMxMWMgXHVkNTg5XHVjNzU4IFx1YzZkMFx1YzE4Y1x1YjRlNCBcdWQ1NjlcdWM3NDAgWyAtMzAsIDEwIF0gXHVhZGY4XHViOWFjXHVhY2UwIFx1YzVmNFx1Yzc1OCBcdWM2ZDBcdWMxOGNcdWI0ZTQgXHVkNTY5XHVjNzQwIFsgLTIwLCAwIF0gXHVhYzAwIFx1YjQxY1x1YjJlNC48XC9wPlxyXG5cclxuPHA+XHVjMTM4IFx1YmM4OFx1YzlmOCBcdWQxNGNcdWMyYTRcdWQyYjggXHVjZjAwXHVjNzc0XHVjMmE0XHVjNzU4IFx1YWNiZFx1YzZiMCwgXHVjNWYwXHVjMGIwXHVjNzQ0IFx1YmFhOFx1YjQ1MCBcdWM4MDFcdWM2YTlcdWQ1NThcdWJhNzQgXHVjNmQwXHVjMThjIFx1YWMxMlx1Yzc3NCAyMDAwXHVjNzc4IDF4MSBcdWJjMzBcdWM1ZjRcdWM3NzQgXHViMGE4XHViMjk0XHViMmU0LjxcL3A+XHJcblxyXG48cD5QeXRob25cdWJjZjRcdWIyZTQgUHlQeVx1Yzc1OCBcdWMxOGRcdWIzYzRcdWFjMDAgXHViMzAwXHViZDgwXHViZDg0XHVjNzU4IFx1YWNiZFx1YzZiMFx1YzVkMCBcdWIzNTQgXHViZTYwXHViOTc0XHViMmM4LCBQeXRob25cdWM3M2NcdWI4NWMgXHVjMmRjXHVhYzA0IFx1Y2QwOFx1YWNmY1x1Yjk3YyBcdWJjMWJcdWM3NDAgXHVhY2JkXHVjNmIwIFB5UHlcdWI5N2MgXHVjMGFjXHVjNmE5XHVkNTU4XHViMjk0IFx1YWM4M1x1Yzc3NCBcdWM4OGJcdWIyZTQuPFwvcD5cclxuIiwib3JpZ2luYWwiOiIxIiwiaHRtbF90aXRsZSI6IjAiLCJwcm9ibGVtX2xhbmdfdGNvZGUiOiJLb3JlYW4ifSx7InByb2JsZW1faWQiOiIxNzEyMyIsInByb2JsZW1fbGFuZyI6IjEiLCJ0aXRsZSI6IkFycmF5IE1hbmlwdWxhdGlvbiIsImRlc2NyaXB0aW9uIjoiPHA+V2UgaGF2ZSBhIDItZGltZW5zaW9uYWwgc3F1YXJlIGFycmF5IEEgd2l0aCBOIHJvd3MgYW5kIE4gY29sdW1ucy4gV2UgZGVub3RlIHRoZSB2YWx1ZSBvZiBhbiBlbGVtZW50IGluIEEgYXQgcm93IHIgYW5kIGNvbHVtbiBjIGJ5IEFbcl1bY10uPFwvcD5cclxuXHJcbjxwPk5vdywgY29uc2lkZXIgYW4gb3BlcmF0aW9uIGRlZmluZWQgYnkgKHIxLCBjMSwgcjIsIGMyLCB2YWwpIHdpdGggMSAmbHQ7PSByMSAmbHQ7PSByMiAmbHQ7PSBOLCAxICZsdDs9IGMxICZsdDs9IGMyICZuYnNwOyZsdDs9IE4sIGFuZCAtMSwwMDAgJmx0Oz0gdmFsICZsdDs9IDEsMDAwLjxcL3A+XHJcblxyXG48cD5UaGlzIG9wZXJhdGlvbiBhZGRzIHZhbCB0byBhbGwgZWxlbWVudHMgb2YgQSBpbnNpZGUgdGhlIHJlY3RhbmdsZSBkZWZpbmVkIGJ5IGl0cyB1cHBlciBsZWZ0IGNvcm5lciAocjEsIGMxKSBhbmQgbG93ZXIgcmlnaHQgY29ybmVyIChyMiwgYzIpLjxcL3A+XHJcblxyXG48cD5Gb3IgaW5zdGFuY2UsIHN1cHBvc2UgdGhhdCBOID0gMyBhbmQgQSA9IFsgWyAxIDIgMyBdIFsgNCA1IDYgXSBbIDcgOCA5IF0gXS4gQ29uc2lkZXIgdGhyZWUgb3BlcmF0aW9ucyB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczo8XC9wPlxyXG5cclxuPHVsPlxyXG5cdDxsaT5PcGVyYXRpb24gMTogKHIxID0gMSwgYzEgPSAxLCByMiA9IDIsIGMyID0gMywgdiA9IDMpPFwvbGk+XHJcblx0PGxpPk9wZXJhdGlvbiAyOiAocjEgPSAyLCBjMSA9IDIsIHIyID0gMywgYzIgPSAyLCB2ID0gLTUpPFwvbGk+XHJcblx0PGxpPk9wZXJhdGlvbiAzOiAocjEgPSAxLCBjMSA9IDEsIHIyID0gMywgYzIgPSAyLCB2ID0gMSk8XC9saT5cclxuPFwvdWw+XHJcblxyXG48cD5CZWZvcmUgYW55IG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQsIHRoZSBhcnJheSBsb29rcyBsaWtlIHRoaXM6PFwvcD5cclxuXHJcbjxwcmU+XHJcbkEgPSBbIFsgMSAyIDMgXVxyXG4gICAgICBbIDQgNSA2IF1cclxuICAgICAgWyA3IDggOSBdIF0uPFwvcHJlPlxyXG5cclxuPHA+QWZ0ZXIgYXBwbHlpbmcgb3BlcmF0aW9uIDEsIHRoZSBzaXggZWxlbWVudHMgaW4gdGhlIGZpcnN0IHR3byByb3dzIG9mIEEgd2lsbCBiZSB1cGRhdGVkIChlbXBoYXNpemVkIGluIGJvbGQgdGV4dCk6PFwvcD5cclxuXHJcbjxwcmU+XHJcbkEgPSBbIFsgPHN0cm9uZz40IDUgNjxcL3N0cm9uZz4gXVxyXG4gICAgICBbIDxzdHJvbmc+NyA4IDk8XC9zdHJvbmc+IF1cclxuICAgICAgWyA3IDggOSBdIF0uPFwvcHJlPlxyXG5cclxuPHA+QWZ0ZXIgYXBwbHlpbmcgb3BlcmF0aW9uIDI6PFwvcD5cclxuXHJcbjxwcmU+XHJcbkEgPSBbIFsgNCA1IDYgXVxyXG4gICAgICBbIDcgPHN0cm9uZz4zPFwvc3Ryb25nPiA5IF1cclxuICAgICAgWyA3IDxzdHJvbmc+MzxcL3N0cm9uZz4gOSBdIF0uPFwvcHJlPlxyXG5cclxuPHA+QWZ0ZXIgYXBwbHlpbmcgb3BlcmF0aW9uIDM6PFwvcD5cclxuXHJcbjxwcmU+XHJcbkEgPSBbIFsgPHN0cm9uZz41IDY8XC9zdHJvbmc+IDYgXVxyXG4gICAgICBbIDxzdHJvbmc+OCA0PFwvc3Ryb25nPiA5IF1cclxuICAgICAgWyA8c3Ryb25nPjggNDxcL3N0cm9uZz4gOSBdIF0uPFwvcHJlPlxyXG5cclxuPHA+QWZ0ZXIgYXBwbHlpbmcgYWxsIDMgb3BlcmF0aW9ucywgQWxiZXJ0IHdhbnRzIHRvIGNvbXB1dGUgdGhlIHN1bSBvZiBOIGVsZW1lbnRzIGluIGVhY2ggcm93IGFuZCBlYWNoIGNvbHVtbi4gSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSByb3ctc3VtcyBhcmUgZXF1YWwgdG8gWyAxNywgMjEsIDIxIF0gKGZyb20gcm93IDEgdG8gcm93IDMpIGFuZCB0aGUgY29sdW1uLXN1bXMgYXJlIGVxdWFsIHRvIFsgMjEsIDE0LCAyNCBdIChmcm9tIGNvbHVtbiAxIHRvIGNvbHVtbiAzKS4mbmJzcDs8XC9wPlxyXG5cclxuPHA+T3VyIGdvYWwgaXMgdG8gY29tcHV0ZSBhbGwgTiByb3cgc3VtcyBhbmQgTiBjb2x1bW4gc3VtcyBhZnRlciBhcHBseWluZyBNIG9wZXJhdGlvbnMuPFwvcD5cclxuIiwiaW5wdXQiOiI8cD5UaGUgZmlyc3QgbGluZSB3aWxsIGNvbnRhaW4gdGhlIG51bWJlciBvZiB0ZXN0IGNhc2VzIFQgKDEgJmx0Oz0gVCAmbHQ7PSAxMCkuPFwvcD5cclxuXHJcbjxwPiZuYnNwOzxcL3A+XHJcblxyXG48cD5Gb3IgZWFjaCB0ZXN0IGNhc2U6IFRoZSBmaXJzdCBsaW5lIHdpbGwgY29udGFpbiBOIGFuZCBNIHdoZXJlIDEgJmx0Oz0gTiAmbHQ7PSAxLDAwMCBhbmQgMSAmbHQ7PSBNICZsdDs9IDEsMDAwLjxcL3A+XHJcblxyXG48cD4mbmJzcDs8XC9wPlxyXG5cclxuPHA+VGhlIGZvbGxvd2luZyBOIGxpbmVzIHdpbGwgY29udGFpbiBOIGludGVnZXJzLCBlYWNoIHNlcGFyYXRlZCBieSBhIHdoaXRlc3BhY2UuPFwvcD5cclxuXHJcbjxwPlRoZSBpLXRoIGxpbmUgaXMgdGhlIGktdGggcm93IG9mIEEsIHdob3NlIGotdGggaW50ZWdlciBpcyBBW2ldW2pdLjxcL3A+XHJcblxyXG48cD5FYWNoIGVsZW1lbnQgb2YgQSB3aWxsIGJlIGJldHdlZW4gMSBhbmQgMSwwMDAsIGluY2x1c2l2ZS48XC9wPlxyXG5cclxuPHA+RWFjaCBvZiB0aGUgbmV4dCBNIGxpbmVzIGNvbnRhaW5zIGZpdmUgaW50ZWdlcnMgcjEsIGMxLCByMiwgYzIsIGFuZCB2YWwsIHNlcGFyYXRlZCBieSBhIHdoaXRlc3BhY2UsIGRlbm90aW5nIGEgc2luZ2xlIG9wZXJhdGlvbi48XC9wPlxyXG5cclxuPHA+VGhlIHJhbmdlcyBvZiBwYXJhbWV0ZXJzIGFyZSAxICZsdDs9IHIxICZsdDs9IHIyICZsdDs9IE4gYW5kIDEgJmx0Oz0gYzEgJmx0Oz0gYzIgJmx0Oz0gTSBhbmQgLTEsMDAwICZsdDs9IHYgJmx0Oz0gMSwwMDAuPFwvcD5cclxuIiwib3V0cHV0IjoiPHA+Rm9yIGVhY2ggdGVzdCBjYXNlLCBvdXRwdXQgdHdvIGxpbmVzOzxcL3A+XHJcblxyXG48cD5UaGUgZmlyc3QgbGluZSBzaG91bGQgb3V0cHV0IE4gcm93IHN1bXMsIHRoZSBzZWNvbmQgbGluZSBzaG91bGQgb3V0cHV0IE4gY29sdW1uIHN1bXMsIGFmdGVyIGFwcGx5aW5nIGFsbCBvcGVyYXRpb25zLjxcL3A+XHJcbiIsImhpbnQiOiI8cD5UaGUgZmlyc3QgdGVzdCBjYXNlIHdhcyBkZXNjcmliZWQgaW4gdGhlIHByb2JsZW0gc3RhdGVtZW50LjxcL3A+XHJcblxyXG48cD5Gb3IgdGhlIHNlY29uZCBjYXNlLCBhZnRlciB0aGUgb3BlcmF0aW9uLCB0aGUgYXJyYXkgd2lsbCBsb29rIGxpa2U6PFwvcD5cclxuXHJcbjxwcmU+XHJcblsgWyAtMjAgLTEwIF1cclxuICBbICAgMCAgMTAgXSBdLjxcL3ByZT5cclxuXHJcbjxwPlRoZXJlZm9yZSB0aGUgcm93LXN1bXMgYXJlIFsgLTMwLCAxMCBdIGFuZCB0aGUgY29sdW1uLXN1bXMgYXJlIFsgLTIwLCAwIF0uPFwvcD5cclxuXHJcbjxwPkZvciB0aGUgdGhpcmQgY2FzZSwgdGhlIGZpbmFsIGFycmF5IGNvbnRhaW5zIG9uZSBlbGVtZW50IG9mIHZhbHVlIDIwMDAuPFwvcD5cclxuXHJcbjxwPkluIG1vc3QgY2FzZXMsIGV4ZWN1dGlvbiB0aW1lIG9mIHlvdXIgcHl0aG9uIGNvZGUgd2lsbCBiZSBtdWNoIGZhc3RlciB1c2luZyBQeVB5IHRoYW4gUHl0aG9uLCBzbyBpZiB5b3VyIHN1Ym1pc3Npb24gcmVzdWx0ZWQgaW4gVGltZSBMaW1pdCBFeGNlZWRlZCwgdGhlbiBpdCYjMzk7cyByZWNvbW1lbmRlZCB0aGF0IHlvdSBzdWJtaXQgeW91ciBjb2RlIHVzaW5nIFB5UHkuPFwvcD5cclxuIiwib3JpZ2luYWwiOiIwIiwiaHRtbF90aXRsZSI6IjAiLCJwcm9ibGVtX2xhbmdfdGNvZGUiOiJFbmdsaXNoIn1d