2021-06-10 14:52:51 +00:00
var _cartname = [ ` drip.p8 ` ] ;
var _cdpos = 0 ; var iii = 0 ; var ciii = 0 ;
var _cartdat = [
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 128 , 136 , 136 , 8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 160 , 0 , 0 , 0 , 0 , 160 , 170 , 0 , 0 , 0 , 10 , 0 , 0 , 112 , 7 , 119 , 7 , 112 , 119 , 0 , 0 , 0 , 6 , 0 , 0 , 0 , 6 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 0 , 0 , 128 , 136 , 136 , 8 , 128 , 136 , 136 , 8 , 136 , 136 , 136 , 136 , 128 , 136 , 136 , 8 , 128 , 136 , 136 , 0 , 0 , 0 , 0 , 0 , 128 , 136 , 136 , 8 , 170 , 10 , 0 , 0 , 0 , 160 , 160 , 0 , 0 , 0 , 10 , 0 , 112 , 119 , 119 , 103 , 119 , 119 , 119 , 7 , 0 , 0 , 6 , 0 , 0 , 0 , 6 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 0 , 0 , 136 , 136 , 136 , 136 , 136 , 136 , 136 , 136 , 136 , 248 , 255 , 143 , 136 , 136 , 136 , 136 , 136 , 136 , 136 , 8 , 128 , 136 , 136 , 8 , 136 , 31 , 255 , 129 , 160 , 0 , 0 , 0 , 0 , 160 , 160 , 0 , 0 , 0 , 10 , 0 , 119 , 102 , 102 , 102 , 118 , 103 , 119 , 119 , 0 , 96 , 0 , 0 , 0 , 0 , 6 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 0 , 0 , 136 , 248 , 255 , 143 , 136 , 248 , 255 , 143 , 136 , 31 , 255 , 129 , 136 , 248 , 255 , 143 , 248 , 255 , 143 , 8 , 136 , 136 , 136 , 136 , 136 , 255 , 255 , 143 , 0 , 0 , 0 , 0 , 0 , 144 , 154 , 0 , 0 , 0 , 10 , 0 , 103 , 119 , 103 , 102 , 103 , 102 , 102 , 119 , 0 , 96 , 0 , 0 , 0 , 0 , 6 , 0 , 0 , 96 , 0 , 0 ,
0 , 0 , 0 , 0 , 136 , 31 , 255 , 129 , 136 , 31 , 255 , 129 , 128 , 255 , 255 , 15 , 136 , 31 , 255 , 129 , 24 , 255 , 241 , 8 , 136 , 248 , 255 , 143 , 136 , 255 , 255 , 143 , 0 , 0 , 0 , 0 , 0 , 0 , 10 , 0 , 0 , 0 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 6 , 0 , 0 , 0 , 0 , 0 , 128 , 255 , 255 , 15 , 128 , 255 , 255 , 15 , 0 , 51 , 51 , 0 , 128 , 255 , 255 , 15 , 240 , 255 , 255 , 8 , 136 , 255 , 255 , 143 , 128 , 51 , 51 , 8 , 0 , 0 , 0 , 0 , 0 , 144 , 10 , 0 , 0 , 0 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 6 , 0 , 0 , 0 , 0 , 0 , 0 , 51 , 51 , 0 , 0 , 51 , 51 , 0 , 112 , 0 , 0 , 7 , 112 , 51 , 51 , 0 , 0 , 51 , 51 , 7 , 128 , 31 , 255 , 1 , 0 , 51 , 51 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 10 , 0 , 0 , 0 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 6 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 6 , 0 , 0 , 0 , 0 , 0 , 0 , 7 , 112 , 0 , 0 , 7 , 0 , 7 , 0 , 0 , 0 , 0 , 0 , 0 , 112 , 0 , 0 , 0 , 7 , 0 , 112 , 55 , 51 , 7 , 0 , 7 , 112 , 0 , 0 , 0 , 0 , 0 , 0 , 144 , 10 , 0 , 0 , 0 , 10 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 6 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 6 , 0 ,
85 , 85 , 85 , 85 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 136 , 136 , 0 , 148 , 153 , 153 , 73 , 148 , 153 , 153 , 73 , 148 , 153 , 144 , 73 , 48 , 0 , 11 , 11 , 102 , 86 , 102 , 86 , 48 , 0 , 11 , 11 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 7 , 0 , 0 , 0 , 85 , 85 , 85 , 85 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 128 , 136 , 136 , 8 , 25 , 17 , 17 , 145 , 25 , 17 , 20 , 145 , 25 , 65 , 144 , 145 , 0 , 179 , 51 , 0 , 118 , 86 , 118 , 86 , 0 , 179 , 51 , 0 , 0 , 119 , 0 , 0 , 112 , 7 , 112 , 0 , 112 , 0 , 0 , 112 , 85 , 0 , 0 , 85 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 160 , 170 , 170 , 10 , 0 , 0 , 0 , 0 , 128 , 135 , 136 , 8 , 25 , 17 , 17 , 145 , 25 , 17 , 25 , 145 , 148 , 4 , 64 , 145 , 32 , 136 , 136 , 2 , 118 , 7 , 118 , 7 , 32 , 136 , 136 , 2 , 0 , 119 , 7 , 7 , 112 , 119 , 0 , 0 , 0 , 0 , 0 , 0 , 85 , 0 , 0 , 85 , 0 , 7 , 0 , 7 , 64 , 153 , 153 , 4 , 0 , 0 , 0 , 0 , 154 , 137 , 136 , 168 , 17 , 17 , 17 , 17 , 128 , 136 , 136 , 8 , 25 , 17 , 17 , 145 , 73 , 73 , 64 , 145 , 0 , 0 , 0 , 68 , 128 , 137 , 136 , 8 , 112 , 0 , 112 , 0 , 135 , 137 , 136 , 120 , 112 , 119 , 119 , 7 , 112 , 7 , 0 , 0 , 0 , 0 , 0 , 0 ,
85 , 0 , 0 , 85 , 0 , 7 , 0 , 7 , 0 , 5 , 80 , 0 , 0 , 0 , 0 , 0 , 154 , 136 , 136 , 168 , 1 , 0 , 0 , 16 , 128 , 136 , 136 , 8 , 25 , 17 , 17 , 145 , 25 , 65 , 144 , 148 , 73 , 0 , 0 , 0 , 128 , 136 , 152 , 8 , 112 , 0 , 112 , 0 , 135 , 136 , 152 , 120 , 112 , 119 , 119 , 7 , 0 , 0 , 7 , 0 , 0 , 0 , 0 , 0 , 85 , 0 , 0 , 85 , 96 , 119 , 96 , 119 , 0 , 80 , 5 , 0 , 0 , 0 , 0 , 0 , 170 , 170 , 170 , 170 , 17 , 17 , 17 , 17 , 128 , 136 , 136 , 8 , 25 , 17 , 17 , 145 , 25 , 17 , 25 , 145 , 25 , 4 , 64 , 153 , 128 , 152 , 136 , 8 , 0 , 0 , 0 , 0 , 128 , 152 , 136 , 8 , 112 , 119 , 119 , 7 , 0 , 0 , 112 , 7 , 0 , 0 , 0 , 0 , 85 , 85 , 85 , 85 , 101 , 103 , 101 , 103 , 0 , 5 , 80 , 0 , 0 , 0 , 0 , 0 , 154 , 8 , 128 , 168 , 65 , 68 , 68 , 20 , 0 , 136 , 136 , 0 , 25 , 17 , 17 , 145 , 25 , 65 , 17 , 145 , 25 , 4 , 20 , 145 , 32 , 136 , 136 , 2 , 0 , 0 , 0 , 0 , 32 , 136 , 136 , 2 , 112 , 112 , 119 , 0 , 0 , 112 , 112 , 7 , 112 , 0 , 0 , 7 , 85 , 85 , 85 , 85 , 101 , 102 , 101 , 102 , 0 , 80 , 5 , 0 , 64 , 153 , 153 , 4 , 154 , 136 , 136 , 168 , 65 , 68 , 68 , 20 , 0 , 0 , 0 , 0 , 148 , 153 , 153 , 73 , 148 , 153 , 153 , 73 , 68 , 0 , 148 , 73 , 0 , 130 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 130 , 40 , 0 , 0 , 0 , 0 , 0 , 7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
117 , 119 , 119 , 87 , 117 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 87 , 119 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 119 , 117 , 119 , 119 , 87 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 0 , 0 , 0 , 112 , 119 , 119 , 7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 199 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 124 , 119 , 119 , 119 , 119 , 119 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 5 , 80 , 85 , 85 , 85 , 102 , 7 , 0 , 0 , 119 , 119 , 119 , 119 , 0 , 112 , 119 , 119 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 119 , 199 , 119 , 119 , 119 , 119 , 204 , 204 , 124 , 119 , 119 , 199 , 204 , 204 , 119 , 119 , 119 , 199 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 124 , 119 , 119 , 119 , 119 , 119 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 0 , 0 , 85 , 85 , 85 , 118 , 119 , 7 , 0 , 119 , 119 , 119 , 119 , 0 , 119 , 102 , 7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 119 , 204 , 204 , 119 , 119 , 199 , 204 , 204 , 204 , 124 , 199 , 204 , 204 , 204 , 124 , 119 , 119 , 119 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 119 , 119 , 119 , 199 , 124 , 119 , 85 , 85 , 85 , 85 , 85 , 85 , 5 , 0 , 0 , 80 , 85 , 85 , 102 , 6 , 0 , 0 , 119 , 119 , 51 , 119 , 112 , 118 , 119 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
119 , 204 , 204 , 119 , 119 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 119 , 119 , 119 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 119 , 119 , 119 , 204 , 204 , 119 , 85 , 85 , 85 , 85 , 85 , 85 , 0 , 0 , 0 , 0 , 85 , 85 , 85 , 0 , 0 , 0 , 119 , 119 , 51 , 119 , 112 , 103 , 6 , 0 , 112 , 119 , 119 , 0 , 0 , 0 , 0 , 0 , 119 , 199 , 124 , 119 , 119 , 204 , 119 , 204 , 204 , 204 , 204 , 204 , 204 , 124 , 204 , 119 , 119 , 199 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 124 , 119 , 119 , 204 , 204 , 119 , 85 , 85 , 85 , 85 , 85 , 5 , 0 , 0 , 0 , 0 , 80 , 85 , 102 , 7 , 0 , 0 , 55 , 119 , 51 , 115 , 112 , 119 , 7 , 0 , 112 , 119 , 103 , 7 , 112 , 7 , 0 , 0 , 119 , 119 , 119 , 119 , 119 , 204 , 119 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 119 , 119 , 199 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 124 , 119 , 119 , 124 , 204 , 119 , 85 , 85 , 85 , 85 , 85 , 0 , 0 , 0 , 0 , 0 , 0 , 85 , 118 , 119 , 7 , 0 , 55 , 51 , 187 , 115 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 119 , 0 , 119 , 119 , 7 , 117 , 119 , 119 , 87 , 119 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 119 , 119 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 119 , 119 , 204 , 204 , 119 , 85 , 85 , 85 , 85 , 5 , 0 , 0 , 0 , 0 , 0 , 0 , 80 , 102 , 6 , 0 , 0 , 48 , 51 , 187 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 112 , 119 , 119 ,
119 , 204 , 204 , 119 , 119 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 119 , 117 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 87 , 119 , 199 , 204 , 119 , 85 , 85 , 85 , 85 , 5 , 0 , 0 , 0 , 0 , 0 , 0 , 80 , 0 , 0 , 96 , 102 , 48 , 51 , 51 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 119 , 199 , 204 , 119 , 119 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 199 , 124 , 119 , 5 , 85 , 85 , 85 , 85 , 0 , 0 , 0 , 0 , 0 , 0 , 85 , 0 , 112 , 119 , 103 , 48 , 59 , 51 , 3 , 0 , 0 , 0 , 0 , 0 , 238 , 224 , 14 , 0 , 0 , 0 , 0 , 119 , 199 , 204 , 119 , 119 , 204 , 199 , 204 , 204 , 204 , 204 , 204 , 124 , 199 , 204 , 119 , 119 , 119 , 204 , 124 , 119 , 119 , 119 , 119 , 199 , 204 , 119 , 119 , 119 , 199 , 124 , 119 , 85 , 85 , 0 , 85 , 85 , 5 , 0 , 0 , 0 , 0 , 80 , 85 , 0 , 0 , 112 , 102 , 48 , 51 , 51 , 3 , 0 , 0 , 0 , 0 , 0 , 238 , 238 , 14 , 0 , 0 , 0 , 3 , 119 , 204 , 124 , 119 , 119 , 204 , 204 , 204 , 204 , 204 , 204 , 204 , 124 , 199 , 204 , 119 , 119 , 199 , 204 , 204 , 199 , 119 , 119 , 204 , 204 , 204 , 124 , 119 , 119 , 204 , 124 , 119 , 85 , 85 , 0 , 85 , 85 , 85 , 0 , 0 , 0 , 0 , 85 , 85 , 0 , 0 , 0 , 85 , 48 , 51 , 59 , 3 , 0 , 0 , 0 , 0 , 0 , 224 , 232 , 0 , 0 , 0 , 0 , 11 ,
119 , 204 , 124 , 119 , 119 , 199 , 204 , 204 , 204 , 124 , 199 , 204 , 204 , 204 , 124 , 119 , 119 , 199 , 204 , 204 , 204 , 119 , 119 , 124 , 204 , 204 , 124 , 119 , 119 , 204 , 204 , 119 , 85 , 85 , 85 , 85 , 85 , 85 , 5 , 0 , 0 , 80 , 85 , 85 , 0 , 0 , 96 , 102 , 0 , 51 , 51 , 0 , 0 , 0 , 11 , 0 , 0 , 238 , 238 , 14 , 0 , 0 , 176 , 3 , 119 , 199 , 124 , 119 , 119 , 119 , 204 , 204 , 124 , 119 , 119 , 199 , 204 , 204 , 119 , 119 , 119 , 119 , 204 , 124 , 119 , 119 , 119 , 119 , 199 , 204 , 119 , 119 , 119 , 204 , 204 , 119 , 85 , 80 , 85 , 85 , 85 , 85 , 85 , 0 , 0 , 85 , 85 , 85 , 0 , 112 , 119 , 103 , 0 , 64 , 4 , 0 , 0 , 176 , 0 , 0 , 0 , 238 , 227 , 14 , 48 , 0 , 176 , 0 , 119 , 199 , 124 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 199 , 124 , 119 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 5 , 80 , 85 , 85 , 85 , 0 , 0 , 112 , 102 , 0 , 64 , 4 , 0 , 48 , 176 , 0 , 3 , 0 , 0 , 11 , 0 , 0 , 11 , 59 , 0 , 119 , 204 , 204 , 119 , 117 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 87 , 117 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 87 , 117 , 119 , 119 , 87 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 0 , 0 , 0 , 85 , 0 , 153 , 153 , 0 , 48 , 48 , 3 , 3 , 0 , 0 , 11 , 0 , 0 , 3 , 51 , 0 ,
117 , 119 , 87 , 117 , 119 , 117 , 119 , 87 , 112 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 7 , 112 , 119 , 119 , 7 , 0 , 0 , 0 , 0 , 46 , 46 , 226 , 0 , 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 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 7 , 0 , 112 , 119 , 0 , 0 , 119 , 7 , 0 , 0 , 119 , 119 , 7 , 0 , 119 , 119 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 124 , 199 , 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 , 119 , 119 , 204 , 119 , 119 , 204 , 119 , 119 , 7 , 204 , 119 , 199 , 204 , 124 , 119 , 204 , 204 , 124 , 119 , 112 , 7 , 124 , 119 , 112 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 124 , 199 , 124 , 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 , 119 , 199 , 204 , 204 , 204 , 204 , 124 , 119 , 7 , 124 , 119 , 204 , 204 , 119 , 199 , 204 , 204 , 119 , 199 , 112 , 7 , 119 , 199 , 112 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 204 , 204 , 204 , 204 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 6 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
119 , 204 , 204 , 204 , 204 , 204 , 204 , 119 , 7 , 119 , 7 , 0 , 112 , 119 , 0 , 0 , 112 , 119 , 0 , 112 , 119 , 119 , 0 , 112 , 0 , 32 , 238 , 238 , 0 , 0 , 0 , 0 , 204 , 204 , 204 , 204 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 96 , 96 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 117 , 204 , 119 , 204 , 204 , 124 , 204 , 87 , 119 , 119 , 0 , 0 , 119 , 7 , 0 , 0 , 119 , 7 , 0 , 112 , 119 , 7 , 0 , 112 , 0 , 226 , 238 , 238 , 238 , 238 , 2 , 0 , 204 , 199 , 204 , 204 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 13 , 0 , 6 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 117 , 199 , 119 , 204 , 204 , 204 , 124 , 87 , 7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 192 , 0 , 112 , 7 , 0 , 192 , 112 , 0 , 238 , 238 , 238 , 238 , 238 , 46 , 0 , 204 , 204 , 124 , 204 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 208 , 0 , 0 , 192 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 119 , 199 , 204 , 204 , 204 , 204 , 124 , 119 , 7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 112 , 7 , 0 , 0 , 112 , 0 , 46 , 34 , 34 , 238 , 238 , 238 , 0 , 204 , 204 , 204 , 204 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 192 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
119 , 199 , 204 , 204 , 204 , 204 , 124 , 119 , 7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 112 , 7 , 0 , 0 , 112 , 0 , 238 , 238 , 238 , 238 , 238 , 238 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 192 , 0 , 0 , 0 , 192 , 0 , 96 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 117 , 199 , 204 , 204 , 204 , 204 , 124 , 119 , 7 , 0 , 0 , 192 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 112 , 7 , 204 , 0 , 112 , 0 , 46 , 226 , 34 , 34 , 46 , 226 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 0 , 0 , 12 , 6 , 13 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 117 , 204 , 199 , 204 , 124 , 199 , 204 , 87 , 7 , 0 , 0 , 0 , 0 , 192 , 12 , 0 , 0 , 0 , 0 , 112 , 7 , 204 , 0 , 112 , 0 , 238 , 238 , 238 , 238 , 238 , 238 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 192 , 0 , 0 , 0 , 0 , 0 , 208 , 0 , 208 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 119 , 204 , 204 , 204 , 124 , 199 , 204 , 119 , 7 , 12 , 0 , 0 , 0 , 192 , 12 , 0 , 0 , 0 , 192 , 112 , 7 , 0 , 192 , 112 , 0 , 238 , 46 , 34 , 46 , 226 , 238 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 192 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
119 , 199 , 204 , 204 , 204 , 204 , 124 , 119 , 7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 112 , 7 , 0 , 0 , 112 , 0 , 238 , 238 , 238 , 238 , 238 , 238 , 0 , 85 , 85 , 85 , 85 , 96 , 102 , 102 , 0 , 102 , 102 , 102 , 0 , 102 , 0 , 12 , 0 , 102 , 102 , 102 , 0 , 96 , 102 , 102 , 0 , 102 , 102 , 102 , 0 , 102 , 102 , 102 , 0 , 119 , 119 , 204 , 119 , 119 , 204 , 119 , 119 , 7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 112 , 7 , 12 , 0 , 112 , 0 , 238 , 238 , 238 , 238 , 238 , 238 , 0 , 85 , 85 , 85 , 85 , 102 , 102 , 102 , 6 , 102 , 102 , 102 , 6 , 102 , 192 , 0 , 0 , 102 , 102 , 102 , 6 , 102 , 102 , 102 , 6 , 102 , 102 , 102 , 6 , 102 , 102 , 102 , 6 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 7 , 0 , 0 , 0 , 12 , 0 , 0 , 0 , 0 , 0 , 0 , 112 , 7 , 0 , 0 , 112 , 0 , 238 , 119 , 238 , 126 , 119 , 231 , 0 , 85 , 85 , 85 , 85 , 102 , 0 , 96 , 6 , 102 , 0 , 0 , 0 , 102 , 0 , 0 , 0 , 102 , 0 , 0 , 0 , 102 , 0 , 0 , 0 , 0 , 102 , 0 , 0 , 102 , 0 , 0 , 0 , 117 , 119 , 87 , 119 , 119 , 85 , 119 , 87 , 7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 112 , 7 , 0 , 12 , 112 , 112 , 119 , 119 , 119 , 119 , 119 , 119 , 7 , 85 , 85 , 85 , 85 , 221 , 0 , 0 , 0 , 221 , 221 , 0 , 0 , 221 , 0 , 0 , 0 , 221 , 221 , 0 , 0 , 221 , 221 , 221 , 13 , 0 , 221 , 0 , 0 , 221 , 221 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 112 , 7 , 0 , 0 , 112 , 0 , 119 , 119 , 0 , 5 , 0 , 0 , 0 , 0 , 0 , 0 , 80 , 221 , 0 , 208 , 13 , 221 , 0 , 0 , 0 , 221 , 0 , 0 , 13 , 221 , 0 , 0 , 0 , 0 , 0 , 0 , 13 , 0 , 221 , 0 , 0 , 221 , 0 , 0 , 0 , 0 , 170 , 170 , 170 , 170 , 170 , 170 , 0 , 7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 112 , 7 , 192 , 0 , 112 , 112 , 0 , 0 , 7 , 85 , 0 , 0 , 0 , 0 , 0 , 0 , 85 , 221 , 221 , 221 , 13 , 221 , 221 , 221 , 0 , 221 , 221 , 221 , 13 , 221 , 221 , 221 , 0 , 221 , 221 , 221 , 13 , 0 , 221 , 0 , 0 , 221 , 221 , 221 , 0 , 160 , 153 , 153 , 153 , 153 , 153 , 153 , 10 , 7 , 0 , 0 , 0 , 0 , 0 , 12 , 0 , 0 , 0 , 0 , 112 , 7 , 0 , 0 , 112 , 7 , 119 , 0 , 112 , 85 , 5 , 0 , 0 , 0 , 0 , 80 , 85 , 208 , 221 , 221 , 0 , 221 , 221 , 221 , 13 , 221 , 221 , 221 , 13 , 221 , 221 , 221 , 13 , 208 , 221 , 221 , 0 , 0 , 221 , 0 , 0 , 221 , 221 , 221 , 13 , 154 , 169 , 170 , 170 , 170 , 170 , 154 , 169 , 7 , 0 , 0 , 192 , 12 , 0 , 0 , 0 , 0 , 0 , 0 , 112 , 7 , 0 , 204 , 112 , 7 , 119 , 187 , 112 , 85 , 85 , 0 , 0 , 0 , 0 , 85 , 85 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
154 , 170 , 170 , 170 , 170 , 170 , 170 , 169 , 7 , 0 , 0 , 192 , 12 , 0 , 0 , 0 , 0 , 192 , 0 , 112 , 7 , 0 , 204 , 112 , 7 , 176 , 187 , 112 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 0 , 0 , 0 , 0 , 0 , 0 , 192 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 12 , 0 , 0 , 0 , 0 , 0 , 154 , 153 , 153 , 153 , 153 , 153 , 153 , 169 , 7 , 12 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 112 , 7 , 12 , 0 , 112 , 7 , 176 , 187 , 112 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 0 , 0 , 0 , 0 , 0 , 0 , 12 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 192 , 0 , 0 , 0 , 0 , 0 , 154 , 153 , 153 , 153 , 153 , 153 , 153 , 169 , 7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 112 , 7 , 0 , 0 , 112 , 112 , 0 , 0 , 7 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 0 , 0 , 0 , 0 , 0 , 204 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 12 , 0 , 0 , 0 , 0 , 154 , 153 , 153 , 153 , 153 , 153 , 153 , 169 , 112 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 7 , 112 , 119 , 119 , 7 , 0 , 119 , 119 , 0 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 85 , 0 , 0 , 0 , 0 , 192 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 12 , 0 , 0 , 0 , 0 ,
170 , 170 , 170 , 170 , 170 , 170 , 170 , 170 , 112 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 7 , 112 , 119 , 119 , 7 , 0 , 180 , 187 , 0 , 0 , 180 , 0 , 0 , 0 , 4 , 176 , 187 , 0 , 0 , 0 , 0 , 12 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 12 , 0 , 0 , 0 , 0 , 74 , 73 , 73 , 26 , 161 , 148 , 148 , 164 , 7 , 0 , 119 , 7 , 0 , 0 , 119 , 7 , 0 , 0 , 119 , 119 , 7 , 0 , 119 , 119 , 0 , 180 , 187 , 187 , 0 , 180 , 11 , 0 , 0 , 180 , 187 , 187 , 0 , 0 , 0 , 16 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 12 , 192 , 0 , 0 , 0 , 74 , 73 , 74 , 26 , 161 , 164 , 148 , 164 , 7 , 124 , 119 , 204 , 204 , 124 , 119 , 204 , 204 , 124 , 119 , 112 , 7 , 124 , 119 , 112 , 64 , 2 , 176 , 187 , 64 , 178 , 187 , 187 , 64 , 178 , 187 , 0 , 0 , 0 , 0 , 12 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 12 , 0 , 0 , 74 , 73 , 68 , 170 , 170 , 68 , 148 , 164 , 7 , 119 , 199 , 204 , 204 , 119 , 199 , 204 , 204 , 119 , 199 , 112 , 7 , 119 , 199 , 112 , 64 , 0 , 0 , 0 , 64 , 0 , 187 , 11 , 64 , 0 , 0 , 0 , 0 , 0 , 16 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 16 , 0 , 192 , 0 , 0 ,
74 , 153 , 153 , 170 , 170 , 153 , 153 , 164 , 119 , 119 , 0 , 0 , 112 , 119 , 0 , 0 , 112 , 119 , 0 , 112 , 119 , 119 , 0 , 112 , 64 , 0 , 0 , 0 , 64 , 0 , 0 , 0 , 64 , 0 , 0 , 0 , 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 , 16 , 0 , 0 , 74 , 73 , 68 , 153 , 153 , 68 , 148 , 164 , 119 , 7 , 0 , 0 , 119 , 7 , 0 , 0 , 119 , 7 , 0 , 112 , 119 , 7 , 192 , 112 , 36 , 0 , 0 , 0 , 36 , 0 , 0 , 0 , 36 , 0 , 0 , 0 , 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 , 0 , 1 , 0 , 74 , 73 , 74 , 68 , 68 , 164 , 148 , 164 , 7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 112 , 7 , 0 , 0 , 112 , 4 , 0 , 0 , 0 , 4 , 0 , 0 , 0 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 74 , 73 , 153 , 153 , 153 , 153 , 148 , 164 , 112 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 119 , 7 , 112 , 119 , 119 , 7 , 4 , 0 , 0 , 0 , 4 , 0 , 0 , 0 , 4 , 0 , 0 , 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 , 0 , 0 , 0 , 1 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 36 , 37 , 37 , 37 , 37 , 72 , 37 , 51 , 41 , 0 , 0 , 49 , 50 , 50 , 50 , 37 , 50 , 50 , 50 , 50 , 50 , 37 , 50 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 59 , 32 , 0 , 0 , 49 , 50 , 50 , 37 , 37 , 38 , 0 , 42 , 40 , 56 , 36 , 37 , 37 , 50 , 50 , 50 , 50 , 50 , 50 , 50 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 42 , 16 , 40 , 41 , 0 , 49 , 50 , 50 , 37 , 99 , 99 , 99 , 100 , 82 , 83 , 83 , 83 , 84 , 85 , 0 , 0 , 0 , 85 , 82 , 83 , 37 , 72 , 37 , 37 , 38 , 43 , 0 , 0 , 0 , 0 , 0 , 0 , 36 , 37 , 37 , 37 , 38 , 40 , 40 , 40 , 36 , 37 , 72 , 37 , 37 , 37 , 72 , 37 , 37 , 37 , 37 , 37 , 0 , 0 , 0 , 0 , 0 , 0 , 88 , 104 , 40 , 36 , 72 , 37 , 37 , 37 , 37 , 37 , 27 , 0 , 22 , 0 , 27 , 27 , 27 , 27 , 48 , 27 , 27 , 27 , 27 , 27 , 48 , 27 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 17 , 17 , 32 , 0 , 0 , 0 , 42 , 40 , 36 , 37 , 51 , 0 , 0 , 0 , 42 , 49 , 50 , 51 , 0 , 0 , 41 , 0 , 0 , 56 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 17 , 0 , 0 , 42 , 0 , 0 , 0 , 42 , 40 , 49 , 0 , 0 , 0 , 0 , 98 , 99 , 99 , 99 , 100 , 85 , 0 , 0 , 0 , 85 , 82 , 83 , 37 , 37 , 37 , 72 , 38 , 43 , 58 , 0 , 0 , 0 , 0 , 0 , 36 , 37 , 72 , 37 , 38 , 40 , 56 , 40 , 49 , 50 , 50 , 50 , 50 , 50 , 50 , 50 , 37 , 37 , 72 , 37 ,
0 , 0 , 0 , 0 , 0 , 0 , 42 , 16 , 40 , 49 , 50 , 37 , 37 , 72 , 37 , 37 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 55 , 0 , 0 , 0 , 0 , 0 , 55 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 59 , 52 , 53 , 54 , 0 , 20 , 0 , 0 , 16 , 49 , 38 , 43 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 42 , 0 , 0 , 0 , 0 , 0 , 0 , 59 , 32 , 43 , 0 , 18 , 0 , 0 , 0 , 0 , 42 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 101 , 0 , 0 , 0 , 85 , 98 , 99 , 37 , 37 , 37 , 50 , 51 , 43 , 40 , 41 , 0 , 17 , 17 , 32 , 36 , 37 , 37 , 37 , 38 , 16 , 41 , 0 , 40 , 41 , 0 , 0 , 0 , 0 , 42 , 40 , 49 , 37 , 37 , 37 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 42 , 40 , 40 , 36 , 37 , 37 , 37 , 72 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 27 , 0 , 0 , 0 , 0 , 0 , 27 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 59 , 52 , 53 , 54 , 57 , 0 , 0 , 27 , 38 , 114 , 115 , 115 , 115 , 115 , 115 , 115 , 115 , 115 , 115 , 116 , 17 , 0 , 0 , 22 , 0 , 0 , 0 , 17 , 0 , 0 , 27 , 0 , 59 , 32 , 43 , 0 , 0 , 0 , 22 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 101 , 0 , 0 , 37 , 37 , 51 , 40 , 40 , 40 , 40 , 16 , 58 , 33 , 34 , 34 , 37 , 37 , 37 , 37 , 38 , 40 , 0 , 0 , 42 , 0 , 17 , 17 , 17 , 0 , 0 , 40 , 56 , 36 , 37 , 37 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 57 , 58 , 40 , 40 , 36 , 37 , 37 , 37 , 37 , 0 , 0 , 22 , 0 , 0 , 17 , 0 , 0 , 0 , 0 , 0 , 17 , 0 , 0 , 0 , 0 , 17 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 16 , 40 , 0 , 17 , 37 , 34 , 34 , 34 , 34 , 34 , 34 , 34 , 34 , 34 , 34 , 34 , 35 , 43 , 0 , 0 , 0 , 0 , 59 , 32 , 43 , 0 , 0 , 0 , 0 , 27 , 0 , 0 , 0 , 0 , 0 , 42 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 57 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 72 , 38 , 40 , 40 , 40 , 56 , 40 , 40 , 40 , 49 , 50 , 50 , 37 , 72 , 37 , 37 , 38 , 41 , 0 , 0 , 0 , 17 , 66 , 67 , 68 , 0 , 0 , 42 , 40 , 36 , 37 , 72 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 42 , 40 , 56 , 40 , 36 , 72 , 37 , 37 , 37 , 0 , 0 , 0 , 0 , 59 , 32 , 43 , 57 , 22 , 0 , 59 , 32 , 43 , 0 , 22 , 0 , 39 , 57 , 58 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 27 , 42 , 40 , 57 , 33 , 37 , 72 , 37 , 37 , 37 , 37 , 37 , 50 , 50 , 50 , 50 , 50 , 38 , 43 , 0 , 0 , 0 , 0 , 0 , 27 , 0 , 0 , 0 , 17 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 57 , 0 , 0 , 104 , 40 , 0 , 0 , 58 , 0 , 0 , 0 , 0 , 37 , 38 , 40 , 40 , 16 , 42 , 0 , 42 , 40 , 40 , 41 , 0 , 49 , 50 , 50 , 50 , 38 , 17 , 17 , 17 , 17 , 66 , 83 , 83 , 84 , 0 , 0 , 59 , 33 , 37 , 37 , 37 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 40 , 40 , 49 , 50 , 50 , 50 , 50 , 40 , 0 , 0 , 58 , 0 , 27 , 58 , 40 , 57 , 0 , 0 , 27 , 0 , 0 , 0 , 0 , 55 , 40 , 56 , 57 , 17 , 0 , 0 , 0 , 0 , 0 , 0 , 17 , 58 , 40 , 40 , 49 , 50 , 50 , 50 , 50 , 37 , 72 , 38 , 40 , 41 , 0 , 42 , 16 , 55 , 43 , 0 , 22 , 0 , 0 , 0 , 0 , 0 , 0 , 59 , 32 , 43 , 0 , 0 , 22 , 0 , 0 , 0 , 0 , 0 , 0 , 58 , 88 , 40 , 40 , 104 , 40 , 40 , 40 , 40 , 40 , 57 , 0 , 0 , 0 , 37 , 38 , 56 , 40 , 41 , 0 , 0 , 0 , 0 , 42 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 34 , 34 , 34 , 35 , 98 , 99 , 99 , 100 , 0 , 0 , 59 , 36 , 37 , 37 , 37 , 0 , 0 , 0 , 17 , 17 , 17 , 17 , 58 , 40 , 40 , 16 , 27 , 27 , 27 , 27 , 27 , 40 , 57 , 40 , 40 , 57 , 0 , 40 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 27 , 0 , 42 , 40 , 39 , 17 , 0 , 0 , 0 , 0 , 59 , 39 , 40 , 40 , 56 , 27 , 34 , 34 , 34 , 35 , 49 , 50 , 51 , 22 , 0 , 0 , 104 , 41 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 27 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 104 , 57 , 40 , 40 , 40 , 40 , 16 , 41 , 0 , 0 , 42 , 16 , 40 , 58 , 103 , 104 , 37 , 38 , 40 , 40 , 57 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 37 , 72 , 37 , 37 , 35 , 40 , 56 , 41 , 0 , 0 , 59 , 36 , 72 , 37 , 37 ,
0 , 0 , 104 , 33 , 34 , 34 , 35 , 40 , 56 , 40 , 40 , 57 , 0 , 0 , 0 , 0 , 40 , 40 , 40 , 40 , 40 , 56 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 22 , 0 , 17 , 0 , 58 , 40 , 55 , 39 , 0 , 0 , 0 , 0 , 59 , 55 , 42 , 40 , 41 , 17 , 37 , 37 , 72 , 38 , 56 , 40 , 42 , 0 , 0 , 0 , 42 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 0 , 22 , 40 , 40 , 40 , 42 , 56 , 40 , 40 , 0 , 0 , 0 , 0 , 0 , 40 , 40 , 40 , 40 , 37 , 38 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 37 , 37 , 37 , 37 , 38 , 16 , 42 , 0 , 0 , 0 , 59 , 36 , 37 , 37 , 37 , 0 , 0 , 16 , 49 , 50 , 37 , 37 , 34 , 53 , 53 , 53 , 54 , 0 , 0 , 0 , 0 , 40 , 56 , 0 , 42 , 40 , 40 , 40 , 16 , 57 , 57 , 0 , 0 , 17 , 0 , 0 , 0 , 39 , 40 , 40 , 41 , 27 , 48 , 57 , 0 , 0 , 0 , 0 , 27 , 0 , 42 , 40 , 33 , 37 , 50 , 37 , 38 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 58 , 0 , 0 , 0 , 0 , 0 , 52 , 53 , 53 , 53 , 53 , 53 , 53 , 53 , 53 , 53 , 53 , 53 , 54 , 43 , 0 , 40 , 40 , 41 , 0 , 40 , 40 , 41 , 0 , 96 , 97 , 0 , 58 , 40 , 56 , 40 , 42 , 72 , 38 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 72 , 37 , 37 , 37 , 38 , 41 , 0 , 0 , 17 , 17 , 17 , 36 , 37 , 37 , 37 ,
0 , 0 , 42 , 40 , 40 , 49 , 50 , 38 , 27 , 27 , 27 , 27 , 0 , 0 , 0 , 0 , 41 , 0 , 0 , 0 , 0 , 42 , 40 , 40 , 40 , 40 , 57 , 59 , 39 , 43 , 0 , 0 , 55 , 40 , 16 , 0 , 17 , 48 , 40 , 58 , 0 , 0 , 0 , 17 , 0 , 40 , 40 , 49 , 38 , 1 , 49 , 51 , 22 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 57 , 0 , 0 , 0 , 0 , 32 , 40 , 56 , 40 , 40 , 40 , 32 , 40 , 40 , 40 , 40 , 40 , 39 , 43 , 0 , 56 , 40 , 0 , 0 , 42 , 40 , 61 , 0 , 112 , 113 , 63 , 40 , 40 , 41 , 0 , 0 , 37 , 38 , 0 , 0 , 0 , 0 , 0 , 0 , 57 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 37 , 37 , 37 , 72 , 38 , 0 , 0 , 59 , 33 , 34 , 35 , 49 , 37 , 72 , 37 , 0 , 0 , 0 , 40 , 56 , 41 , 59 , 48 , 0 , 0 , 0 , 0 , 0 , 18 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 40 , 40 , 40 , 59 , 48 , 43 , 0 , 0 , 27 , 42 , 40 , 56 , 39 , 48 , 40 , 16 , 57 , 0 , 0 , 39 , 58 , 40 , 41 , 27 , 38 , 23 , 0 , 0 , 0 , 0 , 0 , 0 , 57 , 0 , 0 , 56 , 40 , 0 , 0 , 0 , 0 , 27 , 42 , 40 , 40 , 16 , 40 , 27 , 42 , 40 , 56 , 42 , 40 , 55 , 43 , 0 , 40 , 40 , 57 , 0 , 0 , 40 , 33 , 34 , 35 , 33 , 34 , 35 , 40 , 0 , 0 , 58 , 50 , 51 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 50 , 50 , 50 , 50 , 50 , 51 , 0 , 0 , 59 , 36 , 37 , 37 , 35 , 49 , 37 , 37 ,
0 , 0 , 0 , 42 , 40 , 0 , 59 , 55 , 0 , 0 , 0 , 0 , 58 , 39 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 17 , 17 , 17 , 17 , 40 , 56 , 59 , 55 , 43 , 0 , 58 , 0 , 0 , 40 , 40 , 55 , 48 , 41 , 0 , 40 , 56 , 0 , 55 , 40 , 56 , 0 , 17 , 38 , 57 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 0 , 0 , 40 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 41 , 22 , 42 , 40 , 0 , 0 , 40 , 22 , 0 , 40 , 40 , 0 , 0 , 16 , 41 , 0 , 0 , 0 , 32 , 49 , 50 , 51 , 36 , 72 , 38 , 40 , 66 , 67 , 67 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 0 , 0 , 88 , 104 , 0 , 0 , 0 , 56 , 40 , 40 , 41 , 0 , 0 , 0 , 0 , 59 , 36 , 37 , 72 , 37 , 35 , 49 , 50 , 0 , 0 , 1 , 0 , 40 , 0 , 0 , 40 , 0 , 0 , 0 , 42 , 40 , 48 , 0 , 0 , 34 , 34 , 35 , 17 , 17 , 33 , 53 , 53 , 54 , 16 , 40 , 40 , 41 , 0 , 0 , 56 , 0 , 0 , 41 , 0 , 27 , 48 , 0 , 0 , 42 , 40 , 0 , 0 , 40 , 40 , 0 , 33 , 38 , 40 , 41 , 0 , 0 , 0 , 0 , 58 , 40 , 41 , 0 , 40 , 40 , 0 , 0 , 0 , 0 , 88 , 104 , 0 , 0 , 40 , 40 , 58 , 40 , 40 , 57 , 0 , 40 , 41 , 22 , 0 , 40 , 0 , 1 , 0 , 0 , 33 , 34 , 34 , 34 , 37 , 37 , 37 , 35 , 82 , 83 , 83 , 0 , 0 , 0 , 63 , 1 , 0 , 0 , 58 , 40 , 0 , 0 , 42 , 16 , 0 , 0 , 0 , 40 , 41 , 0 , 0 , 0 , 0 , 57 , 0 , 59 , 36 , 37 , 37 , 37 , 37 , 34 , 34 ,
64 , 0 , 33 , 34 , 35 , 43 , 0 , 56 , 57 , 18 , 0 , 104 , 56 , 48 , 57 , 0 , 37 , 72 , 37 , 34 , 34 , 38 , 12 , 0 , 42 , 40 , 40 , 40 , 0 , 0 , 58 , 40 , 1 , 0 , 0 , 0 , 58 , 55 , 8 , 0 , 0 , 40 , 57 , 0 , 40 , 41 , 0 , 49 , 38 , 40 , 0 , 0 , 0 , 0 , 0 , 40 , 56 , 0 , 58 , 40 , 16 , 0 , 0 , 0 , 0 , 42 , 40 , 40 , 40 , 41 , 42 , 40 , 40 , 56 , 40 , 40 , 40 , 0 , 0 , 0 , 67 , 67 , 67 , 67 , 68 , 36 , 37 , 72 , 37 , 37 , 37 , 37 , 38 , 82 , 83 , 83 , 0 , 0 , 0 , 33 , 54 , 0 , 0 , 56 , 40 , 57 , 0 , 0 , 40 , 0 , 28 , 0 , 40 , 1 , 61 , 62 , 0 , 58 , 40 , 0 , 59 , 36 , 37 , 37 , 37 , 72 , 37 , 37 , 33 , 35 , 36 , 37 , 38 , 43 , 104 , 40 , 40 , 39 , 40 , 40 , 16 , 48 , 40 , 0 , 37 , 37 , 37 , 37 , 72 , 38 , 0 , 0 , 0 , 40 , 40 , 41 , 0 , 0 , 40 , 40 , 35 , 0 , 0 , 0 , 56 , 40 , 57 , 0 , 0 , 42 , 40 , 16 , 40 , 0 , 0 , 27 , 38 , 56 , 57 , 0 , 0 , 0 , 0 , 40 , 40 , 0 , 40 , 40 , 40 , 57 , 0 , 0 , 0 , 0 , 0 , 56 , 40 , 0 , 0 , 0 , 42 , 40 , 16 , 40 , 0 , 0 , 0 , 0 , 83 , 83 , 83 , 83 , 84 , 36 , 37 , 37 , 37 , 37 , 37 , 72 , 38 , 82 , 83 , 83 , 0 , 0 , 0 , 48 , 66 , 68 , 0 , 40 , 40 , 40 , 0 , 0 , 40 , 57 , 0 , 0 , 34 , 34 , 34 , 35 , 16 , 40 , 56 , 57 , 59 , 36 , 37 , 37 , 37 , 37 , 37 , 37 ,
37 , 37 , 37 , 37 , 37 , 38 , 43 , 27 , 27 , 27 , 49 , 50 , 50 , 37 , 38 , 0 , 72 , 37 , 50 , 50 , 50 , 50 , 50 , 50 , 37 , 37 , 50 , 50 , 50 , 51 , 40 , 40 , 37 , 37 , 37 , 37 , 37 , 37 , 37 , 37 , 37 , 37 , 72 , 37 , 50 , 51 , 43 , 40 , 50 , 50 , 50 , 50 , 50 , 37 , 38 , 40 , 40 , 0 , 0 , 59 , 36 , 37 , 37 , 37 , 37 , 72 , 37 , 37 , 37 , 37 , 37 , 72 , 72 , 37 , 37 , 37 , 38 , 56 , 40 , 36 , 37 , 72 , 37 , 37 , 50 , 51 , 40 , 40 , 41 , 36 , 37 , 50 , 50 , 50 , 37 , 37 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 37 , 37 , 72 , 37 , 38 , 43 , 0 , 0 , 0 , 27 , 27 , 27 , 36 , 38 , 0 , 50 , 51 , 40 , 103 , 0 , 0 , 0 , 40 , 36 , 51 , 43 , 42 , 40 , 16 , 40 , 56 , 37 , 37 , 37 , 72 , 37 , 37 , 50 , 50 , 50 , 50 , 37 , 38 , 27 , 27 , 0 , 56 , 41 , 1 , 0 , 58 , 40 , 36 , 38 , 56 , 41 , 0 , 0 , 59 , 36 , 50 , 50 , 50 , 50 , 50 , 50 , 50 , 50 , 50 , 50 , 50 , 50 , 50 , 50 , 37 , 38 , 16 , 40 , 49 , 37 , 37 , 50 , 51 , 27 , 27 , 16 , 40 , 20 , 49 , 51 , 56 , 40 , 40 , 36 , 72 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
37 , 37 , 37 , 37 , 37 , 38 , 43 , 0 , 0 , 0 , 0 , 0 , 42 , 36 , 38 , 103 , 40 , 40 , 56 , 41 , 0 , 0 , 17 , 42 , 55 , 43 , 0 , 58 , 40 , 39 , 41 , 0 , 37 , 37 , 37 , 37 , 37 , 51 , 27 , 27 , 27 , 27 , 49 , 51 , 0 , 0 , 0 , 40 , 53 , 53 , 53 , 54 , 40 , 36 , 38 , 40 , 20 , 0 , 0 , 59 , 48 , 40 , 42 , 42 , 26 , 40 , 41 , 0 , 42 , 40 , 56 , 40 , 40 , 16 , 40 , 36 , 38 , 0 , 42 , 56 , 37 , 38 , 27 , 27 , 0 , 0 , 56 , 33 , 35 , 43 , 0 , 0 , 8 , 16 , 36 , 37 , 0 , 0 , 0 , 0 , 0 , 0 , 58 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 72 , 37 , 50 , 50 , 51 , 43 , 0 , 0 , 0 , 17 , 0 , 40 , 36 , 38 , 41 , 40 , 16 , 42 , 0 , 0 , 59 , 39 , 0 , 41 , 0 , 0 , 0 , 56 , 48 , 0 , 0 , 50 , 50 , 37 , 37 , 38 , 43 , 0 , 0 , 0 , 0 , 59 , 39 , 0 , 0 , 58 , 40 , 40 , 40 , 56 , 40 , 40 , 36 , 37 , 34 , 35 , 43 , 0 , 59 , 55 , 41 , 8 , 0 , 0 , 16 , 0 , 17 , 0 , 41 , 42 , 40 , 41 , 17 , 42 , 49 , 51 , 0 , 58 , 40 , 37 , 38 , 43 , 0 , 0 , 0 , 42 , 49 , 51 , 43 , 0 , 0 , 104 , 40 , 36 , 37 , 0 , 0 , 0 , 0 , 0 , 0 , 16 , 0 , 0 , 57 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
37 , 37 , 38 , 33 , 34 , 35 , 43 , 0 , 58 , 103 , 39 , 43 , 42 , 36 , 38 , 56 , 40 , 41 , 0 , 0 , 0 , 59 , 48 , 0 , 0 , 0 , 0 , 58 , 40 , 48 , 0 , 0 , 34 , 35 , 49 , 50 , 51 , 43 , 0 , 0 , 0 , 0 , 59 , 48 , 40 , 57 , 0 , 42 , 56 , 40 , 41 , 16 , 41 , 36 , 72 , 37 , 38 , 43 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 42 , 59 , 32 , 43 , 58 , 22 , 40 , 59 , 32 , 43 , 0 , 17 , 0 , 0 , 40 , 37 , 38 , 43 , 0 , 0 , 0 , 0 , 27 , 27 , 0 , 0 , 42 , 56 , 42 , 36 , 37 , 0 , 0 , 0 , 0 , 58 , 0 , 40 , 0 , 0 , 56 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 73 , 74 , 75 , 76 , 77 , 78 , 79 , 0 , 0 , 0 , 0 , 37 , 37 , 38 , 36 , 72 , 38 , 43 , 0 , 42 , 56 , 48 , 43 , 18 , 36 , 38 , 41 , 56 , 0 , 0 , 0 , 0 , 59 , 48 , 0 , 0 , 0 , 0 , 0 , 42 , 48 , 62 , 20 , 37 , 37 , 34 , 34 , 35 , 43 , 0 , 0 , 0 , 0 , 59 , 48 , 41 , 0 , 0 , 0 , 40 , 41 , 0 , 0 , 0 , 36 , 37 , 37 , 38 , 43 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 27 , 0 , 42 , 40 , 40 , 0 , 27 , 0 , 59 , 32 , 43 , 17 , 42 , 37 , 38 , 43 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 41 , 59 , 36 , 72 , 0 , 0 , 0 , 0 , 40 , 103 , 40 , 0 , 0 , 16 , 0 , 57 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 89 , 90 , 91 , 92 , 93 , 94 , 95 , 0 , 0 , 0 , 0 ,
50 , 50 , 51 , 49 , 50 , 38 , 43 , 18 , 0 , 40 , 48 , 43 , 23 , 49 , 51 , 0 , 40 , 57 , 88 , 104 , 57 , 59 , 48 , 17 , 17 , 17 , 17 , 17 , 17 , 36 , 34 , 34 , 37 , 37 , 72 , 37 , 38 , 43 , 0 , 0 , 17 , 0 , 59 , 48 , 43 , 0 , 0 , 0 , 40 , 17 , 17 , 17 , 17 , 36 , 37 , 72 , 38 , 43 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 17 , 16 , 103 , 88 , 17 , 0 , 27 , 59 , 32 , 22 , 72 , 38 , 17 , 17 , 17 , 17 , 0 , 0 , 0 , 22 , 0 , 0 , 0 , 59 , 49 , 37 , 0 , 0 , 0 , 0 , 40 , 56 , 40 , 118 , 0 , 40 , 103 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 105 , 106 , 107 , 108 , 109 , 110 , 111 , 0 , 0 , 0 , 0 , 40 , 0 , 0 , 0 , 42 , 48 , 17 , 39 , 0 , 42 , 48 , 43 , 0 , 16 , 16 , 57 , 40 , 40 , 56 , 40 , 52 , 53 , 50 , 53 , 53 , 53 , 53 , 53 , 53 , 37 , 37 , 72 , 37 , 37 , 37 , 37 , 38 , 43 , 0 , 59 , 39 , 0 , 59 , 48 , 43 , 0 , 0 , 0 , 40 , 52 , 53 , 53 , 53 , 50 , 50 , 37 , 38 , 43 , 0 , 0 , 17 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 59 , 32 , 40 , 40 , 56 , 39 , 43 , 22 , 0 , 27 , 0 , 37 , 37 , 35 , 33 , 34 , 35 , 43 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 27 , 36 , 0 , 0 , 0 , 0 , 42 , 40 , 40 , 33 , 35 , 40 , 56 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 121 , 122 , 123 , 124 , 125 , 126 , 127 , 0 , 0 , 0 , 0 ,
41 , 0 , 17 , 0 , 0 , 49 , 53 , 38 , 43 , 0 , 49 , 53 , 53 , 53 , 53 , 53 , 41 , 0 , 42 , 0 , 0 , 16 , 40 , 40 , 40 , 40 , 41 , 0 , 59 , 36 , 37 , 37 , 50 , 50 , 50 , 50 , 38 , 43 , 22 , 59 , 48 , 0 , 59 , 48 , 0 , 0 , 0 , 0 , 41 , 27 , 27 , 27 , 27 , 27 , 59 , 36 , 38 , 43 , 0 , 59 , 39 , 43 , 0 , 0 , 0 , 17 , 0 , 0 , 0 , 0 , 27 , 42 , 40 , 40 , 55 , 43 , 0 , 0 , 0 , 0 , 50 , 50 , 51 , 49 , 50 , 51 , 43 , 0 , 0 , 17 , 17 , 0 , 0 , 0 , 59 , 36 , 0 , 0 , 0 , 104 , 56 , 40 , 33 , 37 , 37 , 35 , 40 , 57 , 58 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 59 , 39 , 43 , 0 , 42 , 56 , 48 , 43 , 0 , 0 , 0 , 42 , 40 , 57 , 59 , 0 , 0 , 0 , 0 , 0 , 0 , 42 , 40 , 56 , 40 , 40 , 103 , 33 , 37 , 37 , 37 , 27 , 27 , 27 , 27 , 55 , 43 , 0 , 59 , 48 , 57 , 59 , 48 , 22 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 59 , 36 , 38 , 43 , 23 , 59 , 48 , 43 , 0 , 0 , 59 , 32 , 43 , 17 , 0 , 0 , 0 , 17 , 0 , 41 , 27 , 0 , 0 , 0 , 0 , 58 , 27 , 27 , 27 , 27 , 27 , 27 , 0 , 17 , 17 , 33 , 35 , 17 , 0 , 0 , 59 , 36 , 0 , 0 , 0 , 42 , 40 , 33 , 37 , 72 , 37 , 37 , 35 , 40 , 56 , 104 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
8 , 59 , 48 , 43 , 0 , 0 , 40 , 48 , 17 , 17 , 17 , 17 , 0 , 40 , 56 , 59 , 17 , 17 , 17 , 17 , 17 , 0 , 0 , 40 , 41 , 0 , 41 , 40 , 36 , 37 , 72 , 37 , 0 , 0 , 0 , 58 , 40 , 0 , 0 , 59 , 48 , 40 , 59 , 55 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 59 , 36 , 38 , 17 , 17 , 17 , 48 , 43 , 0 , 0 , 0 , 27 , 59 , 32 , 43 , 0 , 59 , 39 , 43 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 43 , 1 , 0 , 0 , 0 , 0 , 59 , 33 , 34 , 37 , 50 , 54 , 43 , 0 , 59 , 49 , 88 , 88 , 104 , 40 , 41 , 36 , 37 , 37 , 37 , 37 , 38 , 16 , 40 , 40 , 104 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 59 , 55 , 43 , 0 , 0 , 42 , 49 , 53 , 53 , 53 , 54 , 0 , 40 , 41 , 59 , 34 , 34 , 34 , 34 , 35 , 17 , 17 , 32 , 43 , 0 , 0 , 42 , 49 , 50 , 37 , 37 , 0 , 0 , 0 , 16 , 56 , 41 , 0 , 59 , 48 , 40 , 40 , 40 , 0 , 0 , 0 , 0 , 17 , 17 , 17 , 17 , 57 , 0 , 17 , 36 , 37 , 34 , 34 , 34 , 51 , 43 , 0 , 0 , 1 , 0 , 0 , 27 , 0 , 0 , 59 , 48 , 43 , 0 , 0 , 0 , 0 , 88 , 104 , 40 , 43 , 23 , 0 , 0 , 0 , 0 , 59 , 36 , 37 , 51 , 27 , 27 , 0 , 0 , 0 , 27 , 40 , 16 , 40 , 56 , 0 , 49 , 50 , 37 , 37 , 72 , 38 , 41 , 0 , 42 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
57 , 0 , 27 , 0 , 0 , 0 , 0 , 27 , 27 , 27 , 27 , 27 , 0 , 42 , 0 , 59 , 50 , 50 , 50 , 50 , 50 , 53 , 54 , 27 , 0 , 0 , 0 , 0 , 27 , 27 , 49 , 37 , 0 , 0 , 0 , 0 , 40 , 0 , 0 , 59 , 48 , 40 , 56 , 41 , 0 , 0 , 0 , 0 , 34 , 34 , 34 , 35 , 40 , 56 , 52 , 50 , 50 , 50 , 50 , 51 , 43 , 0 , 0 , 0 , 35 , 57 , 0 , 0 , 0 , 0 , 59 , 55 , 43 , 0 , 0 , 0 , 0 , 42 , 16 , 40 , 17 , 17 , 17 , 17 , 0 , 0 , 59 , 49 , 51 , 27 , 0 , 58 , 0 , 22 , 0 , 0 , 0 , 42 , 40 , 57 , 63 , 33 , 35 , 36 , 37 , 50 , 51 , 32 , 0 , 0 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 41 , 0 , 0 , 1 , 0 , 20 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 59 , 57 , 1 , 61 , 0 , 0 , 42 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 36 , 0 , 0 , 0 , 104 , 40 , 103 , 0 , 59 , 48 , 0 , 42 , 40 , 103 , 0 , 0 , 0 , 37 , 37 , 37 , 38 , 0 , 40 , 40 , 0 , 58 , 16 , 40 , 42 , 0 , 22 , 0 , 58 , 38 , 40 , 0 , 0 , 0 , 0 , 0 , 27 , 0 , 0 , 0 , 57 , 58 , 40 , 56 , 40 , 34 , 34 , 34 , 35 , 43 , 0 , 0 , 27 , 27 , 0 , 0 , 56 , 0 , 0 , 0 , 104 , 0 , 0 , 33 , 34 , 34 , 37 , 38 , 49 , 51 , 33 , 34 , 35 , 40 , 57 , 40 , 103 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
16 , 103 , 88 , 58 , 33 , 34 , 35 , 17 , 17 , 17 , 17 , 17 , 0 , 18 , 0 , 59 , 34 , 34 , 35 , 57 , 0 , 16 , 40 , 57 , 0 , 0 , 0 , 0 , 8 , 58 , 16 , 49 , 1 , 0 , 58 , 56 , 40 , 41 , 0 , 59 , 55 , 0 , 0 , 56 , 41 , 0 , 0 , 0 , 37 , 72 , 37 , 38 , 0 , 42 , 40 , 40 , 40 , 56 , 41 , 0 , 0 , 0 , 0 , 40 , 38 , 56 , 57 , 18 , 0 , 0 , 0 , 0 , 0 , 0 , 58 , 40 , 40 , 40 , 40 , 16 , 37 , 72 , 37 , 38 , 43 , 22 , 0 , 0 , 57 , 0 , 0 , 40 , 58 , 0 , 58 , 40 , 1 , 0 , 49 , 37 , 37 , 72 , 37 , 34 , 34 , 37 , 37 , 37 , 35 , 16 , 56 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 56 , 40 , 40 , 36 , 37 , 37 , 34 , 34 , 34 , 34 , 35 , 0 , 23 , 0 , 59 , 37 , 37 , 38 , 40 , 58 , 40 , 56 , 40 , 0 , 0 , 0 , 0 , 0 , 56 , 40 , 40 , 35 , 0 , 16 , 40 , 40 , 0 , 0 , 0 , 56 , 0 , 0 , 40 , 16 , 0 , 0 , 0 , 37 , 37 , 37 , 38 , 23 , 23 , 40 , 56 , 40 , 0 , 0 , 0 , 0 , 0 , 58 , 40 , 38 , 40 , 16 , 39 , 57 , 0 , 0 , 0 , 0 , 42 , 40 , 40 , 56 , 40 , 40 , 40 , 37 , 37 , 72 , 38 , 43 , 0 , 0 , 58 , 56 , 0 , 58 , 40 , 16 , 40 , 56 , 40 , 33 , 34 , 35 , 36 , 37 , 37 , 37 , 37 , 37 , 37 , 72 , 37 , 37 , 34 , 34 , 35 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
35 , 49 , 37 , 37 , 72 , 37 , 37 , 50 , 50 , 50 , 50 , 50 , 51 , 0 , 0 , 36 , 37 , 38 , 36 , 37 , 37 , 38 , 49 , 50 , 50 , 50 , 37 , 38 , 40 , 40 , 40 , 36 , 37 , 37 , 37 , 37 , 37 , 37 , 50 , 51 , 40 , 56 , 40 , 40 , 49 , 37 , 37 , 37 , 50 , 50 , 50 , 50 , 51 , 0 , 0 , 0 , 49 , 50 , 50 , 50 , 50 , 50 , 50 , 50 , 50 , 51 , 0 , 0 , 0 , 36 , 50 , 50 , 50 , 51 , 49 , 50 , 50 , 50 , 37 , 37 , 37 , 37 , 37 , 72 , 37 , 37 , 37 , 37 , 37 , 37 , 37 , 38 , 40 , 40 , 36 , 37 , 37 , 72 , 37 , 37 , 37 , 38 , 40 , 40 , 40 , 40 , 36 , 37 , 72 , 37 , 37 , 37 , 38 , 40 , 40 , 40 , 40 , 49 , 50 , 50 , 50 , 37 , 72 , 37 , 37 , 37 , 37 , 37 , 37 , 35 , 49 , 50 , 50 , 50 , 51 , 41 , 0 , 0 , 40 , 41 , 0 , 0 , 0 , 36 , 37 , 38 , 49 , 50 , 50 , 51 , 40 , 40 , 0 , 40 , 36 , 38 , 42 , 16 , 40 , 36 , 37 , 72 , 37 , 37 , 37 , 38 , 0 , 42 , 40 , 40 , 41 , 40 , 16 , 36 , 72 , 37 , 40 , 40 , 40 , 41 , 0 , 0 , 0 , 0 , 40 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 40 , 16 , 0 , 0 , 0 , 55 , 40 , 41 , 0 , 0 , 0 , 0 , 42 , 40 , 49 , 72 , 37 , 37 , 37 , 37 , 37 , 72 , 37 , 37 , 50 , 50 , 50 , 51 , 40 , 40 , 36 , 37 , 37 , 37 , 72 , 37 , 50 , 51 , 56 , 40 , 42 , 40 , 49 , 50 , 37 , 37 , 72 , 37 , 38 , 40 , 56 , 40 , 40 , 40 , 42 , 42 , 40 , 49 , 50 , 50 , 50 , 50 , 37 , 37 ,
37 , 37 , 35 , 32 , 16 , 40 , 56 , 0 , 0 , 0 , 42 , 0 , 0 , 0 , 61 , 36 , 37 , 37 , 35 , 32 , 16 , 40 , 41 , 41 , 0 , 40 , 36 , 38 , 0 , 58 , 56 , 36 , 37 , 37 , 37 , 72 , 37 , 51 , 0 , 0 , 41 , 0 , 0 , 42 , 0 , 49 , 37 , 37 , 40 , 56 , 41 , 0 , 0 , 58 , 103 , 104 , 56 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 56 , 40 , 57 , 62 , 0 , 58 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 0 , 36 , 37 , 37 , 50 , 50 , 50 , 50 , 50 , 51 , 33 , 34 , 34 , 35 , 40 , 40 , 36 , 37 , 37 , 37 , 50 , 51 , 40 , 40 , 40 , 41 , 0 , 0 , 42 , 40 , 49 , 50 , 37 , 37 , 38 , 40 , 40 , 40 , 40 , 41 , 0 , 0 , 42 , 40 , 40 , 40 , 56 , 40 , 36 , 72 , 50 , 50 , 51 , 40 , 40 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 63 , 32 , 32 , 36 , 72 , 37 , 38 , 40 , 40 , 41 , 0 , 0 , 0 , 42 , 36 , 51 , 0 , 0 , 42 , 36 , 37 , 50 , 37 , 37 , 38 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 49 , 37 , 41 , 0 , 0 , 0 , 0 , 33 , 34 , 35 , 40 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 42 , 40 , 40 , 52 , 53 , 54 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 57 , 36 , 37 , 38 , 33 , 34 , 35 , 32 , 33 , 35 , 49 , 50 , 50 , 51 , 40 , 40 , 36 , 37 , 72 , 38 , 43 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 28 , 0 , 0 , 59 , 36 , 37 , 38 , 40 , 40 , 40 , 0 , 0 , 0 , 0 , 0 , 40 , 40 , 40 , 40 , 40 , 36 , 37 ,
35 , 64 , 40 , 56 , 40 , 41 , 58 , 40 , 57 , 0 , 0 , 0 , 52 , 53 , 34 , 37 , 37 , 72 , 38 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 48 , 0 , 0 , 0 , 0 , 36 , 51 , 0 , 49 , 37 , 51 , 61 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 49 , 0 , 0 , 28 , 58 , 58 , 49 , 37 , 38 , 32 , 40 , 57 , 0 , 0 , 0 , 0 , 0 , 0 , 16 , 40 , 40 , 40 , 41 , 0 , 0 , 0 , 0 , 17 , 17 , 58 , 40 , 40 , 49 , 50 , 51 , 36 , 37 , 38 , 16 , 49 , 51 , 32 , 40 , 40 , 40 , 40 , 56 , 36 , 37 , 37 , 38 , 43 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 59 , 36 , 37 , 38 , 42 , 40 , 40 , 103 , 0 , 22 , 0 , 42 , 40 , 40 , 56 , 40 , 40 , 36 , 37 , 38 , 58 , 40 , 40 , 40 , 16 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 49 , 37 , 37 , 50 , 51 , 0 , 0 , 0 , 0 , 17 , 0 , 0 , 55 , 0 , 0 , 0 , 62 , 36 , 0 , 0 , 0 , 55 , 33 , 34 , 35 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 57 , 88 , 104 , 40 , 40 , 40 , 36 , 38 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 42 , 40 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 33 , 35 , 40 , 56 , 40 , 41 , 40 , 40 , 49 , 50 , 51 , 40 , 40 , 41 , 0 , 42 , 0 , 42 , 40 , 40 , 36 , 37 , 37 , 51 , 43 , 12 , 0 , 0 , 0 , 17 , 17 , 0 , 0 , 0 , 12 , 59 , 49 , 72 , 38 , 17 , 40 , 16 , 0 , 0 , 0 , 0 , 104 , 40 , 40 , 40 , 40 , 40 , 36 , 37 ,
37 , 34 , 53 , 53 , 54 , 40 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 58 , 40 , 36 , 38 , 0 , 61 , 0 , 58 , 57 , 0 , 39 , 0 , 0 , 0 , 0 , 0 , 0 , 33 , 37 , 0 , 26 , 0 , 0 , 36 , 37 , 38 , 17 , 17 , 17 , 17 , 0 , 0 , 0 , 0 , 44 , 40 , 56 , 40 , 40 , 40 , 56 , 49 , 51 , 40 , 0 , 0 , 0 , 23 , 23 , 0 , 0 , 0 , 42 , 0 , 0 , 0 , 0 , 17 , 17 , 0 , 0 , 36 , 38 , 16 , 40 , 41 , 0 , 40 , 40 , 27 , 27 , 27 , 40 , 40 , 0 , 0 , 0 , 0 , 0 , 42 , 33 , 37 , 72 , 38 , 40 , 57 , 0 , 0 , 0 , 59 , 52 , 54 , 43 , 0 , 0 , 0 , 0 , 40 , 36 , 37 , 35 , 40 , 40 , 58 , 103 , 0 , 58 , 40 , 40 , 40 , 41 , 0 , 42 , 49 , 50 , 37 , 51 , 56 , 40 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 56 , 36 , 37 , 35 , 32 , 32 , 16 , 41 , 0 , 48 , 57 , 0 , 0 , 0 , 0 , 88 , 36 , 72 , 0 , 0 , 0 , 58 , 49 , 50 , 50 , 53 , 53 , 53 , 54 , 103 , 88 , 0 , 0 , 60 , 40 , 40 , 40 , 40 , 16 , 40 , 33 , 35 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 52 , 54 , 0 , 58 , 36 , 38 , 40 , 40 , 0 , 0 , 56 , 40 , 57 , 0 , 0 , 0 , 42 , 41 , 0 , 0 , 0 , 0 , 0 , 49 , 50 , 50 , 38 , 16 , 16 , 0 , 0 , 0 , 0 , 40 , 40 , 57 , 0 , 0 , 0 , 0 , 42 , 36 , 37 , 51 , 40 , 40 , 40 , 56 , 0 , 40 , 40 , 40 , 57 , 0 , 0 , 0 , 23 , 0 ,
38 , 0 , 0 , 42 , 40 , 0 , 0 , 0 , 0 , 58 , 40 , 58 , 40 , 40 , 40 , 36 , 37 , 37 , 34 , 35 , 40 , 57 , 0 , 55 , 40 , 88 , 57 , 0 , 104 , 40 , 49 , 50 , 0 , 0 , 0 , 40 , 40 , 40 , 40 , 40 , 32 , 32 , 40 , 40 , 40 , 57 , 33 , 34 , 40 , 41 , 0 , 42 , 40 , 40 , 36 , 38 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 56 , 40 , 40 , 49 , 37 , 35 , 0 , 0 , 0 , 40 , 40 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 22 , 58 , 103 , 104 , 40 , 40 , 0 , 51 , 56 , 40 , 11 , 0 , 0 , 0 , 16 , 56 , 40 , 0 , 0 , 11 , 0 , 0 , 49 , 51 , 40 , 40 , 40 , 40 , 40 , 104 , 40 , 40 , 40 , 40 , 0 , 0 , 0 , 23 , 0 , 51 , 0 , 0 , 0 , 40 , 103 , 88 , 0 , 0 , 40 , 16 , 40 , 40 , 52 , 34 , 37 , 37 , 37 , 72 , 38 , 40 , 40 , 103 , 32 , 40 , 40 , 40 , 56 , 40 , 40 , 33 , 34 , 0 , 0 , 58 , 40 , 56 , 40 , 16 , 41 , 0 , 0 , 42 , 40 , 56 , 40 , 36 , 37 , 42 , 0 , 0 , 0 , 40 , 56 , 36 , 38 , 0 , 0 , 0 , 23 , 23 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 39 , 40 , 40 , 42 , 40 , 49 , 51 , 57 , 0 , 0 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 42 , 40 , 40 , 40 , 41 , 0 , 42 , 40 , 57 , 0 , 0 , 0 , 0 , 42 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 40 , 40 , 56 , 40 , 40 , 40 , 40 , 40 , 40 , 41 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 58 , 40 , 40 , 56 , 62 , 58 , 40 , 40 , 40 , 56 , 40 , 36 , 37 , 72 , 37 , 37 , 38 , 0 , 42 , 40 , 39 , 41 , 0 , 42 , 40 , 40 , 52 , 50 , 37 , 0 , 0 , 0 , 42 , 40 , 40 , 40 , 0 , 0 , 0 , 0 , 40 , 16 , 40 , 36 , 37 , 0 , 0 , 0 , 0 , 42 , 40 , 36 , 38 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 55 , 40 , 0 , 0 , 0 , 42 , 40 , 40 , 57 , 0 , 40 , 0 , 0 , 0 , 57 , 40 , 57 , 0 , 0 , 0 , 0 , 0 , 40 , 40 , 0 , 0 , 0 , 40 , 41 , 0 , 0 , 0 , 42 , 40 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 42 , 40 , 40 , 40 , 40 , 16 , 40 , 40 , 40 , 40 , 103 , 88 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 56 , 40 , 40 , 33 , 35 , 40 , 0 , 0 , 42 , 40 , 36 , 37 , 50 , 50 , 37 , 38 , 0 , 58 , 40 , 48 , 0 , 0 , 0 , 0 , 42 , 40 , 40 , 36 , 0 , 0 , 0 , 0 , 0 , 42 , 40 , 17 , 17 , 17 , 17 , 40 , 40 , 40 , 36 , 72 , 0 , 0 , 0 , 58 , 40 , 40 , 49 , 51 , 0 , 0 , 0 , 0 , 0 , 0 , 23 , 23 , 0 , 1 , 63 , 0 , 0 , 0 , 32 , 41 , 0 , 0 , 0 , 0 , 56 , 40 , 0 , 0 , 40 , 1 , 58 , 40 , 40 , 16 , 40 , 88 , 0 , 0 , 0 , 58 , 40 , 41 , 0 , 0 , 0 , 42 , 40 , 12 , 0 , 0 , 0 , 58 , 56 , 12 , 0 , 0 , 0 , 0 , 0 , 12 , 0 , 0 , 42 , 40 , 40 , 40 , 40 , 40 , 41 , 40 , 40 , 41 , 0 , 0 , 0 , 58 ,
0 , 1 , 58 , 33 , 35 , 40 , 42 , 49 , 51 , 41 , 0 , 17 , 17 , 17 , 36 , 37 , 0 , 40 , 49 , 38 , 58 , 56 , 41 , 48 , 0 , 0 , 0 , 0 , 0 , 0 , 42 , 49 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 52 , 34 , 34 , 54 , 41 , 42 , 0 , 36 , 37 , 62 , 1 , 58 , 56 , 40 , 41 , 42 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 53 , 53 , 53 , 54 , 0 , 0 , 32 , 0 , 0 , 0 , 0 , 61 , 42 , 40 , 103 , 20 , 34 , 34 , 35 , 40 , 40 , 40 , 40 , 40 , 57 , 0 , 88 , 40 , 56 , 40 , 61 , 0 , 0 , 58 , 41 , 0 , 0 , 0 , 0 , 40 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 42 , 40 , 40 , 42 , 41 , 0 , 0 , 88 , 16 , 0 , 18 , 0 , 42 , 40 , 34 , 34 , 34 , 37 , 38 , 41 , 0 , 33 , 35 , 17 , 17 , 33 , 34 , 34 , 37 , 37 , 0 , 42 , 56 , 55 , 40 , 41 , 0 , 48 , 17 , 17 , 17 , 0 , 0 , 0 , 58 , 40 , 0 , 1 , 63 , 0 , 0 , 0 , 42 , 40 , 36 , 38 , 41 , 0 , 0 , 0 , 36 , 37 , 34 , 34 , 34 , 35 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 23 , 23 , 0 , 0 , 42 , 40 , 32 , 57 , 0 , 58 , 32 , 0 , 0 , 58 , 0 , 52 , 53 , 53 , 53 , 53 , 37 , 37 , 37 , 34 , 34 , 34 , 35 , 40 , 40 , 40 , 40 , 16 , 40 , 40 , 33 , 34 , 11 , 16 , 0 , 0 , 0 , 0 , 11 , 40 , 16 , 0 , 0 , 0 , 11 , 0 , 0 , 0 , 44 , 0 , 0 , 40 , 56 , 0 , 0 , 0 , 0 , 42 , 40 , 57 , 23 , 0 , 0 , 40 ,
37 , 72 , 37 , 37 , 38 , 17 , 17 , 36 , 37 , 34 , 34 , 37 , 37 , 37 , 72 , 37 , 0 , 1 , 42 , 40 , 40 , 103 , 63 , 36 , 34 , 34 , 35 , 0 , 0 , 0 , 56 , 40 , 34 , 34 , 35 , 0 , 0 , 18 , 0 , 42 , 36 , 38 , 0 , 0 , 0 , 18 , 36 , 37 , 37 , 37 , 37 , 38 , 0 , 0 , 0 , 0 , 23 , 23 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 56 , 32 , 40 , 57 , 40 , 39 , 8 , 0 , 40 , 103 , 104 , 32 , 40 , 40 , 40 , 37 , 72 , 37 , 37 , 37 , 37 , 38 , 42 , 40 , 40 , 33 , 34 , 34 , 34 , 37 , 37 , 58 , 40 , 1 , 61 , 0 , 0 , 0 , 104 , 40 , 57 , 0 , 0 , 0 , 0 , 0 , 0 , 60 , 1 , 104 , 40 , 40 , 0 , 23 , 23 , 23 , 0 , 58 , 40 , 0 , 0 , 58 , 40 , 37 , 37 , 37 , 37 , 37 , 34 , 34 , 37 , 37 , 37 , 37 , 37 , 37 , 37 , 37 , 37 , 34 , 34 , 34 , 34 , 34 , 34 , 34 , 37 , 37 , 72 , 38 , 103 , 88 , 104 , 40 , 40 , 37 , 72 , 38 , 0 , 0 , 39 , 0 , 0 , 36 , 38 , 0 , 0 , 0 , 33 , 37 , 37 , 37 , 37 , 72 , 38 , 23 , 23 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 42 , 32 , 40 , 16 , 40 , 48 , 0 , 58 , 40 , 40 , 40 , 32 , 40 , 40 , 40 , 37 , 37 , 37 , 37 , 72 , 37 , 38 , 0 , 0 , 42 , 36 , 37 , 37 , 37 , 72 , 37 , 40 , 33 , 34 , 35 , 0 , 0 , 0 , 40 , 40 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 34 , 34 , 34 , 35 , 40 , 103 , 0 , 0 , 0 , 0 , 40 , 40 , 57 , 0 , 40 , 56 ,
37 , 50 , 51 , 0 , 0 , 0 , 36 , 50 , 50 , 50 , 50 , 50 , 50 , 50 , 37 , 37 , 37 , 37 , 38 , 40 , 40 , 40 , 40 , 36 , 37 , 50 , 50 , 50 , 50 , 37 , 72 , 37 , 37 , 50 , 50 , 50 , 50 , 50 , 50 , 50 , 37 , 38 , 40 , 40 , 40 , 36 , 72 , 37 , 37 , 37 , 37 , 51 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 82 , 37 , 37 , 50 , 50 , 50 , 50 , 51 , 49 , 50 , 50 , 50 , 50 , 51 , 40 , 41 , 0 , 38 , 40 , 41 , 40 , 103 , 0 , 0 , 0 , 0 , 0 , 40 , 40 , 49 , 50 , 50 , 50 , 37 , 37 , 37 , 50 , 51 , 40 , 40 , 0 , 49 , 37 , 37 , 72 , 37 , 37 , 37 , 72 , 37 , 37 , 72 , 38 , 40 , 56 , 40 , 49 , 50 , 50 , 50 , 50 , 50 , 50 , 37 , 72 , 38 , 40 , 40 , 0 , 0 , 0 , 48 , 64 , 42 , 40 , 40 , 40 , 40 , 40 , 36 , 37 , 37 , 72 , 38 , 40 , 56 , 40 , 40 , 49 , 51 , 56 , 40 , 41 , 0 , 49 , 50 , 37 , 38 , 40 , 0 , 0 , 22 , 58 , 40 , 40 , 49 , 51 , 40 , 40 , 56 , 36 , 37 , 37 , 72 , 37 , 38 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 82 , 37 , 38 , 0 , 0 , 22 , 0 , 0 , 0 , 0 , 42 , 16 , 40 , 40 , 56 , 57 , 0 , 38 , 40 , 26 , 56 , 32 , 57 , 61 , 0 , 0 , 0 , 0 , 42 , 56 , 40 , 40 , 40 , 37 , 37 , 38 , 40 , 40 , 40 , 41 , 0 , 59 , 36 , 37 , 50 , 50 , 50 , 50 , 50 , 50 , 50 , 50 , 51 , 40 , 40 , 40 , 40 , 40 , 40 , 16 , 40 , 40 , 32 , 49 , 37 ,
51 , 40 , 57 , 0 , 0 , 0 , 55 , 0 , 0 , 42 , 56 , 40 , 0 , 42 , 36 , 37 , 37 , 37 , 38 , 40 , 40 , 40 , 40 , 32 , 40 , 41 , 42 , 0 , 0 , 0 , 42 , 49 , 51 , 40 , 17 , 17 , 17 , 40 , 40 , 40 , 0 , 0 , 40 , 0 , 42 , 49 , 37 , 37 , 37 , 37 , 38 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 82 , 37 , 38 , 0 , 0 , 0 , 0 , 17 , 17 , 0 , 0 , 0 , 41 , 42 , 40 , 41 , 0 , 38 , 40 , 58 , 40 , 32 , 16 , 32 , 17 , 17 , 17 , 33 , 34 , 35 , 40 , 40 , 16 , 37 , 37 , 38 , 40 , 56 , 40 , 0 , 0 , 59 , 36 , 38 , 43 , 0 , 42 , 42 , 56 , 40 , 40 , 40 , 40 , 40 , 41 , 0 , 42 , 40 , 0 , 40 , 40 , 56 , 40 , 40 , 49 , 40 , 40 , 16 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 40 , 57 , 0 , 36 , 72 , 37 , 37 , 38 , 40 , 41 , 0 , 40 , 32 , 103 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 56 , 16 , 33 , 34 , 35 , 40 , 56 , 41 , 0 , 58 , 16 , 41 , 0 , 42 , 36 , 37 , 50 , 50 , 51 , 103 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 66 , 0 , 37 , 38 , 57 , 0 , 0 , 0 , 33 , 35 , 0 , 0 , 0 , 0 , 0 , 33 , 34 , 34 , 37 , 34 , 34 , 35 , 33 , 34 , 35 , 33 , 34 , 35 , 36 , 72 , 38 , 40 , 40 , 40 , 50 , 50 , 51 , 40 , 40 , 40 , 0 , 0 , 59 , 49 , 51 , 43 , 0 , 0 , 0 , 40 , 16 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 41 , 0 , 42 , 40 , 40 , 40 , 41 , 0 ,
40 , 40 , 40 , 0 , 22 , 0 , 0 , 0 , 22 , 42 , 40 , 40 , 40 , 0 , 36 , 37 , 37 , 37 , 38 , 39 , 0 , 0 , 42 , 32 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 52 , 37 , 37 , 51 , 41 , 42 , 0 , 0 , 0 , 42 , 0 , 17 , 17 , 36 , 37 , 34 , 35 , 40 , 40 , 0 , 0 , 44 , 70 , 71 , 44 , 0 , 0 , 0 , 66 , 83 , 83 , 37 , 38 , 40 , 0 , 0 , 58 , 36 , 38 , 0 , 0 , 22 , 0 , 0 , 36 , 37 , 37 , 37 , 37 , 72 , 38 , 49 , 50 , 51 , 49 , 50 , 51 , 36 , 37 , 38 , 32 , 40 , 56 , 34 , 34 , 35 , 40 , 41 , 40 , 103 , 0 , 0 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 40 , 56 , 0 , 17 , 17 , 0 , 0 , 18 , 0 , 0 , 0 , 40 , 41 , 42 , 22 , 0 , 40 , 56 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 58 , 40 , 41 , 0 , 36 , 37 , 72 , 37 , 38 , 55 , 0 , 0 , 0 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 58 , 41 , 59 , 36 , 38 , 40 , 57 , 0 , 0 , 0 , 0 , 0 , 59 , 33 , 34 , 37 , 37 , 37 , 38 , 56 , 40 , 103 , 0 , 60 , 86 , 87 , 60 , 66 , 67 , 67 , 83 , 99 , 99 , 50 , 51 , 40 , 57 , 0 , 40 , 36 , 38 , 17 , 17 , 17 , 17 , 17 , 36 , 37 , 37 , 37 , 72 , 37 , 38 , 32 , 27 , 27 , 27 , 27 , 27 , 36 , 37 , 38 , 40 , 40 , 40 , 37 , 37 , 38 , 0 , 0 , 42 , 40 , 20 , 58 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 41 , 59 , 33 , 35 , 0 , 0 , 23 , 0 , 0 , 17 , 40 , 103 , 0 , 0 , 0 ,
40 , 40 , 40 , 103 , 88 , 0 , 0 , 0 , 88 , 104 , 40 , 56 , 0 , 0 , 49 , 50 , 50 , 50 , 51 , 32 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 39 , 40 , 40 , 0 , 59 , 36 , 38 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 59 , 49 , 37 , 72 , 37 , 37 , 51 , 40 , 40 , 40 , 57 , 33 , 34 , 34 , 35 , 82 , 83 , 83 , 100 , 0 , 0 , 41 , 0 , 42 , 40 , 56 , 40 , 49 , 50 , 53 , 53 , 53 , 53 , 34 , 37 , 72 , 37 , 37 , 37 , 37 , 37 , 35 , 0 , 0 , 0 , 0 , 0 , 49 , 50 , 51 , 40 , 16 , 40 , 72 , 37 , 38 , 17 , 17 , 17 , 52 , 53 , 54 , 17 , 17 , 17 , 17 , 0 , 0 , 0 , 0 , 0 , 59 , 49 , 51 , 17 , 17 , 17 , 17 , 17 , 39 , 40 , 41 , 0 , 0 , 59 , 40 , 40 , 40 , 40 , 16 , 41 , 0 , 0 , 0 , 42 , 40 , 40 , 103 , 0 , 0 , 40 , 53 , 53 , 53 , 54 , 17 , 17 , 0 , 0 , 0 , 0 , 0 , 0 , 17 , 48 , 40 , 56 , 0 , 59 , 49 , 51 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 42 , 40 , 49 , 50 , 37 , 38 , 42 , 40 , 40 , 16 , 40 , 36 , 37 , 37 , 38 , 98 , 99 , 100 , 0 , 0 , 0 , 0 , 22 , 0 , 40 , 40 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 49 , 50 , 37 , 37 , 37 , 37 , 37 , 37 , 38 , 103 , 88 , 0 , 0 , 0 , 32 , 0 , 0 , 42 , 40 , 40 , 37 , 37 , 50 , 53 , 53 , 53 , 34 , 34 , 34 , 34 , 34 , 53 , 54 , 57 , 0 , 0 , 0 , 0 , 59 , 52 , 53 , 53 , 53 , 53 , 53 , 54 , 48 , 56 , 0 , 0 , 0 , 23 ,
40 , 41 , 0 , 0 , 42 , 0 , 0 , 0 , 0 , 0 , 56 , 42 , 41 , 0 , 58 , 40 , 40 , 40 , 40 , 52 , 54 , 32 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 48 , 40 , 40 , 0 , 0 , 42 , 41 , 0 , 0 , 17 , 17 , 0 , 0 , 0 , 0 , 40 , 40 , 40 , 49 , 38 , 0 , 41 , 0 , 42 , 40 , 36 , 72 , 37 , 37 , 35 , 0 , 0 , 0 , 0 , 0 , 57 , 0 , 58 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 49 , 50 , 37 , 37 , 72 , 37 , 38 , 56 , 41 , 0 , 0 , 0 , 23 , 0 , 0 , 88 , 104 , 40 , 50 , 51 , 16 , 40 , 41 , 59 , 36 , 72 , 37 , 37 , 38 , 40 , 40 , 40 , 0 , 0 , 0 , 0 , 59 , 32 , 27 , 27 , 27 , 27 , 27 , 27 , 48 , 40 , 0 , 0 , 0 , 23 , 40 , 58 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 0 , 0 , 0 , 40 , 40 , 40 , 56 , 16 , 41 , 42 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 42 , 55 , 16 , 40 , 17 , 17 , 17 , 17 , 17 , 17 , 33 , 54 , 0 , 0 , 0 , 0 , 42 , 40 , 56 , 11 , 38 , 0 , 0 , 0 , 0 , 33 , 37 , 37 , 37 , 37 , 38 , 0 , 28 , 0 , 0 , 0 , 40 , 40 , 40 , 16 , 0 , 0 , 0 , 0 , 0 , 17 , 0 , 0 , 42 , 56 , 40 , 41 , 37 , 37 , 37 , 37 , 38 , 40 , 0 , 0 , 0 , 0 , 23 , 0 , 0 , 42 , 33 , 34 , 40 , 40 , 41 , 8 , 0 , 59 , 36 , 37 , 37 , 72 , 38 , 40 , 40 , 41 , 18 , 0 , 0 , 0 , 0 , 27 , 0 , 0 , 0 , 0 , 0 , 0 , 48 , 41 , 0 , 0 , 0 , 59 ,
56 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 58 , 16 , 41 , 0 , 0 , 40 , 56 , 40 , 40 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 42 , 40 , 40 , 34 , 53 , 53 , 53 , 53 , 53 , 51 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 40 , 57 , 51 , 0 , 0 , 0 , 0 , 49 , 50 , 37 , 37 , 37 , 51 , 0 , 0 , 0 , 0 , 0 , 40 , 56 , 40 , 41 , 0 , 0 , 0 , 0 , 59 , 32 , 43 , 0 , 104 , 40 , 40 , 0 , 50 , 50 , 50 , 50 , 51 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 49 , 37 , 40 , 40 , 0 , 0 , 0 , 59 , 49 , 50 , 50 , 37 , 38 , 56 , 40 , 0 , 23 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 17 , 0 , 0 , 55 , 0 , 0 , 0 , 0 , 0 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 42 , 0 , 0 , 0 , 40 , 41 , 40 , 41 , 42 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 42 , 51 , 40 , 56 , 40 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 16 , 40 , 40 , 0 , 0 , 0 , 0 , 66 , 67 , 68 , 36 , 37 , 38 , 40 , 57 , 0 , 0 , 0 , 0 , 40 , 0 , 42 , 0 , 0 , 17 , 0 , 0 , 0 , 27 , 0 , 42 , 32 , 16 , 41 , 44 , 27 , 27 , 27 , 27 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 16 , 49 , 40 , 41 , 22 , 0 , 0 , 0 , 27 , 27 , 27 , 49 , 51 , 40 , 16 , 103 , 0 , 0 , 0 , 0 , 0 , 17 , 0 , 0 , 58 , 39 , 0 , 0 , 27 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 1 , 0 , 0 , 0 , 17 , 17 , 17 , 0 , 0 , 0 , 0 , 0 , 42 , 58 , 42 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 42 , 40 , 0 , 40 , 40 , 41 , 0 , 42 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 40 , 40 , 0 , 0 , 0 , 0 , 82 , 83 , 84 , 36 , 72 , 38 , 40 , 40 , 0 , 0 , 0 , 0 , 41 , 0 , 0 , 0 , 59 , 32 , 43 , 57 , 0 , 0 , 0 , 0 , 41 , 0 , 0 , 60 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 40 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 27 , 27 , 42 , 40 , 41 , 0 , 0 , 1 , 0 , 0 , 39 , 57 , 0 , 56 , 48 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 17 , 17 , 32 , 17 , 17 , 17 , 33 , 34 , 35 , 0 , 0 , 0 , 18 , 18 , 0 , 42 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 41 , 0 , 41 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 42 , 103 , 104 , 40 , 41 , 0 , 0 , 63 , 1 , 0 , 82 , 83 , 84 , 36 , 37 , 38 , 40 , 16 , 103 , 58 , 57 , 0 , 1 , 63 , 0 , 0 , 0 , 42 , 56 , 41 , 0 , 17 , 0 , 0 , 0 , 0 , 0 , 33 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 58 , 103 , 0 , 0 , 0 , 0 , 42 , 56 , 40 , 103 , 88 , 104 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 104 , 40 , 0 , 0 , 0 , 33 , 35 , 0 , 55 , 40 , 41 , 40 , 48 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
34 , 34 , 34 , 34 , 34 , 35 , 36 , 72 , 38 , 17 , 17 , 17 , 32 , 32 , 17 , 17 , 0 , 39 , 57 , 0 , 0 , 23 , 23 , 0 , 0 , 0 , 23 , 23 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 23 , 23 , 0 , 0 , 0 , 40 , 40 , 56 , 57 , 58 , 0 , 33 , 34 , 35 , 82 , 83 , 84 , 36 , 37 , 51 , 40 , 40 , 40 , 56 , 41 , 0 , 34 , 35 , 43 , 0 , 0 , 8 , 40 , 57 , 59 , 39 , 0 , 0 , 0 , 0 , 20 , 36 , 35 , 0 , 0 , 0 , 18 , 0 , 0 , 0 , 40 , 41 , 0 , 0 , 0 , 0 , 0 , 40 , 40 , 40 , 16 , 40 , 103 , 0 , 23 , 23 , 23 , 23 , 23 , 40 , 40 , 57 , 0 , 0 , 49 , 51 , 57 , 39 , 16 , 18 , 40 , 55 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 37 , 72 , 37 , 37 , 37 , 38 , 36 , 37 , 38 , 33 , 34 , 34 , 34 , 34 , 34 , 34 , 58 , 48 , 56 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 23 , 23 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 58 , 40 , 40 , 40 , 40 , 40 , 0 , 36 , 37 , 38 , 82 , 83 , 84 , 36 , 38 , 40 , 40 , 40 , 40 , 40 , 40 , 57 , 37 , 38 , 43 , 0 , 0 , 58 , 40 , 16 , 59 , 48 , 0 , 0 , 0 , 33 , 34 , 37 , 38 , 0 , 0 , 0 , 39 , 0 , 0 , 58 , 40 , 0 , 0 , 0 , 0 , 0 , 0 , 40 , 40 , 56 , 40 , 40 , 40 , 57 , 0 , 0 , 0 , 88 , 104 , 40 , 56 , 40 , 0 , 0 , 34 , 35 , 56 , 48 , 40 , 23 , 40 , 39 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 4 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 0 , 0 , 0 , 0 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 2 , 2 , 0 , 0 , 0 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 2 , 2 , 2 , 2 , 2 , 0 , 0 , 19 , 19 , 19 , 19 , 2 , 2 , 3 , 2 , 2 , 2 , 2 , 2 , 0 , 2 , 0 , 0 , 19 , 19 , 19 , 19 , 2 , 2 , 4 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 0 , 0 , 19 , 19 , 19 , 19 , 0 , 4 , 4 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 0 , 0 , 19 , 19 , 19 , 19 , 0 , 0 , 0 , 2 , 2 , 2 , 2 , 2 , 2 , 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 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
149 , 10 , 86 , 68 , 10 , 22 , 12 , 68 , 10 , 22 , 12 , 68 , 10 , 11 , 12 , 68 , 20 , 19 , 18 , 68 , 10 , 22 , 12 , 68 , 10 , 22 , 12 , 68 , 10 , 145 , 18 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 152 , 25 , 26 , 68 , 24 , 25 , 26 , 68 , 28 , 27 , 26 , 68 , 29 , 27 , 26 , 68 , 31 , 33 , 26 , 68 , 31 , 26 , 33 , 68 , 30 , 26 , 34 , 68 , 32 , 154 , 36 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 170 , 39 , 41 , 68 , 42 , 39 , 41 , 68 , 47 , 43 , 41 , 68 , 47 , 43 , 44 , 68 , 47 , 43 , 41 , 68 , 47 , 43 , 44 , 68 , 46 , 45 , 48 , 68 , 52 , 49 , 39 , 68 , 53 , 178 , 39 , 68 , 65 , 66 , 67 , 68 , 189 , 126 , 67 , 68 , 61 , 126 , 67 , 68 , 61 , 74 , 67 , 68 , 61 , 190 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 184 , 58 , 60 , 68 , 57 , 187 , 60 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 , 65 , 66 , 67 , 68 ,
246 , 14 , 35 , 15 , 239 , 14 , 29 , 15 , 234 , 14 , 23 , 15 , 231 , 14 , 19 , 15 , 227 , 14 , 17 , 15 , 222 , 14 , 14 , 15 , 218 , 12 , 12 , 13 , 214 , 10 , 8 , 9 , 210 , 6 , 5 , 5 , 153 , 1 , 153 , 1 , 153 , 1 , 153 , 1 , 191 , 1 , 191 , 1 , 191 , 1 , 191 , 1 , 191 , 1 , 191 , 1 , 191 , 1 , 191 , 1 , 191 , 1 , 191 , 1 , 0 , 2 , 0 , 0 , 17 , 14 , 19 , 14 , 26 , 14 , 36 , 14 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 , 0 , 0 , 13 , 14 , 16 , 14 , 22 , 14 , 34 , 14 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 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 , 0 , 0 , 6 , 5 , 8 , 5 , 9 , 5 , 11 , 5 , 34 , 9 , 42 , 11 , 188 , 11 , 187 , 11 , 187 , 11 , 185 , 11 , 182 , 11 , 178 , 11 , 173 , 11 , 168 , 11 , 164 , 9 , 161 , 9 , 157 , 9 , 154 , 9 , 150 , 7 , 145 , 7 , 142 , 7 , 139 , 5 , 135 , 5 , 133 , 3 , 131 , 3 , 144 , 1 ,
144 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 0 , 2 , 0 , 0 , 15 , 14 , 30 , 14 , 18 , 14 , 34 , 14 , 23 , 14 , 38 , 14 , 27 , 12 , 44 , 12 , 33 , 10 , 49 , 10 , 39 , 8 , 54 , 8 , 43 , 6 , 58 , 6 , 48 , 4 , 62 , 4 , 53 , 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 , 4 , 0 , 0 , 201 , 15 , 201 , 15 , 201 , 13 , 201 , 11 , 200 , 9 , 199 , 7 , 198 , 5 , 197 , 83 , 245 , 1 , 244 , 1 , 244 , 1 , 244 , 1 , 244 , 1 , 244 , 1 , 244 , 1 , 245 , 1 , 245 , 1 , 245 , 1 , 245 , 1 , 245 , 1 , 244 , 1 , 244 , 1 , 244 , 1 , 243 , 1 , 243 , 1 , 243 , 1 , 243 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 0 , 3 , 0 , 0 , 100 , 14 , 78 , 14 , 109 , 14 , 86 , 14 , 116 , 14 , 96 , 12 , 123 , 12 , 104 , 10 , 127 , 8 , 111 , 4 , 104 , 2 , 93 , 2 , 80 , 2 , 67 , 2 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 0 , 3 , 0 , 0 , 80 , 2 , 82 , 2 , 84 , 2 , 86 , 2 , 90 , 4 , 96 , 4 , 102 , 6 , 114 , 8 , 114 , 8 , 116 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 ,
64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 64 , 0 , 0 , 2 , 0 , 0 , 7 , 14 , 10 , 14 , 14 , 14 , 16 , 14 , 22 , 14 , 34 , 14 , 47 , 14 , 47 , 12 , 44 , 12 , 44 , 10 , 47 , 10 , 47 , 8 , 44 , 8 , 44 , 6 , 47 , 4 , 47 , 2 , 44 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 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 , 0 , 0 , 69 , 2 , 71 , 6 , 191 , 9 , 191 , 9 , 191 , 7 , 191 , 5 , 191 , 3 , 191 , 83 , 191 , 1 , 191 , 1 , 191 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 128 , 1 , 0 , 3 , 0 , 0 , 193 , 95 , 128 , 81 , 193 , 95 , 193 , 81 , 163 , 91 , 193 , 95 , 129 , 81 , 128 , 81 , 193 , 95 , 128 , 81 , 193 , 81 , 135 , 81 , 163 , 91 , 128 , 81 , 193 , 95 , 128 , 81 , 193 , 95 , 193 , 81 , 193 , 95 , 128 , 81 , 163 , 91 , 193 , 95 , 129 , 81 , 128 , 81 , 193 , 95 , 128 , 81 , 165 , 81 , 129 , 81 , 163 , 91 , 165 , 81 , 193 , 95 , 163 , 91 , 1 , 16 , 0 , 32 , 29 , 8 , 29 , 8 , 29 , 6 , 29 , 4 , 24 , 8 , 24 , 8 , 24 , 6 , 24 , 4 , 27 , 6 , 27 , 4 ,
34 , 8 , 34 , 104 , 31 , 86 , 31 , 6 , 22 , 8 , 22 , 8 , 29 , 8 , 29 , 8 , 29 , 32 , 19 , 28 , 24 , 6 , 24 , 6 , 24 , 32 , 31 , 28 , 36 , 10 , 34 , 4 , 22 , 8 , 19 , 4 , 29 , 8 , 27 , 36 , 24 , 8 , 24 , 8 , 0 , 32 , 0 , 0 , 7 , 14 , 7 , 12 , 7 , 10 , 17 , 0 , 7 , 14 , 7 , 12 , 3 , 26 , 15 , 14 , 10 , 14 , 10 , 12 , 10 , 10 , 10 , 0 , 10 , 14 , 10 , 12 , 5 , 10 , 5 , 8 , 3 , 14 , 3 , 12 , 3 , 0 , 3 , 10 , 12 , 14 , 12 , 12 , 17 , 10 , 22 , 14 , 22 , 12 , 15 , 30 , 5 , 10 , 10 , 14 , 5 , 10 , 3 , 26 , 10 , 14 , 10 , 12 , 0 , 16 , 0 , 0 , 76 , 11 , 92 , 13 , 80 , 15 , 99 , 15 , 89 , 15 , 108 , 15 , 97 , 15 , 119 , 15 , 104 , 15 , 123 , 15 , 108 , 15 , 126 , 13 , 113 , 11 , 126 , 9 , 113 , 7 , 126 , 7 , 113 , 5 , 127 , 5 , 113 , 5 , 127 , 5 , 113 , 3 , 127 , 3 , 113 , 3 , 127 , 3 , 113 , 3 , 127 , 3 , 113 , 3 , 127 , 1 , 64 , 1 , 64 , 1 , 64 , 1 , 64 , 1 , 0 , 4 , 0 , 0 , 239 , 9 , 235 , 13 , 230 , 15 , 221 , 15 , 213 , 15 , 213 , 15 , 217 , 15 , 220 , 11 , 215 , 7 , 193 , 1 , 213 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 0 , 4 , 0 , 0 , 137 , 89 , 142 , 91 ,
134 , 91 , 138 , 91 , 141 , 91 , 133 , 91 , 145 , 91 , 135 , 91 , 140 , 91 , 132 , 91 , 137 , 91 , 145 , 89 , 136 , 87 , 141 , 83 , 128 , 81 , 128 , 81 , 128 , 81 , 128 , 81 , 128 , 81 , 128 , 81 , 128 , 81 , 128 , 81 , 128 , 81 , 128 , 81 , 128 , 81 , 128 , 81 , 128 , 81 , 128 , 81 , 128 , 81 , 128 , 81 , 128 , 81 , 128 , 81 , 0 , 3 , 0 , 0 , 223 , 94 , 216 , 94 , 231 , 94 , 231 , 0 , 231 , 0 , 228 , 0 , 221 , 0 , 230 , 0 , 234 , 0 , 220 , 0 , 217 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 1 , 16 , 0 , 0 , 105 , 71 , 105 , 75 , 105 , 79 , 93 , 9 , 98 , 15 , 98 , 13 , 88 , 15 , 88 , 15 , 88 , 13 , 88 , 1 , 88 , 15 , 88 , 13 , 64 , 1 , 86 , 15 , 86 , 47 , 86 , 45 , 103 , 67 , 103 , 71 , 103 , 75 , 103 , 79 , 95 , 15 , 95 , 13 , 95 , 1 , 83 , 5 , 91 , 27 , 117 , 7 , 112 , 13 , 100 , 9 , 105 , 15 , 105 , 13 , 98 , 15 , 98 , 13 , 1 , 16 , 0 , 0 , 10 , 14 , 10 , 10 , 15 , 30 , 15 , 10 , 10 , 12 , 10 , 8 , 17 , 14 , 17 , 10 , 7 , 0 , 7 , 0 , 17 , 14 , 17 , 10 , 7 , 12 , 7 , 8 , 0 , 0 , 0 , 0 , 10 , 14 , 10 , 10 , 15 , 14 , 15 , 10 , 10 , 12 , 10 , 8 , 19 , 30 , 19 , 10 , 0 , 0 , 0 , 0 , 19 , 14 , 19 , 10 ,
15 , 14 , 15 , 10 , 0 , 0 , 0 , 0 , 1 , 16 , 0 , 32 , 34 , 8 , 34 , 6 , 34 , 4 , 27 , 18 , 36 , 8 , 36 , 6 , 39 , 10 , 31 , 4 , 43 , 8 , 34 , 4 , 39 , 10 , 34 , 4 , 41 , 8 , 41 , 6 , 41 , 4 , 22 , 2 , 34 , 8 , 34 , 6 , 43 , 8 , 27 , 6 , 36 , 40 , 36 , 38 , 39 , 8 , 24 , 6 , 29 , 8 , 29 , 6 , 31 , 42 , 31 , 40 , 31 , 6 , 29 , 20 , 29 , 8 , 29 , 6 , 0 , 32 , 0 , 0 , 193 , 15 , 193 , 95 , 191 , 85 , 187 , 1 , 188 , 1 , 187 , 1 , 191 , 85 , 177 , 1 , 163 , 11 , 163 , 91 , 188 , 1 , 0 , 0 , 191 , 85 , 0 , 0 , 193 , 95 , 193 , 1 , 193 , 15 , 193 , 95 , 191 , 1 , 191 , 1 , 191 , 85 , 0 , 0 , 191 , 85 , 0 , 0 , 163 , 11 , 163 , 91 , 0 , 0 , 0 , 0 , 191 , 85 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 8 , 0 , 32 , 74 , 8 , 74 , 6 , 74 , 4 , 81 , 6 , 81 , 4 , 81 , 2 , 91 , 8 , 91 , 6 , 88 , 42 , 88 , 40 , 88 , 38 , 83 , 8 , 83 , 8 , 83 , 6 , 83 , 4 , 83 , 2 , 79 , 8 , 79 , 6 , 79 , 4 , 81 , 6 , 81 , 4 , 81 , 2 , 86 , 40 , 86 , 38 , 83 , 10 , 83 , 8 , 83 , 6 , 83 , 4 , 83 , 2 , 83 , 2 , 83 , 2 , 83 , 0 , 0 , 32 , 0 , 32 , 238 , 11 , 247 , 11 , 238 , 7 , 247 , 7 , 238 , 5 , 247 , 5 , 238 , 3 , 247 , 3 , 226 , 11 , 235 , 11 , 226 , 7 , 235 , 7 , 221 , 11 , 228 , 11 , 221 , 7 , 228 , 7 , 223 , 11 , 231 , 11 , 223 , 7 , 231 , 7 ,
223 , 5 , 231 , 5 , 233 , 11 , 240 , 11 , 233 , 7 , 240 , 7 , 233 , 5 , 240 , 5 , 233 , 3 , 240 , 3 , 233 , 3 , 240 , 3 , 0 , 16 , 0 , 32 , 216 , 15 , 245 , 15 , 245 , 15 , 245 , 13 , 245 , 11 , 245 , 9 , 245 , 7 , 245 , 5 , 245 , 3 , 245 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 0 , 6 , 0 , 0 , 41 , 11 , 245 , 3 , 41 , 9 , 245 , 3 , 41 , 7 , 247 , 3 , 41 , 5 , 247 , 3 , 34 , 11 , 245 , 3 , 34 , 9 , 39 , 11 , 252 , 3 , 39 , 9 , 252 , 3 , 39 , 5 , 46 , 11 , 245 , 3 , 46 , 9 , 245 , 3 , 46 , 7 , 247 , 3 , 46 , 5 , 247 , 3 , 46 , 3 , 36 , 9 , 43 , 11 , 245 , 3 , 41 , 11 , 252 , 3 , 41 , 9 , 252 , 3 , 0 , 24 , 0 , 32 , 69 , 15 , 69 , 15 , 69 , 15 , 69 , 15 , 69 , 15 , 0 , 0 , 69 , 15 , 71 , 15 , 74 , 15 , 74 , 15 , 74 , 15 , 0 , 0 , 74 , 15 , 0 , 0 , 74 , 15 , 67 , 15 , 69 , 15 , 69 , 15 , 69 , 15 , 0 , 0 , 69 , 15 , 69 , 15 , 69 , 15 , 0 , 0 , 74 , 15 , 71 , 15 , 76 , 15 , 76 , 15 , 79 , 15 , 0 , 0 , 74 , 15 , 71 , 15 , 0 , 24 , 0 , 32 , 187 , 87 , 174 , 1 , 187 , 85 , 0 , 0 , 187 , 83 , 0 , 0 , 0 , 0 , 179 , 1 , 179 , 9 , 179 , 7 , 179 , 5 , 179 , 3 ,
179 , 3 , 191 , 1 , 191 , 83 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 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 , 12 , 0 , 16 , 36 , 11 , 240 , 3 , 43 , 11 , 240 , 3 , 36 , 9 , 240 , 1 , 43 , 9 , 247 , 1 , 36 , 5 , 250 , 3 , 43 , 5 , 250 , 3 , 36 , 3 , 245 , 3 , 43 , 3 , 245 , 3 , 29 , 11 , 243 , 3 , 36 , 11 , 252 , 3 , 29 , 9 , 247 , 3 , 36 , 9 , 243 , 1 , 29 , 5 , 245 , 1 , 36 , 5 , 238 , 3 , 29 , 3 , 238 , 3 , 36 , 3 , 247 , 1 , 0 , 12 , 0 , 32 , 76 , 15 , 76 , 13 , 76 , 11 , 0 , 0 , 81 , 15 , 81 , 13 , 81 , 11 , 76 , 1 , 76 , 15 , 76 , 13 , 79 , 31 , 79 , 13 , 83 , 15 , 83 , 13 , 74 , 15 , 74 , 13 , 76 , 15 , 76 , 13 , 76 , 11 , 0 , 0 , 79 , 15 , 79 , 13 , 79 , 11 , 0 , 0 , 74 , 15 , 74 , 13 , 74 , 11 , 79 , 1 , 81 , 15 , 81 , 13 , 74 , 15 , 74 , 13 , 1 , 24 , 0 , 32 , 76 , 15 , 76 , 13 , 76 , 11 , 0 , 0 , 81 , 15 , 81 , 13 , 81 , 11 , 0 , 0 , 76 , 15 , 76 , 13 , 79 , 31 , 79 , 13 , 83 , 15 , 83 , 13 , 79 , 15 , 79 , 13 , 76 , 15 , 76 , 15 , 76 , 13 , 76 , 13 , 76 , 11 , 76 , 7 , 76 , 1 , 76 , 1 , 76 , 1 , 74 , 1 , 74 , 1 , 74 , 1 , 81 , 1 , 81 , 1 , 74 , 1 , 74 , 1 , 0 , 24 , 0 , 32 , 228 , 31 , 228 , 15 , 228 , 45 , 228 , 43 ,
58 , 2 , 58 , 2 , 216 , 43 , 58 , 2 , 53 , 2 , 53 , 2 , 216 , 43 , 53 , 2 , 216 , 11 , 55 , 0 , 55 , 0 , 55 , 0 , 226 , 31 , 226 , 47 , 226 , 45 , 226 , 1 , 223 , 31 , 223 , 47 , 223 , 45 , 228 , 1 , 226 , 31 , 226 , 47 , 226 , 45 , 192 , 1 , 231 , 31 , 231 , 47 , 231 , 45 , 192 , 1 , 0 , 12 , 0 , 32 , 228 , 31 , 228 , 15 , 228 , 45 , 228 , 43 , 58 , 2 , 58 , 2 , 216 , 11 , 58 , 2 , 53 , 2 , 53 , 2 , 216 , 11 , 53 , 2 , 216 , 11 , 216 , 1 , 216 , 1 , 192 , 1 , 223 , 31 , 223 , 15 , 223 , 45 , 223 , 43 , 216 , 1 , 192 , 1 , 216 , 27 , 219 , 1 , 226 , 31 , 226 , 15 , 226 , 45 , 226 , 43 , 55 , 34 , 55 , 34 , 55 , 34 , 55 , 32 , 0 , 12 , 0 , 32 , 228 , 31 , 228 , 15 , 228 , 47 , 228 , 47 , 228 , 45 , 228 , 43 , 228 , 41 , 228 , 39 , 228 , 37 , 228 , 35 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 192 , 1 , 46 , 0 , 46 , 0 , 46 , 2 , 46 , 2 , 53 , 2 , 53 , 2 , 51 , 18 , 51 , 2 , 43 , 2 , 43 , 2 , 43 , 2 , 43 , 0 , 48 , 2 , 48 , 34 , 48 , 34 , 48 , 34 , 0 , 12 , 0 , 0 , 204 , 38 , 204 , 38 , 204 , 36 , 204 , 36 , 204 , 34 , 204 , 34 , 204 , 34 , 204 , 32 , 204 , 38 , 204 , 38 , 204 , 36 , 204 , 36 , 204 , 34 , 204 , 34 , 204 , 34 , 204 , 32 , 199 , 38 , 199 , 38 , 199 , 36 , 199 , 36 , 199 , 34 , 199 , 34 , 199 , 34 , 199 , 32 , 202 , 38 , 202 , 38 , 202 , 36 , 202 , 36 , 202 , 34 , 202 , 34 ,
202 , 34 , 202 , 32 , 0 , 12 , 0 , 32 , 204 , 6 , 204 , 6 , 204 , 4 , 204 , 4 , 204 , 2 , 204 , 2 , 204 , 2 , 58 , 0 , 204 , 6 , 204 , 6 , 204 , 4 , 204 , 4 , 204 , 2 , 204 , 2 , 204 , 2 , 63 , 0 , 202 , 6 , 202 , 4 , 211 , 6 , 211 , 4 , 199 , 6 , 199 , 4 , 199 , 2 , 209 , 0 , 202 , 6 , 202 , 4 , 202 , 2 , 60 , 0 , 207 , 6 , 207 , 4 , 207 , 2 , 58 , 0 , 0 , 12 , 0 , 0 , 179 , 85 , 154 , 81 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 4 , 0 , 0 , 204 , 6 , 204 , 6 , 204 , 6 , 204 , 4 , 204 , 4 , 204 , 4 , 204 , 2 , 204 , 2 , 204 , 2 , 204 , 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 , 202 , 0 , 202 , 0 , 202 , 0 , 202 , 0 , 202 , 22 , 202 , 6 , 195 , 20 , 195 , 4 , 0 , 12 , 0 , 0 , 204 , 10 , 204 , 8 , 204 , 6 , 204 , 4 , 207 , 10 , 207 , 8 , 207 , 6 , 207 , 4 , 216 , 10 , 216 , 8 , 211 , 10 , 211 , 8 , 216 , 10 , 211 , 10 , 214 , 8 , 221 , 12 , 226 , 14 , 226 , 14 , 226 , 12 , 226 , 10 , 226 , 8 , 226 , 4 ,
211 , 0 , 211 , 0 , 216 , 0 , 216 , 0 , 211 , 0 , 211 , 0 , 214 , 0 , 214 , 0 , 221 , 0 , 221 , 0 , 0 , 16 , 0 , 0 , 164 , 94 , 171 , 94 , 176 , 94 , 164 , 92 , 171 , 92 , 176 , 92 , 164 , 90 , 171 , 90 , 176 , 90 , 164 , 88 , 171 , 88 , 176 , 88 , 164 , 86 , 171 , 86 , 176 , 86 , 164 , 84 , 171 , 84 , 176 , 84 , 164 , 82 , 171 , 82 , 176 , 82 , 164 , 80 , 171 , 80 , 176 , 80 , 164 , 80 , 171 , 80 , 176 , 80 , 186 , 80 , 174 , 80 , 128 , 80 , 128 , 80 , 128 , 80 , 0 , 12 , 0 , 0 , 175 , 91 , 1 , 94 , 1 , 94 , 191 , 83 , 1 , 94 , 191 , 83 , 175 , 91 , 1 , 94 , 1 , 94 , 191 , 83 , 1 , 94 , 191 , 83 , 175 , 91 , 191 , 83 , 1 , 94 , 191 , 83 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 16 , 0 , 16 , 150 , 14 , 150 , 14 , 159 , 30 , 159 , 14 , 159 , 14 , 159 , 14 , 152 , 30 , 152 , 14 , 147 , 30 , 147 , 14 , 157 , 30 , 157 , 14 , 150 , 30 , 150 , 14 , 150 , 14 , 150 , 14 , 155 , 30 , 155 , 14 , 155 , 14 , 155 , 14 , 0 , 0 , 155 , 0 , 0 , 0 , 155 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 16 , 0 , 0 , 100 , 95 , 112 , 95 , 100 , 89 , 112 , 89 , 91 , 93 , 103 , 93 , 95 , 95 , 107 , 95 , 95 , 89 , 107 , 89 , 95 , 87 , 107 , 87 , 95 , 85 , 107 , 85 ,
95 , 83 , 107 , 83 , 91 , 95 , 103 , 95 , 91 , 89 , 103 , 89 , 91 , 87 , 103 , 87 , 93 , 95 , 105 , 95 , 93 , 89 , 105 , 89 , 93 , 87 , 105 , 87 , 95 , 95 , 107 , 95 , 95 , 89 , 107 , 89 , 0 , 8 , 0 , 32 , 140 , 92 , 140 , 92 , 140 , 90 , 140 , 90 , 140 , 88 , 140 , 88 , 140 , 86 , 138 , 22 , 143 , 92 , 143 , 92 , 143 , 90 , 143 , 90 , 143 , 88 , 143 , 88 , 143 , 86 , 150 , 22 , 147 , 92 , 147 , 92 , 147 , 90 , 147 , 90 , 147 , 88 , 147 , 88 , 147 , 86 , 147 , 86 , 147 , 84 , 135 , 8 , 150 , 14 , 147 , 28 , 147 , 10 , 147 , 40 , 143 , 12 , 143 , 10 , 0 , 32 , 0 , 32 , 135 , 94 , 135 , 92 , 135 , 90 , 135 , 88 , 143 , 92 , 143 , 90 , 140 , 94 , 140 , 92 , 140 , 90 , 140 , 88 , 140 , 86 , 140 , 84 , 135 , 94 , 135 , 92 , 135 , 90 , 135 , 88 , 135 , 94 , 135 , 92 , 135 , 90 , 135 , 88 , 140 , 92 , 140 , 90 , 145 , 94 , 145 , 92 , 145 , 90 , 145 , 88 , 147 , 92 , 147 , 90 , 150 , 94 , 150 , 92 , 150 , 90 , 150 , 88 , 0 , 16 , 0 , 0 , 95 , 15 , 107 , 15 , 95 , 9 , 107 , 9 , 88 , 11 , 100 , 11 , 91 , 15 , 103 , 15 , 91 , 9 , 103 , 9 , 88 , 15 , 100 , 15 , 88 , 9 , 100 , 9 , 88 , 7 , 100 , 7 , 91 , 15 , 103 , 15 , 91 , 9 , 103 , 9 , 93 , 7 , 105 , 7 , 93 , 5 , 105 , 5 , 95 , 15 , 107 , 15 , 95 , 9 , 107 , 9 , 95 , 7 , 107 , 7 , 91 , 11 , 103 , 11 , 0 , 8 , 0 , 32 , 145 , 94 , 145 , 92 , 145 , 90 , 145 , 88 , 147 , 92 , 147 , 90 ,
152 , 94 , 152 , 92 , 152 , 90 , 152 , 88 , 157 , 92 , 157 , 90 , 143 , 92 , 152 , 88 , 147 , 94 , 150 , 90 , 143 , 94 , 143 , 92 , 143 , 90 , 143 , 88 , 145 , 92 , 145 , 90 , 150 , 94 , 150 , 92 , 150 , 90 , 150 , 88 , 155 , 92 , 155 , 90 , 162 , 94 , 159 , 88 , 152 , 92 , 147 , 86 , 0 , 16 , 0 , 32 , 1 , 94 , 175 , 91 , 1 , 94 , 191 , 83 , 175 , 91 , 191 , 83 , 1 , 94 , 191 , 83 , 1 , 94 , 191 , 83 , 175 , 91 , 1 , 94 , 175 , 91 , 191 , 83 , 1 , 94 , 191 , 83 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 16 , 0 , 16 , 1 , 94 , 1 , 94 , 1 , 94 , 191 , 83 , 175 , 91 , 191 , 83 , 191 , 83 , 1 , 94 , 1 , 94 , 191 , 83 , 1 , 94 , 191 , 83 , 175 , 91 , 191 , 83 , 175 , 91 , 191 , 83 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 80 , 0 , 16 , 0 , 16 , 41 , 8 , 41 , 8 , 41 , 6 , 43 , 22 , 41 , 68 , 43 , 20 , 41 , 66 , 43 , 18 , 51 , 72 , 48 , 24 , 46 , 72 , 46 , 6 , 48 , 72 , 48 , 6 , 43 , 24 , 43 , 6 , 46 , 72 , 46 , 8 , 46 , 6 , 48 , 22 , 46 , 68 , 48 , 20 , 46 , 68 , 48 , 20 , 43 , 72 , 46 , 24 , 43 , 70 , 46 , 20 , 43 , 72 , 43 , 8 , 41 , 22 , 41 , 36 ,
0 , 32 , 0 , 0 , 100 , 83 , 100 , 83 , 100 , 85 , 100 , 85 , 100 , 87 , 100 , 87 , 100 , 89 , 100 , 89 , 100 , 91 , 100 , 91 , 100 , 93 , 100 , 93 , 100 , 95 , 64 , 81 , 100 , 95 , 64 , 81 , 100 , 93 , 64 , 81 , 100 , 93 , 64 , 81 , 100 , 91 , 64 , 81 , 100 , 91 , 64 , 81 , 100 , 89 , 64 , 81 , 100 , 87 , 64 , 81 , 100 , 85 , 64 , 81 , 100 , 83 , 64 , 81 , 0 , 8 , 0 , 32 , 95 , 83 , 95 , 83 , 95 , 85 , 95 , 85 , 95 , 87 , 95 , 87 , 95 , 89 , 95 , 89 , 95 , 91 , 95 , 91 , 95 , 93 , 95 , 93 , 95 , 95 , 0 , 80 , 95 , 95 , 0 , 80 , 95 , 93 , 0 , 80 , 95 , 93 , 0 , 80 , 95 , 91 , 0 , 80 , 95 , 91 , 0 , 80 , 95 , 89 , 0 , 80 , 95 , 87 , 0 , 80 , 95 , 85 , 0 , 80 , 95 , 83 , 0 , 80 , 0 , 8 , 0 , 32 , 195 , 7 , 197 , 23 , 199 , 25 , 204 , 25 , 211 , 27 , 219 , 29 , 228 , 14 , 240 , 30 , 103 , 15 , 110 , 31 , 228 , 14 , 240 , 30 , 103 , 15 , 110 , 31 , 228 , 12 , 240 , 28 , 103 , 13 , 110 , 29 , 228 , 10 , 240 , 26 , 103 , 11 , 110 , 27 , 228 , 8 , 240 , 24 , 103 , 9 , 110 , 25 , 228 , 6 , 240 , 22 , 103 , 5 , 110 , 21 , 228 , 2 , 240 , 18 , 0 , 5 , 0 , 0 , 140 , 94 , 140 , 92 , 140 , 90 , 140 , 88 , 140 , 86 , 138 , 92 , 138 , 90 , 138 , 88 , 143 , 94 , 143 , 92 , 143 , 90 , 143 , 88 , 143 , 86 , 140 , 92 , 140 , 90 , 140 , 88 , 140 , 94 , 140 , 92 , 140 , 90 , 140 , 88 , 140 , 86 , 138 , 92 , 138 , 90 , 138 , 88 ,
143 , 94 , 143 , 92 , 143 , 90 , 143 , 88 , 143 , 86 , 145 , 92 , 145 , 90 , 145 , 88 , 0 , 32 , 0 , 32 , 147 , 94 , 147 , 92 , 147 , 90 , 147 , 88 , 147 , 86 , 145 , 92 , 145 , 90 , 145 , 88 , 150 , 94 , 150 , 92 , 150 , 90 , 150 , 88 , 150 , 86 , 147 , 92 , 147 , 90 , 147 , 88 , 147 , 94 , 147 , 92 , 147 , 90 , 147 , 88 , 147 , 86 , 143 , 92 , 143 , 90 , 143 , 88 , 140 , 10 , 145 , 22 , 150 , 92 , 143 , 88 , 150 , 46 , 150 , 42 , 140 , 14 , 140 , 90 , 0 , 32 , 0 , 0 , 223 , 6 , 235 , 6 , 98 , 7 , 105 , 7 , 223 , 4 , 235 , 4 , 98 , 5 , 105 , 5 , 223 , 2 , 235 , 2 , 98 , 3 , 105 , 3 , 223 , 0 , 235 , 0 , 98 , 1 , 105 , 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 , 3 , 0 , 0 , 233 , 90 , 192 , 0 , 233 , 88 , 240 , 14 , 240 , 12 , 240 , 90 , 211 , 80 , 228 , 0 , 228 , 80 , 192 , 0 , 211 , 80 , 228 , 0 , 228 , 80 , 192 , 0 , 192 , 0 , 228 , 0 , 228 , 80 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 192 , 0 , 0 , 11 , 0 , 0 , 124 , 95 , 124 , 89 , 124 , 87 , 124 , 85 , 124 , 83 , 124 , 83 , 119 , 91 , 119 , 89 , 122 , 95 , 122 , 91 , 122 , 89 , 122 , 87 , 122 , 85 , 122 , 85 , 122 , 83 , 122 , 83 ,
117 , 95 , 117 , 91 , 117 , 89 , 117 , 89 , 117 , 87 , 117 , 87 , 117 , 85 , 117 , 85 , 117 , 83 , 117 , 83 , 115 , 95 , 115 , 91 , 115 , 89 , 115 , 87 , 115 , 85 , 115 , 83 , 0 , 16 , 0 , 0 , 117 , 95 , 117 , 91 , 117 , 89 , 117 , 87 , 117 , 85 , 117 , 85 , 117 , 83 , 117 , 83 , 119 , 91 , 119 , 87 , 115 , 95 , 115 , 91 , 115 , 89 , 115 , 87 , 115 , 85 , 115 , 85 , 122 , 95 , 122 , 89 , 122 , 87 , 122 , 85 , 122 , 83 , 122 , 83 , 115 , 95 , 115 , 91 , 115 , 89 , 115 , 89 , 115 , 87 , 115 , 87 , 115 , 85 , 115 , 85 , 115 , 83 , 115 , 83 , 0 , 16 , 0 , 0 , 12 , 12 , 12 , 6 , 12 , 10 , 12 , 6 , 12 , 10 , 12 , 6 , 12 , 2 , 12 , 0 , 12 , 12 , 12 , 6 , 12 , 10 , 12 , 6 , 12 , 10 , 12 , 6 , 12 , 2 , 15 , 0 , 17 , 12 , 17 , 6 , 17 , 10 , 17 , 6 , 17 , 2 , 17 , 0 , 10 , 12 , 10 , 6 , 10 , 10 , 10 , 6 , 10 , 10 , 10 , 6 , 10 , 10 , 10 , 6 , 10 , 2 , 0 , 0 , 0 , 16 , 0 , 32 , 5 , 12 , 5 , 6 , 5 , 10 , 5 , 6 , 5 , 2 , 5 , 0 , 7 , 12 , 7 , 6 , 7 , 10 , 7 , 6 , 7 , 2 , 0 , 0 , 15 , 12 , 15 , 6 , 15 , 2 , 0 , 0 , 12 , 12 , 12 , 6 , 12 , 10 , 12 , 6 , 12 , 10 , 12 , 6 , 12 , 10 , 12 , 6 , 12 , 10 , 12 , 6 , 12 , 2 , 0 , 0 , 12 , 12 , 12 , 6 , 12 , 2 , 12 , 0 , 0 , 16 , 0 , 0 , 131 , 85 , 164 , 83 , 128 , 81 , 131 , 83 , 164 , 85 , 155 , 83 , 162 , 85 , 131 , 83 ,
128 , 81 , 131 , 83 , 145 , 85 , 179 , 83 , 162 , 85 , 128 , 81 , 157 , 85 , 138 , 83 , 183 , 85 , 152 , 83 , 174 , 85 , 157 , 83 , 128 , 81 , 183 , 83 , 183 , 85 , 152 , 83 , 174 , 85 , 157 , 83 , 145 , 85 , 131 , 83 , 128 , 81 , 131 , 83 , 164 , 85 , 157 , 83 , 0 , 16 , 0 , 0 , 178 , 3 , 178 , 3 , 178 , 3 , 178 , 3 , 177 , 3 , 177 , 3 , 176 , 3 , 174 , 3 , 170 , 3 , 165 , 3 , 155 , 3 , 147 , 3 , 143 , 3 , 141 , 3 , 140 , 3 , 140 , 3 , 140 , 3 , 140 , 3 , 140 , 3 , 143 , 3 , 148 , 3 , 157 , 3 , 164 , 3 , 170 , 3 , 174 , 3 , 176 , 3 , 177 , 3 , 179 , 3 , 179 , 3 , 180 , 3 , 180 , 3 , 180 , 3 , 0 , 16 , 0 , 32 , 176 , 88 , 176 , 80 , 176 , 86 , 179 , 84 , 171 , 86 , 176 , 80 , 176 , 84 , 176 , 80 , 176 , 80 , 176 , 84 , 176 , 80 , 176 , 80 , 176 , 82 , 176 , 80 , 176 , 80 , 176 , 82 , 171 , 88 , 171 , 80 , 171 , 86 , 167 , 84 , 169 , 86 , 171 , 80 , 171 , 84 , 171 , 80 , 171 , 80 , 171 , 84 , 171 , 80 , 171 , 80 , 171 , 82 , 171 , 80 , 171 , 80 , 171 , 82 , 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 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 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 , 0 , 0 ,
2021-06-10 18:39:08 +00:00
0 , 112 , 120 , 97 , 13 , 201 , 4 , 111 , 235 , 193 , 226 , 221 , 39 , 95 , 127 , 119 , 116 , 246 , 253 , 135 , 71 , 27 , 193 , 229 , 175 , 240 , 0 , 221 , 43 , 156 , 95 , 70 , 105 , 147 , 20 , 209 , 237 , 239 , 144 , 189 , 194 , 27 , 228 , 151 , 156 , 210 , 199 , 65 , 148 , 117 , 143 , 240 , 12 , 213 , 125 , 197 , 91 , 188 , 134 , 25 , 70 , 194 , 240 , 49 , 102 , 70 , 38 , 60 , 191 , 120 , 97 , 232 , 49 , 178 , 210 , 237 , 188 , 234 , 49 , 220 , 113 , 222 , 117 , 126 , 71 , 230 , 135 , 219 , 26 , 191 , 99 , 164 , 85 , 12 , 57 , 112 , 167 , 237 , 119 , 164 , 199 , 51 , 160 , 61 , 162 , 58 , 164 , 77 , 240 , 14 , 123 , 107 , 193 , 74 , 54 , 217 , 110 , 164 , 117 , 48 , 101 , 156 , 189 , 153 , 157 , 166 , 207 , 212 , 6 , 68 , 71 , 218 , 167 , 72 , 246 , 206 , 91 , 186 , 112 , 173 , 216 , 60 , 175 , 221 , 82 , 12 , 255 , 22 , 210 , 137 , 98 , 96 , 69 , 42 , 124 , 3 , 97 , 120 , 160 , 164 , 137 , 194 , 249 , 20 , 200 , 187 , 19 , 86 , 93 , 23 , 42 , 31 , 89 , 77 , 236 , 204 , 240 , 18 , 60 , 147 , 14 , 63 , 220 , 111 , 157 , 129 , 58 , 28 , 138 , 134 , 38 , 38 , 70 , 179 , 234 , 37 , 202 , 206 , 16 , 242 , 232 , 153 , 210 , 67 , 112 , 132 , 254 , 137 , 80 , 240 , 132 , 80 , 248 , 119 , 160 , 80 , 248 , 181 , 160 , 40 , 254 , 12 , 42 , 138 , 159 , 39 , 10 , 133 , 127 , 138 , 226 , 174 , 157 , 125 , 103 , 156 , 231 , 138 , 237 , 42 , 4 , 194 , 125 , 104 , 147 , 150 , 87 , 74 , 132 , 207 , 15 , 42 , 226 , 220 , 82 , 17 ,
95 , 160 , 34 , 254 , 4 , 42 , 226 , 13 , 84 , 4 , 197 , 8 , 21 , 19 , 102 , 210 , 231 , 73 , 53 , 211 , 163 , 64 , 35 , 64 , 235 , 54 , 121 , 41 , 165 , 89 , 215 , 163 , 118 , 61 , 2 , 215 , 99 , 125 , 175 , 216 , 216 , 88 , 153 , 138 , 244 , 12 , 93 , 57 , 180 , 52 , 24 , 108 , 102 , 147 , 89 , 105 , 235 , 46 , 45 , 211 , 181 , 82 , 108 , 208 , 30 , 155 , 157 , 45 , 7 , 119 , 218 , 241 , 161 , 197 , 3 , 157 , 19 , 102 , 105 , 237 , 42 , 225 , 52 , 75 , 61 , 67 , 249 , 16 , 114 , 55 , 130 , 228 , 168 , 70 , 250 , 174 , 177 , 246 , 138 , 245 , 19 , 40 , 193 , 71 , 114 , 252 , 24 , 233 , 39 , 22 , 156 , 61 , 218 , 36 , 229 , 174 , 27 , 53 , 226 , 124 , 14 , 201 , 150 , 52 , 15 , 5 , 203 , 35 , 43 , 190 , 168 , 13 , 132 , 201 , 22 , 98 , 111 , 105 , 135 , 199 , 37 , 162 , 245 , 167 , 198 , 61 , 102 , 135 , 124 , 22 , 181 , 217 , 1 , 182 , 143 , 10 , 250 , 171 , 204 , 40 , 131 , 234 , 169 , 176 , 233 , 119 , 186 , 124 , 40 , 243 , 69 , 150 , 11 , 108 , 136 , 202 , 172 , 47 , 11 , 151 , 42 , 178 , 87 , 98 , 66 , 17 , 93 , 43 , 153 , 124 , 56 , 108 , 31 , 33 , 247 , 103 , 120 , 202 , 154 , 165 , 76 , 171 , 220 , 251 , 39 , 18 , 44 , 160 , 254 , 12 , 94 , 144 , 180 , 242 , 77 , 229 , 228 , 138 , 120 , 228 , 114 , 184 , 168 , 226 , 50 , 181 , 176 , 178 , 51 , 37 , 211 , 46 , 247 , 233 , 240 , 202 , 202 , 255 , 18 , 150 , 255 , 163 , 81 , 162 , 108 , 46 , 121 , 88 , 37 , 172 , 93 , 187 , 8 , 66 , 203 , 146 ,
103 , 32 , 20 , 38 , 255 , 111 , 146 , 8 , 150 , 42 , 255 , 39 , 73 , 254 , 199 , 93 , 130 , 61 , 170 , 30 , 58 , 228 , 63 , 74 , 29 , 242 , 255 , 151 , 64 , 186 , 117 , 200 , 255 , 255 , 83 , 133 , 87 , 146 , 40 , 176 , 31 , 130 , 253 , 80 , 98 , 143 , 134 , 57 , 148 , 20 , 21 , 212 , 95 , 97 , 247 , 87 , 65 , 253 , 211 , 147 , 255 , 171 , 243 , 42 , 200 , 173 , 94 , 126 , 139 , 151 , 255 , 255 , 41 , 192 , 44 , 188 , 254 , 202 , 151 , 255 , 135 , 50 , 125 , 228 , 203 , 255 , 255 , 241 , 161 , 44 , 47 , 222 , 5 , 10 , 114 , 57 , 118 , 209 , 81 , 244 , 16 , 142 , 173 , 192 , 8 , 51 , 11 , 83 , 8 , 32 , 78 , 58 , 8 , 255 , 127 , 138 , 206 , 170 , 228 , 99 , 55 , 90 , 159 , 199 , 151 , 112 , 99 , 134 , 184 , 40 , 38 , 124 , 106 , 255 , 144 , 9 , 209 , 33 , 38 , 157 , 240 , 151 , 93 , 196 , 33 , 88 , 204 , 27 , 226 , 166 , 156 , 16 , 236 , 9 , 255 , 105 , 39 , 162 , 15 , 79 , 25 , 236 , 108 , 77 , 165 , 67 , 187 , 39 , 110 , 116 , 147 , 167 , 214 , 213 , 88 , 48 , 91 , 14 , 21 , 233 , 202 , 214 , 88 , 185 , 100 , 161 , 173 , 133 , 185 , 249 , 116 , 178 , 89 , 169 , 55 , 213 , 194 , 39 , 150 , 164 , 23 , 52 , 108 , 37 , 185 , 160 , 41 , 185 , 240 , 63 , 242 , 103 , 122 , 97 , 82 , 232 , 84 , 25 , 232 , 199 , 101 , 198 , 169 , 104 , 78 , 193 , 114 , 115 , 150 , 192 , 130 , 221 , 54 , 172 , 176 , 96 , 69 , 105 , 28 , 87 , 118 , 83 , 153 , 134 , 248 , 169 , 129 , 14 , 113 , 135 , 185 , 116 , 106 , 64 , 148 , 157 ,
58 , 201 , 10 , 225 , 178 , 254 , 85 , 44 , 228 , 201 , 104 , 179 , 17 , 212 , 167 , 206 , 229 , 59 , 30 , 217 , 79 , 146 , 149 , 54 , 15 , 246 , 204 , 207 , 11 , 116 , 13 , 166 , 134 , 195 , 80 , 219 , 96 , 58 , 220 , 8 , 211 , 212 , 62 , 253 , 64 , 212 , 88 , 111 , 196 , 26 , 70 , 26 , 18 , 63 , 152 , 172 , 170 , 93 , 123 , 171 , 6 , 217 , 194 , 240 , 173 , 242 , 189 , 11 , 28 , 123 , 128 , 214 , 138 , 250 , 136 , 79 , 188 , 48 , 158 , 247 , 225 , 98 , 60 , 27 , 37 , 3 , 42 , 227 , 8 , 189 , 211 , 106 , 4 , 198 , 26 , 225 , 135 , 24 , 169 , 124 , 200 , 142 , 7 , 118 , 124 , 208 , 120 , 97 , 96 , 32 , 79 , 54 , 70 , 180 , 138 , 237 , 21 , 218 , 51 , 176 , 63 , 228 , 131 , 85 , 8 , 75 , 31 , 137 , 143 , 47 , 92 , 180 , 115 , 80 , 216 , 69 , 179 , 84 , 126 , 48 , 122 , 141 , 137 , 90 , 71 , 41 , 118 , 77 , 160 , 33 , 22 , 46 , 5 , 114 , 232 , 144 , 59 , 87 , 17 , 136 , 75 , 108 , 245 , 70 , 217 , 209 , 91 , 143 , 255 , 83 , 249 , 55 , 242 , 255 , 219 , 106 , 165 , 233 , 135 , 255 , 12 , 140 , 164 , 31 , 46 , 161 , 36 , 129 , 204 , 189 , 165 , 50 , 136 , 167 , 154 , 186 , 88 , 89 , 28 , 207 , 86 , 154 , 93 , 189 , 11 , 233 , 135 , 90 , 232 , 33 , 113 , 206 , 180 , 172 , 146 , 238 , 252 , 189 , 168 , 248 , 59 , 53 , 76 , 233 , 225 , 199 , 98 , 222 , 246 , 107 , 189 , 236 , 229 , 106 , 48 , 189 , 101 , 2 , 217 , 141 , 108 , 98 , 171 , 232 , 39 , 3 , 120 , 15 , 3 , 87 , 17 , 149 , 39 , 169 , 16 , 55 ,
12 , 185 , 77 , 243 , 205 , 29 , 75 , 238 , 211 , 161 , 178 , 199 , 84 , 211 , 101 , 59 , 35 , 78 , 25 , 53 , 110 , 154 , 250 , 98 , 38 , 148 , 243 , 135 , 57 , 182 , 138 , 108 , 107 , 112 , 89 , 79 , 100 , 176 , 138 , 71 , 214 , 28 , 177 , 17 , 137 , 213 , 153 , 99 , 175 , 144 , 53 , 115 , 199 , 200 , 96 , 162 , 44 , 154 , 4 , 133 , 4 , 233 , 74 , 33 , 22 , 231 , 154 , 149 , 66 , 195 , 198 , 53 , 27 , 197 , 154 , 182 , 142 , 105 , 38 , 84 , 252 , 163 , 161 , 180 , 185 , 59 , 208 , 15 , 14 , 14 , 14 , 21 , 217 , 172 , 172 , 114 , 212 , 192 , 82 , 192 , 220 , 226 , 114 , 148 , 156 , 90 , 76 , 88 , 79 , 187 , 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 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
2021-06-10 14:52:51 +00:00
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ;
var Module = typeof Module !== "undefined" ? Module : { } ;
if ( ! Module . expectedDataFileDownloads ) {
Module . expectedDataFileDownloads = 0 ;
Module . finishedDataFileDownloads = 0 ;
}
Module . expectedDataFileDownloads ++ ;
( function ( ) {
var loadPackage = function ( metadata ) {
function runWithFS ( ) {
var fileData0 = [ ] ;
fileData0 . push . apply ( fileData0 , [ 67 , 80 , 79 , 68 , 68 , 0 , 0 , 0 , 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 , 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 , 0 , 0 , 0 , 0 , 0 , 99 , 70 , 73 , 76 , 0 , 0 , 0 , 0 , 123 , 144 , 0 , 0 , 112 , 111 , 100 , 47 , 112 , 105 , 99 , 111 , 56 , 95 , 98 , 111 , 111 , 116 , 46 , 112 , 56 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 97 , 1 , 0 , 0 , 242 , 16 , 112 , 105 , 99 , 111 , 45 , 56 , 32 , 99 , 97 , 114 , 116 , 114 , 105 , 100 , 103 , 101 , 32 , 47 , 47 , 32 , 104 , 116 , 116 , 112 , 58 , 47 , 47 , 119 , 119 , 119 , 46 , 31 , 0 , 255 , 13 , 46 , 99 , 111 , 109 , 10 , 118 , 101 , 114 , 115 , 105 , 111 , 110 , 32 , 56 , 10 , 95 , 95 , 108 , 117 , 97 , 95 , 95 , 10 , 10 , 45 , 45 , 62 , 56 , 6 , 0 , 25 , 159 , 95 , 95 , 103 , 102 , 120 , 95 , 95 , 10 , 48 , 1 , 0 , 108 , 15 , 129 , 0 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 45 , 1 , 137 , 64 , 31 , 102 , 137 , 64 , 112 , 15 , 139 , 1 , 109 , 15 , 1 , 1 , 239 , 95 , 95 , 95 , 109 , 97 , 112 , 10 , 2 , 240 , 15 , 1 , 1 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 44 , 50 , 95 , 95 , 115 , 187 , 98 , 48 , 49 , 48 , 99 , 17 , 0 , 161 , 51 , 48 , 53 , 53 , 53 , 50 , 98 , 53 , 54 , 53 , 10 , 0 , 64 , 51 , 53 , 53 , 52 , 5 , 0 , 128 , 49 , 53 , 51 , 53 , 55 , 48 , 53 , 48 , 3 , 0 , 15 , 5 , 0 , 106 , 0 , 169 , 0 , 16 , 56 , 12 , 0 , 115 , 50 , 52 , 48 , 51 , 53 , 50 , 52 , 26 , 0 , 15 , 91 , 2 , 130 , 30 , 49 , 154 , 0 , 15 , 169 , 0 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 238 , 113 , 95 , 95 , 109 , 117 , 115 , 105 , 99 , 114 , 74 , 50 , 32 , 52 , 49 , 2 , 0 , 15 , 12 , 0 , 255 , 255 , 224 , 80 , 49 , 52 , 49 , 10 , 10 , 99 , 70 , 73 , 76 , 0 , 0 , 0 , 0 , 27 , 189 , 12 , 0 , 112 , 111 , 100 , 47 , 103 , 102 , 120 , 49 , 46 , 112 , 111 , 100 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 31 , 74 , 0 , 0 , 243 , 22 , 67 , 80 , 79 , 68 , 68 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 103 , 102 , 120 , 49 , 46 , 112 , 111 , 100 , 0 , 47 , 112 , 97 , 98 , 97 , 47 , 112 , 105 , 99 , 111 , 56 , 47 , 112 , 111 , 100 , 47 , 25 , 0 , 63 , 9 , 1 , 0 , 1 , 0 , 10 , 177 , 67 , 66 , 77 , 80 , 20 , 0 , 1 , 0 , 128 , 0 , 0 , 4 , 0 , 47 , 32 , 0 , 1 , 0 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 207 , 79 , 77 , 0 , 255 , 255 , 4 , 0 , 73 , 47 , 0 , 0 , 0 , 2 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 91 , 63 , 163 , 255 , 255 , 4 , 0 , 73 , 47 , 232 , 241 , 4 , 0 , 75 , 47 , 170 , 204 , 4 , 0 , 75 , 15 , 0 , 2 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 155 , 79 , 39 , 236 , 255 , 255 , 4 , 0 , 73 , 47 , 232 , 241 , 4 , 0 , 255 , 12 , 47 , 168 , 119 , 4 , 0 , 75 , 15 , 0 , 2 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 59 , 15 , 1 , 0 , 77 , 79 , 54 , 228 , 0 , 255 , 4 , 0 , 73 , 15 , 160 , 1 , 77 , 63 , 156 , 118 , 131 , 4 , 0 , 74 , 15 , 160 , 1 , 77 , 15 , 0 , 2 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 155 , 15 , 1 , 0 , 77 , 79 , 255 , 173 , 41 , 255 , 4 , 0 , 73 , 15 , 99 , 1 , 77 , 15 , 0 , 2 , 255 , 255 , 255 , 255 , 255 , 255 ,
fileData0 . push . apply ( fileData0 , [ 88 , 0 , 39 , 0 , 56 , 43 , 38 , 0 , 155 , 16 , 0 , 4 , 76 , 43 , 4 , 116 , 0 , 0 , 48 , 2 , 4 , 184 , 19 , 15 , 192 , 0 , 49 , 47 , 177 , 217 , 0 , 5 , 255 , 252 , 4 , 148 , 208 , 8 , 84 , 11 , 4 , 144 , 2 , 12 , 56 , 22 , 15 , 116 , 0 , 51 , 15 , 128 , 92 , 255 , 160 , 31 , 168 , 40 , 45 , 88 , 15 , 56 , 22 , 9 , 15 , 108 , 0 , 48 , 15 , 0 , 10 , 255 , 255 , 8 , 8 , 128 , 2 , 47 , 177 , 217 , 80 , 116 , 11 , 15 , 88 , 7 , 0 , 15 , 0 , 5 , 21 , 15 , 128 , 7 , 255 , 255 , 24 , 15 , 80 , 116 , 20 , 15 , 128 , 2 , 255 , 255 , 48 , 15 , 128 , 12 , 3 , 15 , 208 , 113 , 6 , 15 , 128 , 2 , 255 , 151 , 14 , 152 , 1 , 15 , 48 , 2 , 75 , 31 , 177 , 52 , 17 , 7 , 15 , 56 , 22 , 54 , 15 , 212 , 0 , 8 , 15 , 128 , 2 , 255 , 123 , 12 , 148 , 62 , 15 , 176 , 14 , 85 , 31 , 177 , 52 , 17 , 60 , 4 , 4 , 0 , 14 , 248 , 19 , 15 , 128 , 2 , 255 , 144 , 8 , 200 , 6 , 31 , 177 , 48 , 12 , 72 , 14 , 192 , 4 , 14 , 52 , 17 , 15 , 200 , 5 , 80 , 15 , 128 , 7 , 255 , 215 , 15 , 128 , 2 , 1 , 4 , 52 , 7 , 12 , 12 , 0 , 0 , 180 , 14 , 15 , 200 , 0 , 85 , 14 , 236 , 7 , 15 , 128 , 12 , 255 , 196 , 15 , 128 , 7 , 4 , 15 , 52 , 17 , 78 , 15 , 124 , 2 , 8 , 14 , 112 , 10 , 15 , 128 , 2 , 255 , 201 , 4 , 128 , 12 , 4 , 8 , 0 , 42 , 0 , 155 , 20 , 0 , 15 , 52 , 17 , 69 , 15 , 120 , 2 , 8 , 15 , 248 , 12 , 5 , 15 , 128 , 17 , 255 , 203 , 42 , 0 , 155 , 128 , 7 , 4 , 8 , 5 , 15 , 52 , 17 , 24 , 15 , 120 , 2 , 70 , 14 , 136 , 2 , 15 , 0 , 20 , 255 , 200 , 8 , 8 , 10 , 15 , 52 , 17 , 41 , 14 , 184 , 4 , 15 , 120 , 2 , 47 , 14 , 136 , 2 , 15 , 128 , 2 , 255 , 28 , 14 , 116 , 36 , 15 , 128 , 2 , 139 , 12 , 188 , 0 , 15 , 108 , 37 , 44 , 15 , 116 , 2 , 1 , 15 , 132 , 2 , 45 , 15 , 128 , 2 , 255 , 15 , 15 , 248 , 38 , 4 , 15 , 136 , 12 , 158 , 15 , 244 , 4 , 20 , 15 , 4 , 0 , 97 , 15 , 128 , 2 , 254 , 15 , 200 , 8 , 20 , 15 , 56 , 27 , 146 , 14 , 128 , 2 , 15 , 124 , 2 , 6 , 15 , 128 , 2 , 230 , 15 , 100 , 57 , 12 , 15 , 4 , 0 , 255 , 207 , 15 , 0 , 5 , 125 , 15 , 176 , 26 , 44 , 15 , 104 , 6 , 65 , 15 , 20 , 5 , 45 , 15 , 228 , 5 , 145 , 15 , 128 , 7 , 246 , 14 , 176 , 26 , 15 , 104 , 1 , 78 , 15 , 148 , 2 , 218 , 15 , 188 , 0 , 25 , 4 , 180 , 59 , 4 , 192 , 27 , 15 , 128 , 7 , 255 , 255 , 35 , 15 , 76 , 1 , 41 , 12 , 64 , 30 , 15 , 128 , 7 , 196 , 15 , 4 , 0 , 255 , 71 , 15 , 204 , 8 , 27 , 15 , 64 , 30 , 79 , 15 , 4 , 0 , 0 , 15 , 0 , 70 , 109 , 15 , 220 , 11 , 255 , 75 , 12 , 204 , 8 , 15 , 244 , 4 , 21 , 47 , 232 , 241 , 64 , 30 , 11 , 15 , 172 , 6 , 55 , 15 , 128 , 2 , 255 , 204 , 15 , 32 , 2 , 31 , 15 , 196 , 163 , 30 , 15 , 128 , 2 , 255 , 243 , 15 , 48 , 11 , 57 , 15 , 196 , 163 , 36 , 15 , 0 , 10 , 255 , 231 , 15 , 176 , 18 , 16 , 15 , 116 , 47 , 61 , 15 , 0 , 10 , 255 , 251 , 14 , 228 , 9 , 15 , 100 , 0 , 63 , 0 , 120 , 7 , 15 , 192 , 0 , 12 , 15 , 128 , 7 , 209 , 15 , 172 , 17 , 9 , 15 , 128 , 7 , 255 , 55 , 15 , 96 , 1 , 4 , 15 , 128 , 2 , 255 , 3 , 12 , 124 , 6 , 14 , 176 , 27 , 15 , 92 , 10 , 255 , 124 , 15 , 128 , 2 , 193 , 14 , 124 , 6 , 15 , 0 , 30 , 255 , 255 , 29 , 15 , 160 , 3 , 56 , 15 , 128 , 2 , 255 , 255 , 100 , 14 , 4 , 0 , 15 , 128 , 2 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 169 , 63 , 255 , 155 , 63 , 4 , 0 , 255 , 235 , 15 , 128 , 2 , 255 , 94 , 4 , 176 , 20 , 15 , 128 , 2 , 255 , 255 , 99 , 12 , 48 , 28 , 15 , 128 , 2 , 255 , 255 , 99 , 8 , 48 , 28 , 15 , 128 , 2 , 255 , 255 , 31 , 14 , 60 , 7 , 15 , 128 , 7 , 255 , 204 , 8 , 40 , 13 , 15 , 248 , 0 , 61 , 14 , 92 , 0 , 15 , 60 , 7 , 255 , 0 , 14 , 128 , 1 , 15 , 0 , 5 , 255 , 12 , 12 , 44 , 1 , 14 , 56 , 1 , 15 , 56 , 0 , 22 , 15 , 60 , 7 , 13 , 15 , 8 , 2 , 101 , 15 , 0 , 5 , 255 , 91 , 15 , 160 , 1 , 25 , 14 , 72 , 2 , 15 , 56 , 0 , 30 , 15 , 60 , 7 , 21 , 15 , 32 , 3 , 61 , 15 , 0 , 10 , 255 , 199 , 14 , 52 , 4 , 15 , 56 , 0 , 30 , 15 , 32 , 3 , 77 , 15 , 128 , 2 , 255 , 187 , 12 , 220 , 1 , 14 , 72 , 2 , 15 , 56 , 0 , 30 , 15 , 32 , 3 , 81 , 15 , 0 , 5 , 255 , 191 , 15 , 8 , 10 , 56 , 15 , 32 , 3 , 61 , 15 , 128 , 2 , 255 , 227 , 15 , 144 , 4 , 89 , 14 , 44 , 12 , 15 , 232 , 2 , 79 , 8 , 32 , 62 , 15 , 32 , 0 , 8 , 15 , 80 , 0 , 34 , 15 , 4 , 0 , 20 , 15 , 128 , 2 , 186 , 14 , 212 , 0 , 15 , 80 , 19 , 14 , 15 , 0 , 20 , 154 , 14 , 8 , 10 , 15 , 0 , 30 , 255 , 255 , 89 , 14 , 4 , 0 , 15 , 128 , 2 , 255 , 255 , 255 , 250 , 15 , 32 , 38 , 0 , 15 , 0 , 5 , 255 , 255 , 255 , 133 , 15 , 168 , 3 , 0 , 15 , 128 , 2 , 255 , 135 , 15 , 84 , 5 , 20 , 15 , 8 , 3 , 255 , 54 , 15 , 128 , 12 , 255 , 255 , 111 , 15 , 128 , 2 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 48 , 15 , 4 , 0 , 255 , 242 , 15 , 128 , 2 , 56 , 15 , 4 , 0 , 255 , 255 , 35 , 15 , 128 , 2 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 252 , 63 , 54 , 54 , 54 , 4 , 0 , 255 , 243 , 15 , 128 , 2 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 ,
fileData0 . push . apply ( fileData0 , [ 51 , 1 , 15 , 151 , 11 , 21 , 15 , 237 , 11 , 20 , 47 , 0 , 255 , 210 , 19 , 24 , 15 , 14 , 7 , 15 , 47 , 255 , 0 , 88 , 1 , 22 , 5 , 177 , 5 , 15 , 145 , 8 , 17 , 5 , 196 , 12 , 15 , 10 , 5 , 4 , 15 , 35 , 16 , 4 , 0 , 43 , 0 , 95 , 55 , 0 , 0 , 0 , 7 , 208 , 18 , 15 , 15 , 1 , 0 , 1 , 15 , 63 , 0 , 10 , 15 , 2 , 0 , 15 , 15 , 63 , 0 , 11 , 9 , 132 , 0 , 8 , 197 , 8 , 4 , 70 , 3 , 15 , 63 , 0 , 9 , 7 , 136 , 18 , 7 , 68 , 22 , 3 , 246 , 19 , 15 , 63 , 0 , 15 , 5 , 91 , 6 , 2 , 57 , 0 , 15 , 14 , 0 , 1 , 15 , 126 , 0 , 10 , 4 , 152 , 6 , 24 , 255 , 131 , 12 , 5 , 161 , 1 , 15 , 63 , 0 , 16 , 5 , 55 , 0 , 27 , 255 , 253 , 16 , 3 , 28 , 0 , 15 , 252 , 0 , 12 , 47 , 0 , 255 , 56 , 0 , 4 , 3 , 155 , 0 , 15 , 126 , 0 , 19 , 5 , 113 , 1 , 4 , 124 , 1 , 14 , 126 , 0 , 15 , 189 , 0 , 7 , 7 , 245 , 0 , 7 , 126 , 0 , 31 , 255 , 252 , 0 , 24 , 6 , 255 , 3 , 7 , 65 , 9 , 15 , 248 , 1 , 21 , 27 , 255 , 248 , 1 , 31 , 0 , 248 , 1 , 19 , 43 , 255 , 255 , 39 , 2 , 5 , 181 , 1 , 15 , 244 , 2 , 17 , 8 , 232 , 0 , 6 , 7 , 2 , 9 , 16 , 1 , 15 , 181 , 2 , 26 , 7 , 0 , 25 , 15 , 244 , 2 , 17 , 7 , 54 , 3 , 31 , 0 , 248 , 1 , 33 , 15 , 37 , 4 , 4 , 6 , 1 , 0 , 15 , 189 , 0 , 20 , 7 , 122 , 0 , 3 , 219 , 16 , 15 , 189 , 0 , 29 , 7 , 135 , 1 , 25 , 255 , 74 , 19 , 15 , 248 , 1 , 12 , 10 , 238 , 0 , 10 , 10 , 1 , 15 , 55 , 2 , 20 , 10 , 189 , 0 , 15 , 122 , 1 , 22 , 5 , 221 , 2 , 4 , 229 , 5 , 25 , 255 , 53 , 22 , 15 , 63 , 0 , 19 , 9 , 135 , 16 , 2 , 227 , 16 , 15 , 122 , 1 , 26 , 11 , 82 , 21 , 15 , 244 , 2 , 26 , 15 , 14 , 0 , 2 , 15 , 232 , 5 , 23 , 15 , 7 , 0 , 2 , 15 , 232 , 5 , 16 , 14 , 177 , 1 , 22 , 255 , 69 , 22 , 2 , 12 , 0 , 15 , 169 , 5 , 16 , 6 , 92 , 4 , 7 , 109 , 13 , 47 , 0 , 255 , 122 , 1 , 16 , 5 , 156 , 3 , 3 , 155 , 5 , 8 , 186 , 3 , 14 , 236 , 4 , 15 , 181 , 2 , 4 , 27 , 255 , 197 , 0 , 6 , 232 , 10 , 31 , 0 , 252 , 0 , 15 , 25 , 255 , 237 , 6 , 6 , 152 , 25 , 31 , 255 , 244 , 2 , 15 , 8 , 69 , 23 , 6 , 114 , 22 , 11 , 217 , 25 , 15 , 110 , 4 , 10 , 12 , 123 , 1 , 24 , 255 , 230 , 6 , 15 , 181 , 2 , 14 , 3 , 253 , 0 , 7 , 241 , 4 , 3 , 80 , 1 , 14 , 228 , 6 , 15 , 251 , 22 , 7 , 8 , 120 , 0 , 9 , 128 , 14 , 15 , 189 , 0 , 19 , 8 , 4 , 14 , 4 , 163 , 25 , 15 , 110 , 4 , 26 , 29 , 255 , 77 , 14 , 15 , 169 , 5 , 16 , 15 , 7 , 0 , 2 , 15 , 55 , 2 , 33 , 7 , 61 , 1 , 4 , 59 , 1 , 15 , 126 , 0 , 17 , 7 , 27 , 30 , 28 , 255 , 189 , 0 , 15 , 161 , 7 , 17 , 7 , 245 , 0 , 6 , 71 , 0 , 5 , 64 , 0 , 15 , 252 , 0 , 16 , 7 , 67 , 0 , 40 , 255 , 255 , 3 , 1 , 15 , 110 , 4 , 16 , 8 , 52 , 1 , 43 , 255 , 255 , 18 , 1 , 31 , 0 , 232 , 5 , 19 , 13 , 127 , 1 , 5 , 140 , 2 , 15 , 63 , 0 , 20 , 9 , 160 , 5 , 15 , 181 , 2 , 21 , 11 , 184 , 0 , 31 , 255 , 118 , 2 , 28 , 5 , 135 , 8 , 5 , 59 , 1 , 8 , 133 , 2 , 15 , 189 , 0 , 15 , 6 , 44 , 3 , 4 , 237 , 4 , 7 , 246 , 4 , 31 , 0 , 169 , 5 , 14 , 43 , 0 , 255 , 46 , 6 , 7 , 187 , 13 , 5 , 187 , 12 , 15 , 126 , 0 , 10 , 11 , 244 , 16 , 6 , 63 , 27 , 14 , 248 , 1 , 15 , 118 , 2 , 4 , 7 , 216 , 5 , 40 , 0 , 255 , 41 , 5 , 47 , 0 , 255 , 244 , 2 , 16 , 5 , 116 , 20 , 11 , 14 , 0 , 15 , 106 , 5 , 13 , 24 , 255 , 96 , 4 , 12 , 110 , 4 , 15 , 51 , 3 , 19 , 15 , 191 , 3 , 0 , 6 , 252 , 6 , 47 , 0 , 255 , 90 , 9 , 18 , 43 , 255 , 255 , 77 , 29 , 5 , 59 , 2 , 15 , 98 , 7 , 12 , 12 , 203 , 11 , 27 , 0 , 192 , 30 , 15 , 27 , 9 , 21 , 28 , 255 , 179 , 6 , 6 , 138 , 15 , 15 , 78 , 12 , 9 , 29 , 0 , 118 , 4 , 6 , 244 , 3 , 15 , 11 , 13 , 17 , 11 , 56 , 2 , 7 , 144 , 1 , 15 , 51 , 3 , 16 , 15 , 25 , 8 , 0 , 7 , 146 , 13 , 31 , 255 , 39 , 6 , 19 , 29 , 255 , 14 , 0 , 31 , 255 , 236 , 4 , 17 , 4 , 142 , 7 , 8 , 120 , 1 , 6 , 183 , 1 , 47 , 255 , 0 , 177 , 3 , 17 , 41 , 0 , 0 , 193 , 12 , 10 , 51 , 7 , 15 , 70 , 14 , 21 , 13 , 196 , 0 , 14 , 161 , 7 , 15 , 102 , 6 , 6 , 10 , 6 , 2 , 15 , 244 , 2 , 22 , 11 , 147 , 7 , 9 , 229 , 5 , 15 , 106 , 5 , 25 , 11 , 245 , 2 , 47 , 255 , 255 , 185 , 1 , 18 , 40 , 0 , 255 , 203 , 14 , 9 , 16 , 10 , 7 , 104 , 17 , 15 , 126 , 0 , 30 , 14 , 55 , 2 , 15 , 236 , 4 , 26 , 15 , 157 , 8 , 23 , 24 , 0 , 29 , 7 , 41 , 255 , 255 , 171 , 5 , 14 , 70 , 14 , 15 , 252 , 0 , 3 , 9 , 53 , 4 , 6 , 68 , 2 , 15 , 122 , 1 , 2 , 15 , 201 , 13 , 7 , 11 , 47 , 7 , 15 , 7 , 14 , 21 , 15 , 250 , 2 , 5 , 15 , 70 , 14 , 21 , 9 , 102 , 4 , 6 , 191 , 15 , 15 , 63 , 0 , 26 , 7 , 253 , 0 , 15 , 66 , 15 , 26 , 7 , 192 , 2 , 28 , 255 , 80 , 1 , 15 , 126 , 0 , 13 , 44 , 255 , 255 , 185 , 15 , 15 , 240 , 3 , 23 , 10 , 216 , 9 , 47 , 255 , 0 , 51 , 3 , 38 , 13 , 119 , 0 , 15 , 196 , 14 , 17 , 11 , 209 , 9 , 5 , 202 , 0 , 6 , 238 , 6 , 15 , 114 , 3 , 19 , 8 , 242 , 1 , 7 , 145 , 11 , 31 , 255 , 252 , 0 , 25 , 14 , 14 , 0 , 15 , 149 , 10 , 20 , 12 , 209 , 10 , 47 , 255 , 0 , 43 , 5 , 29 , 5 , 187 , 22 , 14 , 244 , 2 , 15 , 55 , 2 , 21 , 9 , 7 , 0 , 15 , 122 , 1 , 5 , 15 , 146 , 11 , 14 , 31 , 0 , 35 , 7 , 21 , 7 , 93 , 8 , 9 , 79 , 11 , 5 , 211 , 10 , 15 , 189 , 0 , 28 , 8 , 100 , 7 , 14 , 70 , 14 , 15 , 248 , 1 , 18 , 15 , 15 , 12 , 27 , 8 , 34 , 4 , 15 , 189 , 0 , 35 , 5 , 38 , 4 , 28 , 255 , 190 , 0 , 15 , 172 , 20 , 18 , 14 , 81 , 13 , 15 , 173 , 4 , 19 , 8 , 153 , 29 , 15 , 189 , 0 , 32 , 7 , 93 , 5 , 15 , 126
Module [ "FS_createDataFile" ] ( "/" , "data.pod" , fileData0 , true , true , false ) ;
}
if ( Module [ "calledRun" ] ) {
runWithFS ( ) ;
} else {
if ( ! Module [ "preRun" ] ) Module [ "preRun" ] = [ ] ;
Module [ "preRun" ] . push ( runWithFS ) ;
}
} ;
loadPackage ( {
"files" : [ ]
} ) ;
} ) ( ) ;
var moduleOverrides = { } ;
var key ;
for ( key in Module ) {
if ( Module . hasOwnProperty ( key ) ) {
moduleOverrides [ key ] = Module [ key ] ;
}
}
Module [ "arguments" ] = [ ] ;
Module [ "thisProgram" ] = "./this.program" ;
Module [ "quit" ] = function ( status , toThrow ) {
throw toThrow ;
} ;
Module [ "preRun" ] = [ ] ;
Module [ "postRun" ] = [ ] ;
var ENVIRONMENT _IS _WEB = false ;
var ENVIRONMENT _IS _WORKER = false ;
var ENVIRONMENT _IS _NODE = false ;
var ENVIRONMENT _IS _SHELL = false ;
ENVIRONMENT _IS _WEB = typeof window === "object" ;
ENVIRONMENT _IS _WORKER = typeof importScripts === "function" ;
ENVIRONMENT _IS _NODE = typeof process === "object" && typeof require === "function" && ! ENVIRONMENT _IS _WEB && ! ENVIRONMENT _IS _WORKER ;
ENVIRONMENT _IS _SHELL = ! ENVIRONMENT _IS _WEB && ! ENVIRONMENT _IS _NODE && ! ENVIRONMENT _IS _WORKER ;
var scriptDirectory = "" ;
function locateFile ( path ) {
if ( Module [ "locateFile" ] ) {
return Module [ "locateFile" ] ( path , scriptDirectory ) ;
} else {
return scriptDirectory + path ;
}
}
if ( ENVIRONMENT _IS _NODE ) {
scriptDirectory = _ _dirname + "/" ;
var nodeFS ;
var nodePath ;
Module [ "read" ] = function shell _read ( filename , binary ) {
var ret ;
ret = tryParseAsDataURI ( filename ) ;
if ( ! ret ) {
if ( ! nodeFS ) nodeFS = require ( "fs" ) ;
if ( ! nodePath ) nodePath = require ( "path" ) ;
filename = nodePath [ "normalize" ] ( filename ) ;
ret = nodeFS [ "readFileSync" ] ( filename ) ;
}
return binary ? ret : ret . toString ( ) ;
} ;
Module [ "readBinary" ] = function readBinary ( filename ) {
var ret = Module [ "read" ] ( filename , true ) ;
if ( ! ret . buffer ) {
ret = new Uint8Array ( ret ) ;
}
assert ( ret . buffer ) ;
return ret ;
} ;
if ( process [ "argv" ] . length > 1 ) {
Module [ "thisProgram" ] = process [ "argv" ] [ 1 ] . replace ( /\\/g , "/" ) ;
}
Module [ "arguments" ] = process [ "argv" ] . slice ( 2 ) ;
if ( typeof module !== "undefined" ) {
module [ "exports" ] = Module ;
}
process [ "on" ] ( "uncaughtException" , function ( ex ) {
if ( ! ( ex instanceof ExitStatus ) ) {
throw ex ;
}
} ) ;
process [ "on" ] ( "unhandledRejection" , abort ) ;
Module [ "quit" ] = function ( status ) {
process [ "exit" ] ( status ) ;
} ;
Module [ "inspect" ] = function ( ) {
return "[Emscripten Module object]" ;
} ;
} else if ( ENVIRONMENT _IS _SHELL ) {
if ( typeof read != "undefined" ) {
Module [ "read" ] = function shell _read ( f ) {
var data = tryParseAsDataURI ( f ) ;
if ( data ) {
return intArrayToString ( data ) ;
}
return read ( f ) ;
} ;
}
Module [ "readBinary" ] = function readBinary ( f ) {
var data ;
data = tryParseAsDataURI ( f ) ;
if ( data ) {
return data ;
}
if ( typeof readbuffer === "function" ) {
return new Uint8Array ( readbuffer ( f ) ) ;
}
data = read ( f , "binary" ) ;
assert ( typeof data === "object" ) ;
return data ;
} ;
if ( typeof scriptArgs != "undefined" ) {
Module [ "arguments" ] = scriptArgs ;
} else if ( typeof arguments != "undefined" ) {
Module [ "arguments" ] = arguments ;
}
if ( typeof quit === "function" ) {
Module [ "quit" ] = function ( status ) {
quit ( status ) ;
} ;
}
} else if ( ENVIRONMENT _IS _WEB || ENVIRONMENT _IS _WORKER ) {
if ( ENVIRONMENT _IS _WORKER ) {
scriptDirectory = self . location . href ;
} else if ( document . currentScript ) {
scriptDirectory = document . currentScript . src ;
}
if ( scriptDirectory . indexOf ( "blob:" ) !== 0 ) {
scriptDirectory = scriptDirectory . substr ( 0 , scriptDirectory . lastIndexOf ( "/" ) + 1 ) ;
} else {
scriptDirectory = "" ;
}
Module [ "read" ] = function shell _read ( url ) {
try {
var xhr = new XMLHttpRequest ( ) ;
xhr . open ( "GET" , url , false ) ;
xhr . send ( null ) ;
return xhr . responseText ;
} catch ( err ) {
var data = tryParseAsDataURI ( url ) ;
if ( data ) {
return intArrayToString ( data ) ;
}
throw err ;
}
} ;
if ( ENVIRONMENT _IS _WORKER ) {
Module [ "readBinary" ] = function readBinary ( url ) {
try {
var xhr = new XMLHttpRequest ( ) ;
xhr . open ( "GET" , url , false ) ;
xhr . responseType = "arraybuffer" ;
xhr . send ( null ) ;
return new Uint8Array ( xhr . response ) ;
} catch ( err ) {
var data = tryParseAsDataURI ( url ) ;
if ( data ) {
return data ;
}
throw err ;
}
} ;
}
Module [ "readAsync" ] = function readAsync ( url , onload , onerror ) {
var xhr = new XMLHttpRequest ( ) ;
xhr . open ( "GET" , url , true ) ;
xhr . responseType = "arraybuffer" ;
xhr . onload = function xhr _onload ( ) {
if ( xhr . status == 200 || xhr . status == 0 && xhr . response ) {
onload ( xhr . response ) ;
return ;
}
var data = tryParseAsDataURI ( url ) ;
if ( data ) {
onload ( data . buffer ) ;
return ;
}
onerror ( ) ;
} ;
xhr . onerror = onerror ;
xhr . send ( null ) ;
} ;
Module [ "setWindowTitle" ] = function ( title ) {
document . title = title ;
} ;
} else { }
var out = Module [ "print" ] || ( typeof console !== "undefined" ? console . log . bind ( console ) : typeof print !== "undefined" ? print : null ) ;
var err = Module [ "printErr" ] || ( typeof printErr !== "undefined" ? printErr : typeof console !== "undefined" && console . warn . bind ( console ) || out ) ;
for ( key in moduleOverrides ) {
if ( moduleOverrides . hasOwnProperty ( key ) ) {
Module [ key ] = moduleOverrides [ key ] ;
}
}
moduleOverrides = undefined ;
var STACK _ALIGN = 16 ;
function dynamicAlloc ( size ) {
var ret = HEAP32 [ DYNAMICTOP _PTR >> 2 ] ;
var end = ret + size + 15 & - 16 ;
if ( end <= _emscripten _get _heap _size ( ) ) {
HEAP32 [ DYNAMICTOP _PTR >> 2 ] = end ;
} else {
return 0 ;
}
return ret ;
}
function getNativeTypeSize ( type ) {
switch ( type ) {
case "i1" :
case "i8" :
return 1 ;
case "i16" :
return 2 ;
case "i32" :
return 4 ;
case "i64" :
return 8 ;
case "float" :
return 4 ;
case "double" :
return 8 ;
default :
{
if ( type [ type . length - 1 ] === "*" ) {
return 4 ;
} else if ( type [ 0 ] === "i" ) {
var bits = parseInt ( type . substr ( 1 ) ) ;
assert ( bits % 8 === 0 , "getNativeTypeSize invalid bits " + bits + ", type " + type ) ;
return bits / 8 ;
} else {
return 0 ;
}
}
}
}
function warnOnce ( text ) {
if ( ! warnOnce . shown ) warnOnce . shown = { } ;
if ( ! warnOnce . shown [ text ] ) {
warnOnce . shown [ text ] = 1 ;
err ( text ) ;
}
}
var jsCallStartIndex = 1 ;
var functionPointers = new Array ( 0 ) ;
var funcWrappers = { } ;
function dynCall ( sig , ptr , args ) {
if ( args && args . length ) {
return Module [ "dynCall_" + sig ] . apply ( null , [ ptr ] . concat ( args ) ) ;
} else {
return Module [ "dynCall_" + sig ] . call ( null , ptr ) ;
}
}
var tempRet0 = 0 ;
var setTempRet0 = function ( value ) {
tempRet0 = value ;
} ;
var getTempRet0 = function ( ) {
return tempRet0 ;
} ;
var GLOBAL _BASE = 8 ;
function getValue ( ptr , type , noSafe ) {
type = type || "i8" ;
if ( type . charAt ( type . length - 1 ) === "*" ) type = "i32" ;
switch ( type ) {
case "i1" :
return HEAP8 [ ptr >> 0 ] ;
case "i8" :
return HEAP8 [ ptr >> 0 ] ;
case "i16" :
return HEAP16 [ ptr >> 1 ] ;
case "i32" :
return HEAP32 [ ptr >> 2 ] ;
case "i64" :
return HEAP32 [ ptr >> 2 ] ;
case "float" :
return HEAPF32 [ ptr >> 2 ] ;
case "double" :
return HEAPF64 [ ptr >> 3 ] ;
default :
abort ( "invalid type for getValue: " + type ) ;
}
return null ;
}
var ABORT = false ;
var EXITSTATUS = 0 ;
function assert ( condition , text ) {
if ( ! condition ) {
abort ( "Assertion failed: " + text ) ;
}
}
function getCFunc ( ident ) {
var func = Module [ "_" + ident ] ;
assert ( func , "Cannot call unknown function " + ident + ", make sure it is exported" ) ;
return func ;
}
function ccall ( ident , returnType , argTypes , args , opts ) {
var toC = {
"string" : function ( str ) {
var ret = 0 ;
if ( str !== null && str !== undefined && str !== 0 ) {
var len = ( str . length << 2 ) + 1 ;
ret = stackAlloc ( len ) ;
stringToUTF8 ( str , ret , len ) ;
}
return ret ;
} ,
"array" : function ( arr ) {
var ret = stackAlloc ( arr . length ) ;
writeArrayToMemory ( arr , ret ) ;
return ret ;
}
} ;
function convertReturnValue ( ret ) {
if ( returnType === "string" ) return UTF8ToString ( ret ) ;
if ( returnType === "boolean" ) return Boolean ( ret ) ;
return ret ;
}
var func = getCFunc ( ident ) ;
var cArgs = [ ] ;
var stack = 0 ;
if ( args ) {
for ( var i = 0 ; i < args . length ; i ++ ) {
var converter = toC [ argTypes [ i ] ] ;
if ( converter ) {
if ( stack === 0 ) stack = stackSave ( ) ;
cArgs [ i ] = converter ( args [ i ] ) ;
} else {
cArgs [ i ] = args [ i ] ;
}
}
}
var ret = func . apply ( null , cArgs ) ;
ret = convertReturnValue ( ret ) ;
if ( stack !== 0 ) stackRestore ( stack ) ;
return ret ;
}
function setValue ( ptr , value , type , noSafe ) {
type = type || "i8" ;
if ( type . charAt ( type . length - 1 ) === "*" ) type = "i32" ;
switch ( type ) {
case "i1" :
HEAP8 [ ptr >> 0 ] = value ;
break ;
case "i8" :
HEAP8 [ ptr >> 0 ] = value ;
break ;
case "i16" :
HEAP16 [ ptr >> 1 ] = value ;
break ;
case "i32" :
HEAP32 [ ptr >> 2 ] = value ;
break ;
case "i64" :
tempI64 = [ value >>> 0 , ( tempDouble = value , + Math _abs ( tempDouble ) >= + 1 ? tempDouble > + 0 ? ( Math _min ( + Math _floor ( tempDouble / + 4294967296 ) , + 4294967295 ) | 0 ) >>> 0 : ~ ~ + Math _ceil ( ( tempDouble - + ( ~ ~ tempDouble >>> 0 ) ) / + 4294967296 ) >>> 0 : 0 ) ] ,
HEAP32 [ ptr >> 2 ] = tempI64 [ 0 ] , HEAP32 [ ptr + 4 >> 2 ] = tempI64 [ 1 ] ;
break ;
case "float" :
HEAPF32 [ ptr >> 2 ] = value ;
break ;
case "double" :
HEAPF64 [ ptr >> 3 ] = value ;
break ;
default :
abort ( "invalid type for setValue: " + type ) ;
}
}
var ALLOC _NORMAL = 0 ;
var ALLOC _NONE = 3 ;
function allocate ( slab , types , allocator , ptr ) {
var zeroinit , size ;
if ( typeof slab === "number" ) {
zeroinit = true ;
size = slab ;
} else {
zeroinit = false ;
size = slab . length ;
}
var singleType = typeof types === "string" ? types : null ;
var ret ;
if ( allocator == ALLOC _NONE ) {
ret = ptr ;
} else {
ret = [ _malloc , stackAlloc , dynamicAlloc ] [ allocator ] ( Math . max ( size , singleType ? 1 : types . length ) ) ;
}
if ( zeroinit ) {
var stop ;
ptr = ret ;
assert ( ( ret & 3 ) == 0 ) ;
stop = ret + ( size & ~ 3 ) ;
for ( ; ptr < stop ; ptr += 4 ) {
HEAP32 [ ptr >> 2 ] = 0 ;
}
stop = ret + size ;
while ( ptr < stop ) {
HEAP8 [ ptr ++ >> 0 ] = 0 ;
}
return ret ;
}
if ( singleType === "i8" ) {
if ( slab . subarray || slab . slice ) {
HEAPU8 . set ( slab , ret ) ;
} else {
HEAPU8 . set ( new Uint8Array ( slab ) , ret ) ;
}
return ret ;
}
var i = 0 , type , typeSize , previousType ;
while ( i < size ) {
var curr = slab [ i ] ;
type = singleType || types [ i ] ;
if ( type === 0 ) {
i ++ ;
continue ;
}
if ( type == "i64" ) type = "i32" ;
setValue ( ret + i , curr , type ) ;
if ( previousType !== type ) {
typeSize = getNativeTypeSize ( type ) ;
previousType = type ;
}
i += typeSize ;
}
return ret ;
}
function getMemory ( size ) {
if ( ! runtimeInitialized ) return dynamicAlloc ( size ) ;
return _malloc ( size ) ;
}
var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder ( "utf8" ) : undefined ;
function UTF8ArrayToString ( u8Array , idx , maxBytesToRead ) {
var endIdx = idx + maxBytesToRead ;
var endPtr = idx ;
while ( u8Array [ endPtr ] && ! ( endPtr >= endIdx ) ) ++ endPtr ;
if ( endPtr - idx > 16 && u8Array . subarray && UTF8Decoder ) {
return UTF8Decoder . decode ( u8Array . subarray ( idx , endPtr ) ) ;
} else {
var str = "" ;
while ( idx < endPtr ) {
var u0 = u8Array [ idx ++ ] ;
if ( ! ( u0 & 128 ) ) {
str += String . fromCharCode ( u0 ) ;
continue ;
}
var u1 = u8Array [ idx ++ ] & 63 ;
if ( ( u0 & 224 ) == 192 ) {
str += String . fromCharCode ( ( u0 & 31 ) << 6 | u1 ) ;
continue ;
}
var u2 = u8Array [ idx ++ ] & 63 ;
if ( ( u0 & 240 ) == 224 ) {
u0 = ( u0 & 15 ) << 12 | u1 << 6 | u2 ;
} else {
u0 = ( u0 & 7 ) << 18 | u1 << 12 | u2 << 6 | u8Array [ idx ++ ] & 63 ;
}
if ( u0 < 65536 ) {
str += String . fromCharCode ( u0 ) ;
} else {
var ch = u0 - 65536 ;
str += String . fromCharCode ( 55296 | ch >> 10 , 56320 | ch & 1023 ) ;
}
}
}
return str ;
}
function UTF8ToString ( ptr , maxBytesToRead ) {
return ptr ? UTF8ArrayToString ( HEAPU8 , ptr , maxBytesToRead ) : "" ;
}
function stringToUTF8Array ( str , outU8Array , outIdx , maxBytesToWrite ) {
if ( ! ( maxBytesToWrite > 0 ) ) return 0 ;
var startIdx = outIdx ;
var endIdx = outIdx + maxBytesToWrite - 1 ;
for ( var i = 0 ; i < str . length ; ++ i ) {
var u = str . charCodeAt ( i ) ;
if ( u >= 55296 && u <= 57343 ) {
var u1 = str . charCodeAt ( ++ i ) ;
u = 65536 + ( ( u & 1023 ) << 10 ) | u1 & 1023 ;
}
if ( u <= 127 ) {
if ( outIdx >= endIdx ) break ;
outU8Array [ outIdx ++ ] = u ;
} else if ( u <= 2047 ) {
if ( outIdx + 1 >= endIdx ) break ;
outU8Array [ outIdx ++ ] = 192 | u >> 6 ;
outU8Array [ outIdx ++ ] = 128 | u & 63 ;
} else if ( u <= 65535 ) {
if ( outIdx + 2 >= endIdx ) break ;
outU8Array [ outIdx ++ ] = 224 | u >> 12 ;
outU8Array [ outIdx ++ ] = 128 | u >> 6 & 63 ;
outU8Array [ outIdx ++ ] = 128 | u & 63 ;
} else {
if ( outIdx + 3 >= endIdx ) break ;
outU8Array [ outIdx ++ ] = 240 | u >> 18 ;
outU8Array [ outIdx ++ ] = 128 | u >> 12 & 63 ;
outU8Array [ outIdx ++ ] = 128 | u >> 6 & 63 ;
outU8Array [ outIdx ++ ] = 128 | u & 63 ;
}
}
outU8Array [ outIdx ] = 0 ;
return outIdx - startIdx ;
}
function stringToUTF8 ( str , outPtr , maxBytesToWrite ) {
return stringToUTF8Array ( str , HEAPU8 , outPtr , maxBytesToWrite ) ;
}
function lengthBytesUTF8 ( str ) {
var len = 0 ;
for ( var i = 0 ; i < str . length ; ++ i ) {
var u = str . charCodeAt ( i ) ;
if ( u >= 55296 && u <= 57343 ) u = 65536 + ( ( u & 1023 ) << 10 ) | str . charCodeAt ( ++ i ) & 1023 ;
if ( u <= 127 ) ++ len ; else if ( u <= 2047 ) len += 2 ; else if ( u <= 65535 ) len += 3 ; else len += 4 ;
}
return len ;
}
var UTF16Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder ( "utf-16le" ) : undefined ;
function allocateUTF8OnStack ( str ) {
var size = lengthBytesUTF8 ( str ) + 1 ;
var ret = stackAlloc ( size ) ;
stringToUTF8Array ( str , HEAP8 , ret , size ) ;
return ret ;
}
function writeArrayToMemory ( array , buffer ) {
HEAP8 . set ( array , buffer ) ;
}
function writeAsciiToMemory ( str , buffer , dontAddNull ) {
for ( var i = 0 ; i < str . length ; ++ i ) {
HEAP8 [ buffer ++ >> 0 ] = str . charCodeAt ( i ) ;
}
if ( ! dontAddNull ) HEAP8 [ buffer >> 0 ] = 0 ;
}
function demangle ( func ) {
return func ;
}
function demangleAll ( text ) {
var regex = /__Z[\w\d_]+/g ;
return text . replace ( regex , function ( x ) {
var y = demangle ( x ) ;
return x === y ? x : y + " [" + x + "]" ;
} ) ;
}
function jsStackTrace ( ) {
var err = new Error ( ) ;
if ( ! err . stack ) {
try {
throw new Error ( 0 ) ;
} catch ( e ) {
err = e ;
}
if ( ! err . stack ) {
return "(no stack trace available)" ;
}
}
return err . stack . toString ( ) ;
}
function stackTrace ( ) {
var js = jsStackTrace ( ) ;
if ( Module [ "extraStackTrace" ] ) js += "\n" + Module [ "extraStackTrace" ] ( ) ;
return demangleAll ( js ) ;
}
var buffer , HEAP8 , HEAPU8 , HEAP16 , HEAPU16 , HEAP32 , HEAPU32 , HEAPF32 , HEAPF64 ;
function updateGlobalBufferViews ( ) {
Module [ "HEAP8" ] = HEAP8 = new Int8Array ( buffer ) ;
Module [ "HEAP16" ] = HEAP16 = new Int16Array ( buffer ) ;
Module [ "HEAP32" ] = HEAP32 = new Int32Array ( buffer ) ;
Module [ "HEAPU8" ] = HEAPU8 = new Uint8Array ( buffer ) ;
Module [ "HEAPU16" ] = HEAPU16 = new Uint16Array ( buffer ) ;
Module [ "HEAPU32" ] = HEAPU32 = new Uint32Array ( buffer ) ;
Module [ "HEAPF32" ] = HEAPF32 = new Float32Array ( buffer ) ;
Module [ "HEAPF64" ] = HEAPF64 = new Float64Array ( buffer ) ;
}
var STACK _BASE = 3042736 , DYNAMIC _BASE = 8285616 , DYNAMICTOP _PTR = 3042480 ;
var TOTAL _STACK = 5242880 ;
var TOTAL _MEMORY = Module [ "TOTAL_MEMORY" ] || 134217728 ;
if ( TOTAL _MEMORY < TOTAL _STACK ) err ( "TOTAL_MEMORY should be larger than TOTAL_STACK, was " + TOTAL _MEMORY + "! (TOTAL_STACK=" + TOTAL _STACK + ")" ) ;
if ( Module [ "buffer" ] ) {
buffer = Module [ "buffer" ] ;
} else {
{
buffer = new ArrayBuffer ( TOTAL _MEMORY ) ;
}
Module [ "buffer" ] = buffer ;
}
updateGlobalBufferViews ( ) ;
HEAP32 [ DYNAMICTOP _PTR >> 2 ] = DYNAMIC _BASE ;
function callRuntimeCallbacks ( callbacks ) {
while ( callbacks . length > 0 ) {
var callback = callbacks . shift ( ) ;
if ( typeof callback == "function" ) {
callback ( ) ;
continue ;
}
var func = callback . func ;
if ( typeof func === "number" ) {
if ( callback . arg === undefined ) {
Module [ "dynCall_v" ] ( func ) ;
} else {
Module [ "dynCall_vi" ] ( func , callback . arg ) ;
}
} else {
func ( callback . arg === undefined ? null : callback . arg ) ;
}
}
}
var _ _ATPRERUN _ _ = [ ] ;
var _ _ATINIT _ _ = [ ] ;
var _ _ATMAIN _ _ = [ ] ;
var _ _ATEXIT _ _ = [ ] ;
var _ _ATPOSTRUN _ _ = [ ] ;
var runtimeInitialized = false ;
var runtimeExited = false ;
function preRun ( ) {
if ( Module [ "preRun" ] ) {
if ( typeof Module [ "preRun" ] == "function" ) Module [ "preRun" ] = [ Module [ "preRun" ] ] ;
while ( Module [ "preRun" ] . length ) {
addOnPreRun ( Module [ "preRun" ] . shift ( ) ) ;
}
}
callRuntimeCallbacks ( _ _ATPRERUN _ _ ) ;
}
function ensureInitRuntime ( ) {
if ( runtimeInitialized ) return ;
runtimeInitialized = true ;
callRuntimeCallbacks ( _ _ATINIT _ _ ) ;
}
function preMain ( ) {
callRuntimeCallbacks ( _ _ATMAIN _ _ ) ;
}
function exitRuntime ( ) {
callRuntimeCallbacks ( _ _ATEXIT _ _ ) ;
runtimeExited = true ;
}
function postRun ( ) {
if ( Module [ "postRun" ] ) {
if ( typeof Module [ "postRun" ] == "function" ) Module [ "postRun" ] = [ Module [ "postRun" ] ] ;
while ( Module [ "postRun" ] . length ) {
addOnPostRun ( Module [ "postRun" ] . shift ( ) ) ;
}
}
callRuntimeCallbacks ( _ _ATPOSTRUN _ _ ) ;
}
function addOnPreRun ( cb ) {
_ _ATPRERUN _ _ . unshift ( cb ) ;
}
function addOnPostRun ( cb ) {
_ _ATPOSTRUN _ _ . unshift ( cb ) ;
}
var Math _abs = Math . abs ;
var Math _ceil = Math . ceil ;
var Math _floor = Math . floor ;
var Math _min = Math . min ;
var runDependencies = 0 ;
var runDependencyWatcher = null ;
var dependenciesFulfilled = null ;
function getUniqueRunDependency ( id ) {
return id ;
}
function addRunDependency ( id ) {
runDependencies ++ ;
if ( Module [ "monitorRunDependencies" ] ) {
Module [ "monitorRunDependencies" ] ( runDependencies ) ;
}
}
function removeRunDependency ( id ) {
runDependencies -- ;
if ( Module [ "monitorRunDependencies" ] ) {
Module [ "monitorRunDependencies" ] ( runDependencies ) ;
}
if ( runDependencies == 0 ) {
if ( runDependencyWatcher !== null ) {
clearInterval ( runDependencyWatcher ) ;
runDependencyWatcher = null ;
}
if ( dependenciesFulfilled ) {
var callback = dependenciesFulfilled ;
dependenciesFulfilled = null ;
callback ( ) ;
}
}
}
Module [ "preloadedImages" ] = { } ;
Module [ "preloadedAudios" ] = { } ;
var memoryInitializer = null ;
var dataURIPrefix = "data:application/octet-stream;base64," ;
function isDataURI ( filename ) {
return String . prototype . startsWith ? filename . startsWith ( dataURIPrefix ) : filename . indexOf ( dataURIPrefix ) === 0 ;
}
var ASM _CONSTS = [ function ( ) {
if ( typeof _cartdat !== "undefined" ) return 1 ;
return 0 ;
} , function ( ) {
return _cartdat . length / 32768 ;
} , function ( ) {
_cdpos = _cdpos + 1 ;
return _cartdat [ _cdpos - 1 ] ;
} , function ( $0 ) {
ciii = $0 ;
iii = 0 ;
} , function ( ) {
iii = iii + 1 ;
return _cartname [ ciii ] . charCodeAt ( iii - 1 ) ;
} , function ( ) {
Module . pico8Reset = function ( ) {
codo _command = 1 ;
} ;
Module . pico8ToggleSound = function ( ) {
codo _command = 3 ;
} ;
Module . pico8TogglePaused = function ( ) {
codo _command = 4 ;
} ;
Module . pico8SetPaused = function ( p ) {
codo _command = 5 ;
codo _command _p = 0 ;
if ( p ) codo _command _p = 1 ;
} ;
Module . pico8ToggleControlMenu = function ( ) {
codo _command = 7 ;
} ;
Module . pico8DragOver = function ( ) {
codo _command = 10 ;
} ;
Module . pico8DragStop = function ( ) {
codo _command = 11 ;
} ;
} , function ( ) {
function mkdir _0 ( d ) {
try {
stat = FS . stat ( d ) ;
console . log ( "found directory: " + d ) ;
} catch ( e ) {
FS . mkdir ( d ) ;
console . log ( "created directory: " + d ) ;
}
}
console . log ( "mounting /user_data" ) ;
mkdir _0 ( "/user_data" ) ;
FS . mount ( IDBFS , { } , "/user_data" ) ;
FS . syncfs ( true , function ( err ) {
if ( ! err ) {
console . log ( "codo: mounted filesystem.\n" ) ;
codo _mounted _filesystem = 1 ;
mkdir _0 ( "/user_data/cdata" ) ;
mkdir _0 ( "/user_data/cstore" ) ;
mkdir _0 ( "/user_data/carts" ) ;
mkdir _0 ( "/user_data/backup" ) ;
mkdir _0 ( "/user_data/plates" ) ;
mkdir _0 ( "/user_data/bbs" ) ;
mkdir _0 ( "/user_data/bbs/carts" ) ;
mkdir _0 ( "/user_data/bbs/labels" ) ;
} else {
console . log ( "** could not mount filesystem\n" ) ;
console . log ( err ) ;
}
} ) ;
} , function ( ) {
var val = 0 ;
if ( window . location . pathname . indexOf ( "widget.php" ) >= 0 ) val = 1 ;
return val ;
} , function ( ) {
var val = 0 ;
if ( window . location . pathname . indexOf ( "pico-8.php" ) >= 0 ) val = 1 ;
return val ;
} , function ( $0 , $1 , $2 , $3 , $4 , $5 ) {
if ( typeof pico8 _state !== "undefined" ) {
pico8 _state . is _paused = $0 ;
pico8 _state . sound _volume = $1 ;
pico8 _state . frame _number = $2 ;
pico8 _state . has _focus = $3 ;
pico8 _state . show _dpad = $4 ;
pico8 _state . request _pointer _lock = $5 ;
}
} , function ( ) {
var val = 0 ;
if ( typeof codo _command !== "undefined" ) {
val = codo _command ;
codo _command = 0 ;
}
return val ;
} , function ( ) {
var val = 0 ;
if ( typeof codo _command _p !== "undefined" ) {
val = codo _command _p ;
codo _command _p = 0 ;
}
return val ;
} , function ( ) {
button _i = 0 ;
} , function ( ) {
var val = - 1 ;
if ( typeof pico8 _buttons !== "undefined" ) {
val = pico8 _buttons [ button _i ] ;
button _i ++ ;
}
return val ;
} , function ( ) {
var val = 0 ;
if ( typeof pico8 _gamepads !== "undefined" ) {
val = pico8 _gamepads . count ;
}
return val ;
} , function ( ) {
if ( typeof on _module _load !== "undefined" ) {
if ( on _module _load ) on _module _load ( ) ;
}
} , function ( $0 , $1 , $2 , $3 , $4 , $5 ) {
if ( typeof p8img !== "undefined" ) {
p8img . src = "" ;
}
p8img = document . createElement ( "img" ) ;
p8img . src = UTF8ToString ( $0 , $1 ) ;
p8img . style = "width:128px; height:128px; image-rendering: pixelated; -ms-interpolation-mode: nearest-neighbor;" ;
if ( typeof p8imgholder === "undefined" || ! p8imgholder ) {
p8imgholder = document . createElement ( "div" ) ;
p8imgholder . style . cssText = "min-width:160px; display:table; position:fixed; top:20px; left:20px; padding:12px; background-color:#000; box-shadow: 2px 2px 8px rgba(16, 0, 48, 0.4);" ;
document . body . appendChild ( p8imgholder ) ;
}
if ( p8imgholder ) {
while ( p8imgholder . childElementCount > 0 ) p8imgholder . removeChild ( p8imgholder . firstChild ) ;
var dismiss = document . createElement ( "div" ) ;
dismiss . style . cssText = "display:table; font-size:10pt; color:#fff; padding:4px; cursor:pointer; margin-left:10px; float:right" ;
dismiss . addEventListener ( "click" , function ( ) {
p8img . src = "" ;
while ( p8imgholder . childElementCount > 0 ) p8imgholder . removeChild ( p8imgholder . firstChild ) ;
p8imgholder . style . display = "none" ;
} , false ) ;
dismiss . innerHTML = "X" ;
p8imgholder . appendChild ( dismiss ) ;
p8imgholder . appendChild ( p8img ) ;
var info = document . createElement ( "div" ) ;
info . innerHTML = '<br> <font style="color:#bbb; font-size:8pt"><center> (right-click to save) </center></font>' ;
p8imgholder . appendChild ( info ) ;
if ( p8imgholder . style . display == "none" ) p8imgholder . style . display = "" ;
}
} , function ( ) {
jsString = p8 _dropped _cart ;
if ( ! jsString ) return 0 ;
var lengthBytes = lengthBytesUTF8 ( jsString ) + 1 ;
var stringOnWasmHeap = _malloc ( lengthBytes ) ;
stringToUTF8 ( jsString , stringOnWasmHeap , lengthBytes ) ;
return stringOnWasmHeap ;
} , function ( ) {
jsString = p8 _dropped _cart _name ;
if ( ! jsString ) return 0 ;
var lengthBytes = lengthBytesUTF8 ( jsString ) + 1 ;
var stringOnWasmHeap2 = _malloc ( lengthBytes ) ;
stringToUTF8 ( jsString , stringOnWasmHeap2 , lengthBytes ) ;
return stringOnWasmHeap2 ;
} , function ( $0 , $1 ) {
if ( typeof pico8 _state !== "undefined" ) {
if ( typeof pico8 _state . system _messages === "undefined" ) pico8 _state . system _messages = new Array ( ) ;
pico8 _state . system _messages . push ( UTF8ToString ( $0 , $1 ) ) ;
}
} , function ( $0 ) {
var str = window . location . hostname ;
return allocate ( intArrayFromString ( str ) , "i8" , ALLOC _NORMAL ) ;
} , function ( $0 , $1 ) {
if ( typeof pico8 _gpio !== "undefined" ) pico8 _gpio [ $0 ] = $1 ;
} , function ( $0 ) {
var val = 0 ;
if ( typeof pico8 _gpio !== "undefined" ) val = pico8 _gpio [ $0 ] ;
return val ;
} , function ( ) {
FS . syncfs ( false , function ( err ) { } ) ;
} , function ( ) {
var val = 0 ;
if ( typeof codo _mounted _filesystem !== "undefined" ) val = 1 ;
return val ;
} , function ( ) {
return typeof p8 _touch _detected === "undefined" || ! p8 _touch _detected ? 0 : 1 ;
} , function ( ) {
return document . hidden ? 1 : 0 ;
} , function ( ) {
if ( typeof codo _key _buffer === "undefined" ) codo _key _buffer = [ ] ;
document . addEventListener ( "keydown" , function ( e ) {
var val = - 1 ;
if ( e . key . length == 1 ) {
val = e . key . charCodeAt ( 0 ) ;
} else {
if ( e . key == "Tab" ) val = 9 ;
if ( e . key == "Enter" ) val = 13 ;
if ( e . key == "Backspace" ) val = 8 ;
if ( e . key == "Escape" ) val = 27 ;
if ( val == - 1 ) { }
}
var el = document . getElementById ( "codo_textarea" ) ;
codo _key _buffer . push ( val ) ;
} ) ;
} , function ( ) {
} , function ( ) {
document . addEventListener ( "wheel" , function ( e ) {
dx = e . deltaX ;
if ( dx < 0 ) dx = - 1 ;
if ( dx > 0 ) dx = 1 ;
if ( e . deltaMode == 2 ) dx *= 4 ;
if ( typeof codo _wheel _dx !== "undefined" ) codo _wheel _dx -= dx ;
dy = e . deltaY ;
if ( dy < 0 ) dy = - 1 ;
if ( dy > 0 ) dy = 1 ;
if ( e . deltaMode == 2 ) dy *= 4 ;
if ( typeof codo _wheel _dy !== "undefined" ) codo _wheel _dy -= dy ;
} ) ;
} , function ( $0 ) {
function audio _log ( msg ) {
if ( window . console && window . console . log ) {
window . console . log ( "[codo] audio_init_webaudio " + msg ) ;
}
}
audio _log ( "audio_init" ) ;
var codo _audio _context ;
if ( typeof Module === "undefined" ) audio _log ( " *** Module undefined" ) ; else if ( typeof Module . ccall === "undefined" ) audio _log ( " **** Module.ccall undefined" ) ; else {
var webAudioAPI = window . AudioContext || window . webkitAudioContext || window . mozAudioContext || window . oAudioContext || window . msAudioContext ;
if ( webAudioAPI ) {
if ( typeof pico8 _audio _context !== "undefined" ) {
codo _audio _context = pico8 _audio _context ;
audio _log ( "found pico8_audio_context" ) ;
} else if ( typeof voxatron _audio _context !== "undefined" ) {
codo _audio _context = voxatron _audio _context ;
audio _log ( "found voxatron_audio_context" ) ;
} else {
codo _audio _context = new webAudioAPI ( ) ;
audio _log ( "creating own audio context" ) ;
}
if ( codo _audio _context ) {
audio _log ( "Sample Rate: " + codo _audio _context . sampleRate ) ;
audio _log ( "Buffer Size: " + $0 ) ;
node = codo _audio _context . createScriptProcessor ( $0 , 1 , 1 ) ;
node . onaudioprocess = function ( e ) {
var data = e . outputBuffer . getChannelData ( 0 ) ;
var r = 22050 / codo _audio _context . sampleRate ;
var len0 = Math . floor ( data . length * r ) ;
var len1 = data . length ;
var ptr = Module . ccall ( "mix_0" , "number" , [ "number" , "number" ] , [ len0 , len1 ] ) ;
for ( var j = 0 ; j < data . length ; j ++ ) data [ j ] = Module . getValue ( ptr + j * 2 , "i16" ) / 32768 ;
} ;
node . connect ( codo _audio _context . destination ) ;
} else {
audio _log ( "** failed to create codo_audio_context" ) ;
}
} else {
audio _log ( "** webAudioAPI not found" ) ;
}
}
} , function ( ) {
return document . pointerLockElement ? 1 : 0 ;
} , function ( ) {
var ret = 0 ;
if ( typeof pico8 _mouse !== "undefined" && pico8 _mouse . length > 0 ) ret = 1 ;
return ret ;
} , function ( ) {
return pico8 _mouse [ 0 ] ;
} , function ( ) {
return pico8 _mouse [ 1 ] ;
} , function ( ) {
if ( typeof codo _key _buffer === "undefined" ) codo _key _buffer = [ ] ;
return codo _key _buffer . length > 0 ? 1 : 0 ;
} , function ( ) {
if ( typeof codo _key _buffer === "undefined" ) codo _key _buffer = [ ] ;
let val = codo _key _buffer . shift ( ) | 0 ;
return val ;
} , function ( ) {
temp = typeof codo _wheel _dx !== "undefined" ? codo _wheel _dx : 0 ;
codo _wheel _dx = 0 ;
return temp ;
} , function ( ) {
temp = typeof codo _wheel _dy !== "undefined" ? codo _wheel _dy : 0 ;
codo _wheel _dy = 0 ;
return temp ;
} , function ( ) {
if ( document . hidden ) return 0 ;
el = typeof codo _textarea === "undefined" ? document . getElementById ( "codo_textarea" ) : codo _textarea ;
if ( el ) {
if ( el == document . activeElement ) return 1 ;
}
el = document . activeElement ;
return ! el || el . tagName . toLowerCase ( ) != "input" && el . tagName . toLowerCase ( ) != "textarea" ;
} , function ( ) {
el = typeof codo _textarea === "undefined" ? document . getElementById ( "codo_textarea" ) : codo _textarea ;
if ( el && el . style . display != "none" ) {
el . focus ( ) ;
el . select ( ) ;
}
} , function ( ) {
el = typeof codo _textarea === "undefined" ? document . getElementById ( "codo_textarea" ) : codo _textarea ;
if ( el && el . style . display != "none" ) {
el . select ( ) ;
}
} , function ( ) {
return pico8 _mouse [ 2 ] ;
} , function ( ) {
_dir _name = "" ;
} , function ( $0 ) {
_dir _name = _dir _name + String . fromCharCode ( $0 ) ;
} , function ( ) {
console . log ( "@@ mkdir directory (nocheck): " + _dir _name ) ;
FS . createPath ( "" , _dir _name , true , true ) ;
} , function ( ) {
Module [ "canvas" ] . exitPointerLock ( ) ;
} , function ( ) {
el = typeof codo _textarea === "undefined" ? document . getElementById ( "codo_textarea" ) : codo _textarea ;
if ( el ) { }
} , function ( ) {
_codo _str _out = "" ;
} , function ( $0 ) {
_codo _str _out = _codo _str _out + String . fromCharCode ( $0 ) ;
} , function ( ) {
el = typeof codo _textarea === "undefined" ? document . getElementById ( "codo_textarea" ) : codo _textarea ;
if ( el ) {
el . value = _codo _str _out ;
return 0 ;
} else return 1 ;
} , function ( ) {
el = typeof codo _textarea === "undefined" ? document . getElementById ( "codo_textarea" ) : codo _textarea ;
if ( el && el . style . display == "none" && ( typeof p8 _touch _detected === "undefined" || ! p8 _touch _detected ) ) {
console . log ( "@@ enabling codo_textfield" ) ;
el . style . display = "" ;
el . focus ( ) ;
el . select ( ) ;
}
} , function ( ) {
el = typeof codo _textarea === "undefined" ? document . getElementById ( "codo_textarea" ) : codo _textarea ;
if ( el && el . style . display != "none" && el . value != "" ) {
_codo _text _value = el . value ;
return 1 ;
}
return 0 ;
} , function ( ) {
return typeof _codo _text _value === "undefined" ? 1 : 0 ;
} , function ( ) {
iii = 0 ;
} , function ( ) {
iii = iii + 1 ;
return _codo _text _value . charCodeAt ( iii - 1 ) ;
} ] ;
function _emscripten _asm _const _i ( code ) {
return ASM _CONSTS [ code ] ( ) ;
}
function _emscripten _asm _const _ii ( code , a0 ) {
return ASM _CONSTS [ code ] ( a0 ) ;
}
function _emscripten _asm _const _iiiiiii ( code , a0 , a1 , a2 , a3 , a4 , a5 ) {
return ASM _CONSTS [ code ] ( a0 , a1 , a2 , a3 , a4 , a5 ) ;
}
function _emscripten _asm _const _iii ( code , a0 , a1 ) {
return ASM _CONSTS [ code ] ( a0 , a1 ) ;
}
_ _ATINIT _ _ . push ( {
func : function ( ) {
_ _ _emscripten _environ _constructor ( ) ;
}
} ) ;
memoryInitializer = " data : application / octet - stream ; base64 , AAAAAAAAAACFsQAAxd0AAI6xAACWsQAAn7EAAKaxAACtsQAAZ90AAJaxAACzsQAAurEAAMCxAAAAAAAAAAAAAAAACAgICAgAAAAAAAAAAAAAAAAAAAAAAAAMBAQEBAQEBAQEBAQEBAQEFhYWFhYWFhYWFgQEBAQEBAQVFRUVFRUFBQUFBQUFBQUFBQUFBQUFBQUFBQQEBAQFBBUVFRUVFQUFBQUFBQUFBQUFBQUFBQUFBQUFBAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGBxQVRQUFxsPBA8VGx8fHx8fHx8fHx8fHx8fGB8YGBgYGBgaCK8vLyE5FRUEGJiBGIUUVAXAAAAAAAAAAAAAAAAAQICAwMDAwQEBAQEBAQEBQUFBQUFBQUFBQUFBQUFBQYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlt0AAL / dAACd3QAAgN0AAIXdAABw3QAAs94AAHTdAABn3QAAut0AAHjdAADJ3QAAoN0AAMXdAACS3QAAmt0AAK3dAACm3QAAe90AAK7eAAC03QAAjN0AAHr6AAAjtAAA67UAAO61AADxtQAA9LUAAPe1AACHvgAA + rUAAAO2AAAKtgAAAAAAAAAAAAAAAAAAEBAQEBERERERERQTCAgGBgcHCQkJCQkJCQkJCQUFEREoKCgoKCgPDgMDAwMDAwMDAwMDAwICAQEAAAAAAAAAALa6AAC + ugAAyboAAM66AADVugAA27oAAOC6AADmugAA7LoAAPK6AAD4ugAA / roAAAS7AAAKuwAAD7sAABW7AAAbuwAAIbsAACi7AAAvuwAANrsAADy7AABDuwAASrsAAFK7AABauwAAYLsAAGW7AABquwAAc7sAAAAAAAAAAAAAqt8AAJPfAADA5gAAxOYAAK / fAAC83wAAl98AAMvmAACN3wAAit8AAKDfAACl3wAA1uYAAOTmAADK3wAAz98AAPLmAAD85gAA1t8AAJrfAABf6AAADr0AAM / mAAC23wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBPv ///z80NTY3ODk6Ozw9/////v///wABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZ////////GhscHR4fICEiIyQlJicoKSorLC0uLzAxMjO53gAAvt4AAMPeAADI3gAAzd4AANLeAADX3gAA3N4AAOHeAAAAAAAAAAAAAAAAAAAQAQIDBAUGBwgJCgsMDQ4PAAECAwQFBgcICQoLDA0ODwAAgIAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEhISEhISEhAAAAAAAAAAAAAAAAAAAAAAAA/wAAARITJBXWZ0hJmjvcXY7vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAABAAAABQAAAAEAAAAFAAAABQAAAAUAAAABAAAAAQAAAAEAAAAFAAAAAAAAAAEAAAADAAAABQAAAAQAAAACAAAACwAAAA8AAAAHAAAADAAAAA0AAAAJAAAACAAAAAYAAAAKAAAADgAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBCAgICAgICAgICAgICAgICAAAAAAAAAAAAAAAAAAAAAAAAAAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoQ7wAAHO8AACjvAAA07wAAQO8AAEvvAABW7wAAYu8AAG7vAAB67wAAhu8AAJHvAACc7wAAAAAAAAAAAAAAAAAA0e4AANbuAADc7gAA3+4AAOTuAADu7gAA+O4AAPruAAD87gAA/u4AAADvAAAE7wAABu8AAAAAAAAAAAAAAAAAABfzAAAg8wAAJ/MAADPzAAA98wAARfMAAFDzAABa8wAAZPMAAG3zAAB18wAAf/MAAAAAAAAAAAAAAAAAAAAAAACYbC4AiPMAAI7zAACU8wAAmvMAAKDzAACm8wAArPMAAAAAAAAAAAAAAAAAAAAAAACYbC4AsvMAAMHzAADS8wAA4/MAAPLzAAAE9AAAGvQAAJhsLgAp9AAAMfQAADv0AABF9AAAVvQAAGH0AABw9AAAY29kbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAAQKCgAAAAofCh8KHxQfBR8RAgQIEQgUHRINBAQAAAAECAgIBAQCAgIEFQ4fDhUEBB8EBAAAAAgQAAAfAAAAAAAABAECBAgQHxERER8EDAQEHx8BHxAfHwEHAR8RER8BAR8QHwEfEBAfER8fAQEBAR8RHxEfHxEfAQEABAAEAAAEAAQIAwwQDAMADgAOABgGAQYYH
var tempDoublePtr = 3042720 ;
function _ _ _setErrNo ( value ) {
if ( Module [ "___errno_location" ] ) HEAP32 [ Module [ "___errno_location" ] ( ) >> 2 ] = value ;
return value ;
}
var PATH = {
splitPath : function ( filename ) {
var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/ ;
return splitPathRe . exec ( filename ) . slice ( 1 ) ;
} ,
normalizeArray : function ( parts , allowAboveRoot ) {
var up = 0 ;
for ( var i = parts . length - 1 ; i >= 0 ; i -- ) {
var last = parts [ i ] ;
if ( last === "." ) {
parts . splice ( i , 1 ) ;
} else if ( last === ".." ) {
parts . splice ( i , 1 ) ;
up ++ ;
} else if ( up ) {
parts . splice ( i , 1 ) ;
up -- ;
}
}
if ( allowAboveRoot ) {
for ( ; up ; up -- ) {
parts . unshift ( ".." ) ;
}
}
return parts ;
} ,
normalize : function ( path ) {
var isAbsolute = path . charAt ( 0 ) === "/" , trailingSlash = path . substr ( - 1 ) === "/" ;
path = PATH . normalizeArray ( path . split ( "/" ) . filter ( function ( p ) {
return ! ! p ;
} ) , ! isAbsolute ) . join ( "/" ) ;
if ( ! path && ! isAbsolute ) {
path = "." ;
}
if ( path && trailingSlash ) {
path += "/" ;
}
return ( isAbsolute ? "/" : "" ) + path ;
} ,
dirname : function ( path ) {
var result = PATH . splitPath ( path ) , root = result [ 0 ] , dir = result [ 1 ] ;
if ( ! root && ! dir ) {
return "." ;
}
if ( dir ) {
dir = dir . substr ( 0 , dir . length - 1 ) ;
}
return root + dir ;
} ,
basename : function ( path ) {
if ( path === "/" ) return "/" ;
var lastSlash = path . lastIndexOf ( "/" ) ;
if ( lastSlash === - 1 ) return path ;
return path . substr ( lastSlash + 1 ) ;
} ,
extname : function ( path ) {
return PATH . splitPath ( path ) [ 3 ] ;
} ,
join : function ( ) {
var paths = Array . prototype . slice . call ( arguments , 0 ) ;
return PATH . normalize ( paths . join ( "/" ) ) ;
} ,
join2 : function ( l , r ) {
return PATH . normalize ( l + "/" + r ) ;
} ,
resolve : function ( ) {
var resolvedPath = "" , resolvedAbsolute = false ;
for ( var i = arguments . length - 1 ; i >= - 1 && ! resolvedAbsolute ; i -- ) {
var path = i >= 0 ? arguments [ i ] : FS . cwd ( ) ;
if ( typeof path !== "string" ) {
throw new TypeError ( "Arguments to path.resolve must be strings" ) ;
} else if ( ! path ) {
return "" ;
}
resolvedPath = path + "/" + resolvedPath ;
resolvedAbsolute = path . charAt ( 0 ) === "/" ;
}
resolvedPath = PATH . normalizeArray ( resolvedPath . split ( "/" ) . filter ( function ( p ) {
return ! ! p ;
} ) , ! resolvedAbsolute ) . join ( "/" ) ;
return ( resolvedAbsolute ? "/" : "" ) + resolvedPath || "." ;
} ,
relative : function ( from , to ) {
from = PATH . resolve ( from ) . substr ( 1 ) ;
to = PATH . resolve ( to ) . substr ( 1 ) ;
function trim ( arr ) {
var start = 0 ;
for ( ; start < arr . length ; start ++ ) {
if ( arr [ start ] !== "" ) break ;
}
var end = arr . length - 1 ;
for ( ; end >= 0 ; end -- ) {
if ( arr [ end ] !== "" ) break ;
}
if ( start > end ) return [ ] ;
return arr . slice ( start , end - start + 1 ) ;
}
var fromParts = trim ( from . split ( "/" ) ) ;
var toParts = trim ( to . split ( "/" ) ) ;
var length = Math . min ( fromParts . length , toParts . length ) ;
var samePartsLength = length ;
for ( var i = 0 ; i < length ; i ++ ) {
if ( fromParts [ i ] !== toParts [ i ] ) {
samePartsLength = i ;
break ;
}
}
var outputParts = [ ] ;
for ( var i = samePartsLength ; i < fromParts . length ; i ++ ) {
outputParts . push ( ".." ) ;
}
outputParts = outputParts . concat ( toParts . slice ( samePartsLength ) ) ;
return outputParts . join ( "/" ) ;
}
} ;
var TTY = {
ttys : [ ] ,
init : function ( ) { } ,
shutdown : function ( ) { } ,
register : function ( dev , ops ) {
TTY . ttys [ dev ] = {
input : [ ] ,
output : [ ] ,
ops : ops
} ;
FS . registerDevice ( dev , TTY . stream _ops ) ;
} ,
stream _ops : {
open : function ( stream ) {
var tty = TTY . ttys [ stream . node . rdev ] ;
if ( ! tty ) {
throw new FS . ErrnoError ( ERRNO _CODES . ENODEV ) ;
}
stream . tty = tty ;
stream . seekable = false ;
} ,
close : function ( stream ) {
stream . tty . ops . flush ( stream . tty ) ;
} ,
flush : function ( stream ) {
stream . tty . ops . flush ( stream . tty ) ;
} ,
read : function ( stream , buffer , offset , length , pos ) {
if ( ! stream . tty || ! stream . tty . ops . get _char ) {
throw new FS . ErrnoError ( ERRNO _CODES . ENXIO ) ;
}
var bytesRead = 0 ;
for ( var i = 0 ; i < length ; i ++ ) {
var result ;
try {
result = stream . tty . ops . get _char ( stream . tty ) ;
} catch ( e ) {
throw new FS . ErrnoError ( ERRNO _CODES . EIO ) ;
}
if ( result === undefined && bytesRead === 0 ) {
throw new FS . ErrnoError ( ERRNO _CODES . EAGAIN ) ;
}
if ( result === null || result === undefined ) break ;
bytesRead ++ ;
buffer [ offset + i ] = result ;
}
if ( bytesRead ) {
stream . node . timestamp = Date . now ( ) ;
}
return bytesRead ;
} ,
write : function ( stream , buffer , offset , length , pos ) {
if ( ! stream . tty || ! stream . tty . ops . put _char ) {
throw new FS . ErrnoError ( ERRNO _CODES . ENXIO ) ;
}
try {
for ( var i = 0 ; i < length ; i ++ ) {
stream . tty . ops . put _char ( stream . tty , buffer [ offset + i ] ) ;
}
} catch ( e ) {
throw new FS . ErrnoError ( ERRNO _CODES . EIO ) ;
}
if ( length ) {
stream . node . timestamp = Date . now ( ) ;
}
return i ;
}
} ,
default _tty _ops : {
get _char : function ( tty ) {
if ( ! tty . input . length ) {
var result = null ;
if ( ENVIRONMENT _IS _NODE ) {
var BUFSIZE = 256 ;
var buf = new Buffer ( BUFSIZE ) ;
var bytesRead = 0 ;
var isPosixPlatform = process . platform != "win32" ;
var fd = process . stdin . fd ;
if ( isPosixPlatform ) {
var usingDevice = false ;
try {
fd = fs . openSync ( "/dev/stdin" , "r" ) ;
usingDevice = true ;
} catch ( e ) { }
}
try {
bytesRead = fs . readSync ( fd , buf , 0 , BUFSIZE , null ) ;
} catch ( e ) {
if ( e . toString ( ) . indexOf ( "EOF" ) != - 1 ) bytesRead = 0 ; else throw e ;
}
if ( usingDevice ) {
fs . closeSync ( fd ) ;
}
if ( bytesRead > 0 ) {
result = buf . slice ( 0 , bytesRead ) . toString ( "utf-8" ) ;
} else {
result = null ;
}
} else if ( typeof window != "undefined" && typeof window . prompt == "function" ) {
result = window . prompt ( "Input: " ) ;
if ( result !== null ) {
result += "\n" ;
}
} else if ( typeof readline == "function" ) {
result = readline ( ) ;
if ( result !== null ) {
result += "\n" ;
}
}
if ( ! result ) {
return null ;
}
tty . input = intArrayFromString ( result , true ) ;
}
return tty . input . shift ( ) ;
} ,
put _char : function ( tty , val ) {
if ( val === null || val === 10 ) {
out ( UTF8ArrayToString ( tty . output , 0 ) ) ;
tty . output = [ ] ;
} else {
if ( val != 0 ) tty . output . push ( val ) ;
}
} ,
flush : function ( tty ) {
if ( tty . output && tty . output . length > 0 ) {
out ( UTF8ArrayToString ( tty . output , 0 ) ) ;
tty . output = [ ] ;
}
}
} ,
default _tty1 _ops : {
put _char : function ( tty , val ) {
if ( val === null || val === 10 ) {
err ( UTF8ArrayToString ( tty . output , 0 ) ) ;
tty . output = [ ] ;
} else {
if ( val != 0 ) tty . output . push ( val ) ;
}
} ,
flush : function ( tty ) {
if ( tty . output && tty . output . length > 0 ) {
err ( UTF8ArrayToString ( tty . output , 0 ) ) ;
tty . output = [ ] ;
}
}
}
} ;
var MEMFS = {
ops _table : null ,
mount : function ( mount ) {
return MEMFS . createNode ( null , "/" , 16384 | 511 , 0 ) ;
} ,
createNode : function ( parent , name , mode , dev ) {
if ( FS . isBlkdev ( mode ) || FS . isFIFO ( mode ) ) {
throw new FS . ErrnoError ( ERRNO _CODES . EPERM ) ;
}
if ( ! MEMFS . ops _table ) {
MEMFS . ops _table = {
dir : {
node : {
getattr : MEMFS . node _ops . getattr ,
setattr : MEMFS . node _ops . setattr ,
lookup : MEMFS . node _ops . lookup ,
mknod : MEMFS . node _ops . mknod ,
rename : MEMFS . node _ops . rename ,
unlink : MEMFS . node _ops . unlink ,
rmdir : MEMFS . node _ops . rmdir ,
readdir : MEMFS . node _ops . readdir ,
symlink : MEMFS . node _ops . symlink
} ,
stream : {
llseek : MEMFS . stream _ops . llseek
}
} ,
file : {
node : {
getattr : MEMFS . node _ops . getattr ,
setattr : MEMFS . node _ops . setattr
} ,
stream : {
llseek : MEMFS . stream _ops . llseek ,
read : MEMFS . stream _ops . read ,
write : MEMFS . stream _ops . write ,
allocate : MEMFS . stream _ops . allocate ,
mmap : MEMFS . stream _ops . mmap ,
msync : MEMFS . stream _ops . msync
}
} ,
link : {
node : {
getattr : MEMFS . node _ops . getattr ,
setattr : MEMFS . node _ops . setattr ,
readlink : MEMFS . node _ops . readlink
} ,
stream : { }
} ,
chrdev : {
node : {
getattr : MEMFS . node _ops . getattr ,
setattr : MEMFS . node _ops . setattr
} ,
stream : FS . chrdev _stream _ops
}
} ;
}
var node = FS . createNode ( parent , name , mode , dev ) ;
if ( FS . isDir ( node . mode ) ) {
node . node _ops = MEMFS . ops _table . dir . node ;
node . stream _ops = MEMFS . ops _table . dir . stream ;
node . contents = { } ;
} else if ( FS . isFile ( node . mode ) ) {
node . node _ops = MEMFS . ops _table . file . node ;
node . stream _ops = MEMFS . ops _table . file . stream ;
node . usedBytes = 0 ;
node . contents = null ;
} else if ( FS . isLink ( node . mode ) ) {
node . node _ops = MEMFS . ops _table . link . node ;
node . stream _ops = MEMFS . ops _table . link . stream ;
} else if ( FS . isChrdev ( node . mode ) ) {
node . node _ops = MEMFS . ops _table . chrdev . node ;
node . stream _ops = MEMFS . ops _table . chrdev . stream ;
}
node . timestamp = Date . now ( ) ;
if ( parent ) {
parent . contents [ name ] = node ;
}
return node ;
} ,
getFileDataAsRegularArray : function ( node ) {
if ( node . contents && node . contents . subarray ) {
var arr = [ ] ;
for ( var i = 0 ; i < node . usedBytes ; ++ i ) arr . push ( node . contents [ i ] ) ;
return arr ;
}
return node . contents ;
} ,
getFileDataAsTypedArray : function ( node ) {
if ( ! node . contents ) return new Uint8Array ( ) ;
if ( node . contents . subarray ) return node . contents . subarray ( 0 , node . usedBytes ) ;
return new Uint8Array ( node . contents ) ;
} ,
expandFileStorage : function ( node , newCapacity ) {
var prevCapacity = node . contents ? node . contents . length : 0 ;
if ( prevCapacity >= newCapacity ) return ;
var CAPACITY _DOUBLING _MAX = 1024 * 1024 ;
newCapacity = Math . max ( newCapacity , prevCapacity * ( prevCapacity < CAPACITY _DOUBLING _MAX ? 2 : 1.125 ) | 0 ) ;
if ( prevCapacity != 0 ) newCapacity = Math . max ( newCapacity , 256 ) ;
var oldContents = node . contents ;
node . contents = new Uint8Array ( newCapacity ) ;
if ( node . usedBytes > 0 ) node . contents . set ( oldContents . subarray ( 0 , node . usedBytes ) , 0 ) ;
return ;
} ,
resizeFileStorage : function ( node , newSize ) {
if ( node . usedBytes == newSize ) return ;
if ( newSize == 0 ) {
node . contents = null ;
node . usedBytes = 0 ;
return ;
}
if ( ! node . contents || node . contents . subarray ) {
var oldContents = node . contents ;
node . contents = new Uint8Array ( new ArrayBuffer ( newSize ) ) ;
if ( oldContents ) {
node . contents . set ( oldContents . subarray ( 0 , Math . min ( newSize , node . usedBytes ) ) ) ;
}
node . usedBytes = newSize ;
return ;
}
if ( ! node . contents ) node . contents = [ ] ;
if ( node . contents . length > newSize ) node . contents . length = newSize ; else while ( node . contents . length < newSize ) node . contents . push ( 0 ) ;
node . usedBytes = newSize ;
} ,
node _ops : {
getattr : function ( node ) {
var attr = { } ;
attr . dev = FS . isChrdev ( node . mode ) ? node . id : 1 ;
attr . ino = node . id ;
attr . mode = node . mode ;
attr . nlink = 1 ;
attr . uid = 0 ;
attr . gid = 0 ;
attr . rdev = node . rdev ;
if ( FS . isDir ( node . mode ) ) {
attr . size = 4096 ;
} else if ( FS . isFile ( node . mode ) ) {
attr . size = node . usedBytes ;
} else if ( FS . isLink ( node . mode ) ) {
attr . size = node . link . length ;
} else {
attr . size = 0 ;
}
attr . atime = new Date ( node . timestamp ) ;
attr . mtime = new Date ( node . timestamp ) ;
attr . ctime = new Date ( node . timestamp ) ;
attr . blksize = 4096 ;
attr . blocks = Math . ceil ( attr . size / attr . blksize ) ;
return attr ;
} ,
setattr : function ( node , attr ) {
if ( attr . mode !== undefined ) {
node . mode = attr . mode ;
}
if ( attr . timestamp !== undefined ) {
node . timestamp = attr . timestamp ;
}
if ( attr . size !== undefined ) {
MEMFS . resizeFileStorage ( node , attr . size ) ;
}
} ,
lookup : function ( parent , name ) {
throw FS . genericErrors [ ERRNO _CODES . ENOENT ] ;
} ,
mknod : function ( parent , name , mode , dev ) {
return MEMFS . createNode ( parent , name , mode , dev ) ;
} ,
rename : function ( old _node , new _dir , new _name ) {
if ( FS . isDir ( old _node . mode ) ) {
var new _node ;
try {
new _node = FS . lookupNode ( new _dir , new _name ) ;
} catch ( e ) { }
if ( new _node ) {
for ( var i in new _node . contents ) {
throw new FS . ErrnoError ( ERRNO _CODES . ENOTEMPTY ) ;
}
}
}
delete old _node . parent . contents [ old _node . name ] ;
old _node . name = new _name ;
new _dir . contents [ new _name ] = old _node ;
old _node . parent = new _dir ;
} ,
unlink : function ( parent , name ) {
delete parent . contents [ name ] ;
} ,
rmdir : function ( parent , name ) {
var node = FS . lookupNode ( parent , name ) ;
for ( var i in node . contents ) {
throw new FS . ErrnoError ( ERRNO _CODES . ENOTEMPTY ) ;
}
delete parent . contents [ name ] ;
} ,
readdir : function ( node ) {
var entries = [ "." , ".." ] ;
for ( var key in node . contents ) {
if ( ! node . contents . hasOwnProperty ( key ) ) {
continue ;
}
entries . push ( key ) ;
}
return entries ;
} ,
symlink : function ( parent , newname , oldpath ) {
var node = MEMFS . createNode ( parent , newname , 511 | 40960 , 0 ) ;
node . link = oldpath ;
return node ;
} ,
readlink : function ( node ) {
if ( ! FS . isLink ( node . mode ) ) {
throw new FS . ErrnoError ( ERRNO _CODES . EINVAL ) ;
}
return node . link ;
}
} ,
stream _ops : {
read : function ( stream , buffer , offset , length , position ) {
var contents = stream . node . contents ;
if ( position >= stream . node . usedBytes ) return 0 ;
var size = Math . min ( stream . node . usedBytes - position , length ) ;
assert ( size >= 0 ) ;
if ( size > 8 && contents . subarray ) {
buffer . set ( contents . subarray ( position , position + size ) , offset ) ;
} else {
for ( var i = 0 ; i < size ; i ++ ) buffer [ offset + i ] = contents [ position + i ] ;
}
return size ;
} ,
write : function ( stream , buffer , offset , length , position , canOwn ) {
if ( ! length ) return 0 ;
var node = stream . node ;
node . timestamp = Date . now ( ) ;
if ( buffer . subarray && ( ! node . contents || node . contents . subarray ) ) {
if ( canOwn ) {
node . contents = buffer . subarray ( offset , offset + length ) ;
node . usedBytes = length ;
return length ;
} else if ( node . usedBytes === 0 && position === 0 ) {
node . contents = new Uint8Array ( buffer . subarray ( offset , offset + length ) ) ;
node . usedBytes = length ;
return length ;
} else if ( position + length <= node . usedBytes ) {
node . contents . set ( buffer . subarray ( offset , offset + length ) , position ) ;
return length ;
}
}
MEMFS . expandFileStorage ( node , position + length ) ;
if ( node . contents . subarray && buffer . subarray ) node . contents . set ( buffer . subarray ( offset , offset + length ) , position ) ; else {
for ( var i = 0 ; i < length ; i ++ ) {
node . contents [ position + i ] = buffer [ offset + i ] ;
}
}
node . usedBytes = Math . max ( node . usedBytes , position + length ) ;
return length ;
} ,
llseek : function ( stream , offset , whence ) {
var position = offset ;
if ( whence === 1 ) {
position += stream . position ;
} else if ( whence === 2 ) {
if ( FS . isFile ( stream . node . mode ) ) {
position += stream . node . usedBytes ;
}
}
if ( position < 0 ) {
throw new FS . ErrnoError ( ERRNO _CODES . EINVAL ) ;
}
return position ;
} ,
allocate : function ( stream , offset , length ) {
MEMFS . expandFileStorage ( stream . node , offset + length ) ;
stream . node . usedBytes = Math . max ( stream . node . usedBytes , offset + length ) ;
} ,
mmap : function ( stream , buffer , offset , length , position , prot , flags ) {
if ( ! FS . isFile ( stream . node . mode ) ) {
throw new FS . ErrnoError ( ERRNO _CODES . ENODEV ) ;
}
var ptr ;
var allocated ;
var contents = stream . node . contents ;
if ( ! ( flags & 2 ) && ( contents . buffer === buffer || contents . buffer === buffer . buffer ) ) {
allocated = false ;
ptr = contents . byteOffset ;
} else {
if ( position > 0 || position + length < stream . node . usedBytes ) {
if ( contents . subarray ) {
contents = contents . subarray ( position , position + length ) ;
} else {
contents = Array . prototype . slice . call ( contents , position , position + length ) ;
}
}
allocated = true ;
ptr = _malloc ( length ) ;
if ( ! ptr ) {
throw new FS . ErrnoError ( ERRNO _CODES . ENOMEM ) ;
}
buffer . set ( contents , ptr ) ;
}
return {
ptr : ptr ,
allocated : allocated
} ;
} ,
msync : function ( stream , buffer , offset , length , mmapFlags ) {
if ( ! FS . isFile ( stream . node . mode ) ) {
throw new FS . ErrnoError ( ERRNO _CODES . ENODEV ) ;
}
if ( mmapFlags & 2 ) {
return 0 ;
}
var bytesWritten = MEMFS . stream _ops . write ( stream , buffer , 0 , length , offset , false ) ;
return 0 ;
}
}
} ;
var IDBFS = {
dbs : { } ,
indexedDB : function ( ) {
if ( typeof indexedDB !== "undefined" ) return indexedDB ;
var ret = null ;
if ( typeof window === "object" ) ret = window . indexedDB || window . mozIndexedDB || window . webkitIndexedDB || window . msIndexedDB ;
assert ( ret , "IDBFS used, but indexedDB not supported" ) ;
return ret ;
} ,
DB _VERSION : 21 ,
DB _STORE _NAME : "FILE_DATA" ,
mount : function ( mount ) {
return MEMFS . mount . apply ( null , arguments ) ;
} ,
syncfs : function ( mount , populate , callback ) {
IDBFS . getLocalSet ( mount , function ( err , local ) {
if ( err ) return callback ( err ) ;
IDBFS . getRemoteSet ( mount , function ( err , remote ) {
if ( err ) return callback ( err ) ;
var src = populate ? remote : local ;
var dst = populate ? local : remote ;
IDBFS . reconcile ( src , dst , callback ) ;
} ) ;
} ) ;
} ,
getDB : function ( name , callback ) {
var db = IDBFS . dbs [ name ] ;
if ( db ) {
return callback ( null , db ) ;
}
var req ;
try {
req = IDBFS . indexedDB ( ) . open ( name , IDBFS . DB _VERSION ) ;
} catch ( e ) {
return callback ( e ) ;
}
if ( ! req ) {
return callback ( "Unable to connect to IndexedDB" ) ;
}
req . onupgradeneeded = function ( e ) {
var db = e . target . result ;
var transaction = e . target . transaction ;
var fileStore ;
if ( db . objectStoreNames . contains ( IDBFS . DB _STORE _NAME ) ) {
fileStore = transaction . objectStore ( IDBFS . DB _STORE _NAME ) ;
} else {
fileStore = db . createObjectStore ( IDBFS . DB _STORE _NAME ) ;
}
if ( ! fileStore . indexNames . contains ( "timestamp" ) ) {
fileStore . createIndex ( "timestamp" , "timestamp" , {
unique : false
} ) ;
}
} ;
req . onsuccess = function ( ) {
db = req . result ;
IDBFS . dbs [ name ] = db ;
callback ( null , db ) ;
} ;
req . onerror = function ( e ) {
callback ( this . error ) ;
e . preventDefault ( ) ;
} ;
} ,
getLocalSet : function ( mount , callback ) {
var entries = { } ;
function isRealDir ( p ) {
return p !== "." && p !== ".." ;
}
function toAbsolute ( root ) {
return function ( p ) {
return PATH . join2 ( root , p ) ;
} ;
}
var check = FS . readdir ( mount . mountpoint ) . filter ( isRealDir ) . map ( toAbsolute ( mount . mountpoint ) ) ;
while ( check . length ) {
var path = check . pop ( ) ;
var stat ;
try {
stat = FS . stat ( path ) ;
} catch ( e ) {
return callback ( e ) ;
}
if ( FS . isDir ( stat . mode ) ) {
check . push . apply ( check , FS . readdir ( path ) . filter ( isRealDir ) . map ( toAbsolute ( path ) ) ) ;
}
entries [ path ] = {
timestamp : stat . mtime
} ;
}
return callback ( null , {
type : "local" ,
entries : entries
} ) ;
} ,
getRemoteSet : function ( mount , callback ) {
var entries = { } ;
IDBFS . getDB ( mount . mountpoint , function ( err , db ) {
if ( err ) return callback ( err ) ;
try {
var transaction = db . transaction ( [ IDBFS . DB _STORE _NAME ] , "readonly" ) ;
transaction . onerror = function ( e ) {
callback ( this . error ) ;
e . preventDefault ( ) ;
} ;
var store = transaction . objectStore ( IDBFS . DB _STORE _NAME ) ;
var index = store . index ( "timestamp" ) ;
index . openKeyCursor ( ) . onsuccess = function ( event ) {
var cursor = event . target . result ;
if ( ! cursor ) {
return callback ( null , {
type : "remote" ,
db : db ,
entries : entries
} ) ;
}
entries [ cursor . primaryKey ] = {
timestamp : cursor . key
} ;
cursor . continue ( ) ;
} ;
} catch ( e ) {
return callback ( e ) ;
}
} ) ;
} ,
loadLocalEntry : function ( path , callback ) {
var stat , node ;
try {
var lookup = FS . lookupPath ( path ) ;
node = lookup . node ;
stat = FS . stat ( path ) ;
} catch ( e ) {
return callback ( e ) ;
}
if ( FS . isDir ( stat . mode ) ) {
return callback ( null , {
timestamp : stat . mtime ,
mode : stat . mode
} ) ;
} else if ( FS . isFile ( stat . mode ) ) {
node . contents = MEMFS . getFileDataAsTypedArray ( node ) ;
return callback ( null , {
timestamp : stat . mtime ,
mode : stat . mode ,
contents : node . contents
} ) ;
} else {
return callback ( new Error ( "node type not supported" ) ) ;
}
} ,
storeLocalEntry : function ( path , entry , callback ) {
try {
if ( FS . isDir ( entry . mode ) ) {
FS . mkdir ( path , entry . mode ) ;
} else if ( FS . isFile ( entry . mode ) ) {
FS . writeFile ( path , entry . contents , {
canOwn : true
} ) ;
} else {
return callback ( new Error ( "node type not supported" ) ) ;
}
FS . chmod ( path , entry . mode ) ;
FS . utime ( path , entry . timestamp , entry . timestamp ) ;
} catch ( e ) {
return callback ( e ) ;
}
callback ( null ) ;
} ,
removeLocalEntry : function ( path , callback ) {
try {
var lookup = FS . lookupPath ( path ) ;
var stat = FS . stat ( path ) ;
if ( FS . isDir ( stat . mode ) ) {
FS . rmdir ( path ) ;
} else if ( FS . isFile ( stat . mode ) ) {
FS . unlink ( path ) ;
}
} catch ( e ) {
return callback ( e ) ;
}
callback ( null ) ;
} ,
loadRemoteEntry : function ( store , path , callback ) {
var req = store . get ( path ) ;
req . onsuccess = function ( event ) {
callback ( null , event . target . result ) ;
} ;
req . onerror = function ( e ) {
callback ( this . error ) ;
e . preventDefault ( ) ;
} ;
} ,
storeRemoteEntry : function ( store , path , entry , callback ) {
var req = store . put ( entry , path ) ;
req . onsuccess = function ( ) {
callback ( null ) ;
} ;
req . onerror = function ( e ) {
callback ( this . error ) ;
e . preventDefault ( ) ;
} ;
} ,
removeRemoteEntry : function ( store , path , callback ) {
var req = store . delete ( path ) ;
req . onsuccess = function ( ) {
callback ( null ) ;
} ;
req . onerror = function ( e ) {
callback ( this . error ) ;
e . preventDefault ( ) ;
} ;
} ,
reconcile : function ( src , dst , callback ) {
var total = 0 ;
var create = [ ] ;
Object . keys ( src . entries ) . forEach ( function ( key ) {
var e = src . entries [ key ] ;
var e2 = dst . entries [ key ] ;
if ( ! e2 || e . timestamp > e2 . timestamp ) {
create . push ( key ) ;
total ++ ;
}
} ) ;
var remove = [ ] ;
Object . keys ( dst . entries ) . forEach ( function ( key ) {
var e = dst . entries [ key ] ;
var e2 = src . entries [ key ] ;
if ( ! e2 ) {
remove . push ( key ) ;
total ++ ;
}
} ) ;
if ( ! total ) {
return callback ( null ) ;
}
var errored = false ;
var completed = 0 ;
var db = src . type === "remote" ? src . db : dst . db ;
var transaction = db . transaction ( [ IDBFS . DB _STORE _NAME ] , "readwrite" ) ;
var store = transaction . objectStore ( IDBFS . DB _STORE _NAME ) ;
function done ( err ) {
if ( err ) {
if ( ! done . errored ) {
done . errored = true ;
return callback ( err ) ;
}
return ;
}
if ( ++ completed >= total ) {
return callback ( null ) ;
}
}
transaction . onerror = function ( e ) {
done ( this . error ) ;
e . preventDefault ( ) ;
} ;
create . sort ( ) . forEach ( function ( path ) {
if ( dst . type === "local" ) {
IDBFS . loadRemoteEntry ( store , path , function ( err , entry ) {
if ( err ) return done ( err ) ;
IDBFS . storeLocalEntry ( path , entry , done ) ;
} ) ;
} else {
IDBFS . loadLocalEntry ( path , function ( err , entry ) {
if ( err ) return done ( err ) ;
IDBFS . storeRemoteEntry ( store , path , entry , done ) ;
} ) ;
}
} ) ;
remove . sort ( ) . reverse ( ) . forEach ( function ( path ) {
if ( dst . type === "local" ) {
IDBFS . removeLocalEntry ( path , done ) ;
} else {
IDBFS . removeRemoteEntry ( store , path , done ) ;
}
} ) ;
}
} ;
var NODEFS = {
isWindows : false ,
staticInit : function ( ) {
NODEFS . isWindows = ! ! process . platform . match ( /^win/ ) ;
var flags = process [ "binding" ] ( "constants" ) ;
if ( flags [ "fs" ] ) {
flags = flags [ "fs" ] ;
}
NODEFS . flagsForNodeMap = {
1024 : flags [ "O_APPEND" ] ,
64 : flags [ "O_CREAT" ] ,
128 : flags [ "O_EXCL" ] ,
0 : flags [ "O_RDONLY" ] ,
2 : flags [ "O_RDWR" ] ,
4096 : flags [ "O_SYNC" ] ,
512 : flags [ "O_TRUNC" ] ,
1 : flags [ "O_WRONLY" ]
} ;
} ,
bufferFrom : function ( arrayBuffer ) {
return Buffer . alloc ? Buffer . from ( arrayBuffer ) : new Buffer ( arrayBuffer ) ;
} ,
mount : function ( mount ) {
assert ( ENVIRONMENT _IS _NODE ) ;
return NODEFS . createNode ( null , "/" , NODEFS . getMode ( mount . opts . root ) , 0 ) ;
} ,
createNode : function ( parent , name , mode , dev ) {
if ( ! FS . isDir ( mode ) && ! FS . isFile ( mode ) && ! FS . isLink ( mode ) ) {
throw new FS . ErrnoError ( ERRNO _CODES . EINVAL ) ;
}
var node = FS . createNode ( parent , name , mode ) ;
node . node _ops = NODEFS . node _ops ;
node . stream _ops = NODEFS . stream _ops ;
return node ;
} ,
getMode : function ( path ) {
var stat ;
try {
stat = fs . lstatSync ( path ) ;
if ( NODEFS . isWindows ) {
stat . mode = stat . mode | ( stat . mode & 292 ) >> 2 ;
}
} catch ( e ) {
if ( ! e . code ) throw e ;
throw new FS . ErrnoError ( ERRNO _CODES [ e . code ] ) ;
}
return stat . mode ;
} ,
realPath : function ( node ) {
var parts = [ ] ;
while ( node . parent !== node ) {
parts . push ( node . name ) ;
node = node . parent ;
}
parts . push ( node . mount . opts . root ) ;
parts . reverse ( ) ;
return PATH . join . apply ( null , parts ) ;
} ,
flagsForNode : function ( flags ) {
flags &= ~ 2097152 ;
flags &= ~ 2048 ;
flags &= ~ 32768 ;
flags &= ~ 524288 ;
var newFlags = 0 ;
for ( var k in NODEFS . flagsForNodeMap ) {
if ( flags & k ) {
newFlags |= NODEFS . flagsForNodeMap [ k ] ;
flags ^= k ;
}
}
if ( ! flags ) {
return newFlags ;
} else {
throw new FS . ErrnoError ( ERRNO _CODES . EINVAL ) ;
}
} ,
node _ops : {
getattr : function ( node ) {
var path = NODEFS . realPath ( node ) ;
var stat ;
try {
stat = fs . lstatSync ( path ) ;
} catch ( e ) {
if ( ! e . code ) throw e ;
throw new FS . ErrnoError ( ERRNO _CODES [ e . code ] ) ;
}
if ( NODEFS . isWindows && ! stat . blksize ) {
stat . blksize = 4096 ;
}
if ( NODEFS . isWindows && ! stat . blocks ) {
stat . blocks = ( stat . size + stat . blksize - 1 ) / stat . blksize | 0 ;
}
return {
dev : stat . dev ,
ino : stat . ino ,
mode : stat . mode ,
nlink : stat . nlink ,
uid : stat . uid ,
gid : stat . gid ,
rdev : stat . rdev ,
size : stat . size ,
atime : stat . atime ,
mtime : stat . mtime ,
ctime : stat . ctime ,
blksize : stat . blksize ,
blocks : stat . blocks
} ;
} ,
setattr : function ( node , attr ) {
var path = NODEFS . realPath ( node ) ;
try {
if ( attr . mode !== undefined ) {
fs . chmodSync ( path , attr . mode ) ;
node . mode = attr . mode ;
}
if ( attr . timestamp !== undefined ) {
var date = new Date ( attr . timestamp ) ;
fs . utimesSync ( path , date , date ) ;
}
if ( attr . size !== undefined ) {
fs . truncateSync ( path , attr . size ) ;
}
} catch ( e ) {
if ( ! e . code ) throw e ;
throw new FS . ErrnoError ( ERRNO _CODES [ e . code ] ) ;
}
} ,
lookup : function ( parent , name ) {
var path = PATH . join2 ( NODEFS . realPath ( parent ) , name ) ;
var mode = NODEFS . getMode ( path ) ;
return NODEFS . createNode ( parent , name , mode ) ;
} ,
mknod : function ( parent , name , mode , dev ) {
var node = NODEFS . createNode ( parent , name , mode , dev ) ;
var path = NODEFS . realPath ( node ) ;
try {
if ( FS . isDir ( node . mode ) ) {
fs . mkdirSync ( path , node . mode ) ;
} else {
fs . writeFileSync ( path , "" , {
mode : node . mode
} ) ;
}
} catch ( e ) {
if ( ! e . code ) throw e ;
throw new FS . ErrnoError ( ERRNO _CODES [ e . code ] ) ;
}
return node ;
} ,
rename : function ( oldNode , newDir , newName ) {
var oldPath = NODEFS . realPath ( oldNode ) ;
var newPath = PATH . join2 ( NODEFS . realPath ( newDir ) , newName ) ;
try {
fs . renameSync ( oldPath , newPath ) ;
} catch ( e ) {
if ( ! e . code ) throw e ;
throw new FS . ErrnoError ( ERRNO _CODES [ e . code ] ) ;
}
} ,
unlink : function ( parent , name ) {
var path = PATH . join2 ( NODEFS . realPath ( parent ) , name ) ;
try {
fs . unlinkSync ( path ) ;
} catch ( e ) {
if ( ! e . code ) throw e ;
throw new FS . ErrnoError ( ERRNO _CODES [ e . code ] ) ;
}
} ,
rmdir : function ( parent , name ) {
var path = PATH . join2 ( NODEFS . realPath ( parent ) , name ) ;
try {
fs . rmdirSync ( path ) ;
} catch ( e ) {
if ( ! e . code ) throw e ;
throw new FS . ErrnoError ( ERRNO _CODES [ e . code ] ) ;
}
} ,
readdir : function ( node ) {
var path = NODEFS . realPath ( node ) ;
try {
return fs . readdirSync ( path ) ;
} catch ( e ) {
if ( ! e . code ) throw e ;
throw new FS . ErrnoError ( ERRNO _CODES [ e . code ] ) ;
}
} ,
symlink : function ( parent , newName , oldPath ) {
var newPath = PATH . join2 ( NODEFS . realPath ( parent ) , newName ) ;
try {
fs . symlinkSync ( oldPath , newPath ) ;
} catch ( e ) {
if ( ! e . code ) throw e ;
throw new FS . ErrnoError ( ERRNO _CODES [ e . code ] ) ;
}
} ,
readlink : function ( node ) {
var path = NODEFS . realPath ( node ) ;
try {
path = fs . readlinkSync ( path ) ;
path = NODEJS _PATH . relative ( NODEJS _PATH . resolve ( node . mount . opts . root ) , path ) ;
return path ;
} catch ( e ) {
if ( ! e . code ) throw e ;
throw new FS . ErrnoError ( ERRNO _CODES [ e . code ] ) ;
}
}
} ,
stream _ops : {
open : function ( stream ) {
var path = NODEFS . realPath ( stream . node ) ;
try {
if ( FS . isFile ( stream . node . mode ) ) {
stream . nfd = fs . openSync ( path , NODEFS . flagsForNode ( stream . flags ) ) ;
}
} catch ( e ) {
if ( ! e . code ) throw e ;
throw new FS . ErrnoError ( ERRNO _CODES [ e . code ] ) ;
}
} ,
close : function ( stream ) {
try {
if ( FS . isFile ( stream . node . mode ) && stream . nfd ) {
fs . closeSync ( stream . nfd ) ;
}
} catch ( e ) {
if ( ! e . code ) throw e ;
throw new FS . ErrnoError ( ERRNO _CODES [ e . code ] ) ;
}
} ,
read : function ( stream , buffer , offset , length , position ) {
if ( length === 0 ) return 0 ;
try {
return fs . readSync ( stream . nfd , NODEFS . bufferFrom ( buffer . buffer ) , offset , length , position ) ;
} catch ( e ) {
throw new FS . ErrnoError ( ERRNO _CODES [ e . code ] ) ;
}
} ,
write : function ( stream , buffer , offset , length , position ) {
try {
return fs . writeSync ( stream . nfd , NODEFS . bufferFrom ( buffer . buffer ) , offset , length , position ) ;
} catch ( e ) {
throw new FS . ErrnoError ( ERRNO _CODES [ e . code ] ) ;
}
} ,
llseek : function ( stream , offset , whence ) {
var position = offset ;
if ( whence === 1 ) {
position += stream . position ;
} else if ( whence === 2 ) {
if ( FS . isFile ( stream . node . mode ) ) {
try {
var stat = fs . fstatSync ( stream . nfd ) ;
position += stat . size ;
} catch ( e ) {
throw new FS . ErrnoError ( ERRNO _CODES [ e . code ] ) ;
}
}
}
if ( position < 0 ) {
throw new FS . ErrnoError ( ERRNO _CODES . EINVAL ) ;
}
return position ;
}
}
} ;
var WORKERFS = {
DIR _MODE : 16895 ,
FILE _MODE : 33279 ,
reader : null ,
mount : function ( mount ) {
assert ( ENVIRONMENT _IS _WORKER ) ;
if ( ! WORKERFS . reader ) WORKERFS . reader = new FileReaderSync ( ) ;
var root = WORKERFS . createNode ( null , "/" , WORKERFS . DIR _MODE , 0 ) ;
var createdParents = { } ;
function ensureParent ( path ) {
var parts = path . split ( "/" ) ;
var parent = root ;
for ( var i = 0 ; i < parts . length - 1 ; i ++ ) {
var curr = parts . slice ( 0 , i + 1 ) . join ( "/" ) ;
if ( ! createdParents [ curr ] ) {
createdParents [ curr ] = WORKERFS . createNode ( parent , parts [ i ] , WORKERFS . DIR _MODE , 0 ) ;
}
parent = createdParents [ curr ] ;
}
return parent ;
}
function base ( path ) {
var parts = path . split ( "/" ) ;
return parts [ parts . length - 1 ] ;
}
Array . prototype . forEach . call ( mount . opts [ "files" ] || [ ] , function ( file ) {
WORKERFS . createNode ( ensureParent ( file . name ) , base ( file . name ) , WORKERFS . FILE _MODE , 0 , file , file . lastModifiedDate ) ;
} ) ;
( mount . opts [ "blobs" ] || [ ] ) . forEach ( function ( obj ) {
WORKERFS . createNode ( ensureParent ( obj [ "name" ] ) , base ( obj [ "name" ] ) , WORKERFS . FILE _MODE , 0 , obj [ "data" ] ) ;
} ) ;
( mount . opts [ "packages" ] || [ ] ) . forEach ( function ( pack ) {
pack [ "metadata" ] . files . forEach ( function ( file ) {
var name = file . filename . substr ( 1 ) ;
WORKERFS . createNode ( ensureParent ( name ) , base ( name ) , WORKERFS . FILE _MODE , 0 , pack [ "blob" ] . slice ( file . start , file . end ) ) ;
} ) ;
} ) ;
return root ;
} ,
createNode : function ( parent , name , mode , dev , contents , mtime ) {
var node = FS . createNode ( parent , name , mode ) ;
node . mode = mode ;
node . node _ops = WORKERFS . node _ops ;
node . stream _ops = WORKERFS . stream _ops ;
node . timestamp = ( mtime || new Date ( ) ) . getTime ( ) ;
assert ( WORKERFS . FILE _MODE !== WORKERFS . DIR _MODE ) ;
if ( mode === WORKERFS . FILE _MODE ) {
node . size = contents . size ;
node . contents = contents ;
} else {
node . size = 4096 ;
node . contents = { } ;
}
if ( parent ) {
parent . contents [ name ] = node ;
}
return node ;
} ,
node _ops : {
getattr : function ( node ) {
return {
dev : 1 ,
ino : undefined ,
mode : node . mode ,
nlink : 1 ,
uid : 0 ,
gid : 0 ,
rdev : undefined ,
size : node . size ,
atime : new Date ( node . timestamp ) ,
mtime : new Date ( node . timestamp ) ,
ctime : new Date ( node . timestamp ) ,
blksize : 4096 ,
blocks : Math . ceil ( node . size / 4096 )
} ;
} ,
setattr : function ( node , attr ) {
if ( attr . mode !== undefined ) {
node . mode = attr . mode ;
}
if ( attr . timestamp !== undefined ) {
node . timestamp = attr . timestamp ;
}
} ,
lookup : function ( parent , name ) {
throw new FS . ErrnoError ( ERRNO _CODES . ENOENT ) ;
} ,
mknod : function ( parent , name , mode , dev ) {
throw new FS . ErrnoError ( ERRNO _CODES . EPERM ) ;
} ,
rename : function ( oldNode , newDir , newName ) {
throw new FS . ErrnoError ( ERRNO _CODES . EPERM ) ;
} ,
unlink : function ( parent , name ) {
throw new FS . ErrnoError ( ERRNO _CODES . EPERM ) ;
} ,
rmdir : function ( parent , name ) {
throw new FS . ErrnoError ( ERRNO _CODES . EPERM ) ;
} ,
readdir : function ( node ) {
var entries = [ "." , ".." ] ;
for ( var key in node . contents ) {
if ( ! node . contents . hasOwnProperty ( key ) ) {
continue ;
}
entries . push ( key ) ;
}
return entries ;
} ,
symlink : function ( parent , newName , oldPath ) {
throw new FS . ErrnoError ( ERRNO _CODES . EPERM ) ;
} ,
readlink : function ( node ) {
throw new FS . ErrnoError ( ERRNO _CODES . EPERM ) ;
}
} ,
stream _ops : {
read : function ( stream , buffer , offset , length , position ) {
if ( position >= stream . node . size ) return 0 ;
var chunk = stream . node . contents . slice ( position , position + length ) ;
var ab = WORKERFS . reader . readAsArrayBuffer ( chunk ) ;
buffer . set ( new Uint8Array ( ab ) , offset ) ;
return chunk . size ;
} ,
write : function ( stream , buffer , offset , length , position ) {
throw new FS . ErrnoError ( ERRNO _CODES . EIO ) ;
} ,
llseek : function ( stream , offset , whence ) {
var position = offset ;
if ( whence === 1 ) {
position += stream . position ;
} else if ( whence === 2 ) {
if ( FS . isFile ( stream . node . mode ) ) {
position += stream . node . size ;
}
}
if ( position < 0 ) {
throw new FS . ErrnoError ( ERRNO _CODES . EINVAL ) ;
}
return position ;
}
}
} ;
var FS = {
root : null ,
mounts : [ ] ,
devices : { } ,
streams : [ ] ,
nextInode : 1 ,
nameTable : null ,
currentPath : "/" ,
initialized : false ,
ignorePermissions : true ,
trackingDelegate : { } ,
tracking : {
openFlags : {
READ : 1 ,
WRITE : 2
}
} ,
ErrnoError : null ,
genericErrors : { } ,
filesystems : null ,
syncFSRequests : 0 ,
handleFSError : function ( e ) {
if ( ! ( e instanceof FS . ErrnoError ) ) throw e + " : " + stackTrace ( ) ;
return _ _ _setErrNo ( e . errno ) ;
} ,
lookupPath : function ( path , opts ) {
path = PATH . resolve ( FS . cwd ( ) , path ) ;
opts = opts || { } ;
if ( ! path ) return {
path : "" ,
node : null
} ;
var defaults = {
follow _mount : true ,
recurse _count : 0
} ;
for ( var key in defaults ) {
if ( opts [ key ] === undefined ) {
opts [ key ] = defaults [ key ] ;
}
}
if ( opts . recurse _count > 8 ) {
throw new FS . ErrnoError ( 40 ) ;
}
var parts = PATH . normalizeArray ( path . split ( "/" ) . filter ( function ( p ) {
return ! ! p ;
} ) , false ) ;
var current = FS . root ;
var current _path = "/" ;
for ( var i = 0 ; i < parts . length ; i ++ ) {
var islast = i === parts . length - 1 ;
if ( islast && opts . parent ) {
break ;
}
current = FS . lookupNode ( current , parts [ i ] ) ;
current _path = PATH . join2 ( current _path , parts [ i ] ) ;
if ( FS . isMountpoint ( current ) ) {
if ( ! islast || islast && opts . follow _mount ) {
current = current . mounted . root ;
}
}
if ( ! islast || opts . follow ) {
var count = 0 ;
while ( FS . isLink ( current . mode ) ) {
var link = FS . readlink ( current _path ) ;
current _path = PATH . resolve ( PATH . dirname ( current _path ) , link ) ;
var lookup = FS . lookupPath ( current _path , {
recurse _count : opts . recurse _count
} ) ;
current = lookup . node ;
if ( count ++ > 40 ) {
throw new FS . ErrnoError ( 40 ) ;
}
}
}
}
return {
path : current _path ,
node : current
} ;
} ,
getPath : function ( node ) {
var path ;
while ( true ) {
if ( FS . isRoot ( node ) ) {
var mount = node . mount . mountpoint ;
if ( ! path ) return mount ;
return mount [ mount . length - 1 ] !== "/" ? mount + "/" + path : mount + path ;
}
path = path ? node . name + "/" + path : node . name ;
node = node . parent ;
}
} ,
hashName : function ( parentid , name ) {
var hash = 0 ;
for ( var i = 0 ; i < name . length ; i ++ ) {
hash = ( hash << 5 ) - hash + name . charCodeAt ( i ) | 0 ;
}
return ( parentid + hash >>> 0 ) % FS . nameTable . length ;
} ,
hashAddNode : function ( node ) {
var hash = FS . hashName ( node . parent . id , node . name ) ;
node . name _next = FS . nameTable [ hash ] ;
FS . nameTable [ hash ] = node ;
} ,
hashRemoveNode : function ( node ) {
var hash = FS . hashName ( node . parent . id , node . name ) ;
if ( FS . nameTable [ hash ] === node ) {
FS . nameTable [ hash ] = node . name _next ;
} else {
var current = FS . nameTable [ hash ] ;
while ( current ) {
if ( current . name _next === node ) {
current . name _next = node . name _next ;
break ;
}
current = current . name _next ;
}
}
} ,
lookupNode : function ( parent , name ) {
var err = FS . mayLookup ( parent ) ;
if ( err ) {
throw new FS . ErrnoError ( err , parent ) ;
}
var hash = FS . hashName ( parent . id , name ) ;
for ( var node = FS . nameTable [ hash ] ; node ; node = node . name _next ) {
var nodeName = node . name ;
if ( node . parent . id === parent . id && nodeName === name ) {
return node ;
}
}
return FS . lookup ( parent , name ) ;
} ,
createNode : function ( parent , name , mode , rdev ) {
if ( ! FS . FSNode ) {
FS . FSNode = function ( parent , name , mode , rdev ) {
if ( ! parent ) {
parent = this ;
}
this . parent = parent ;
this . mount = parent . mount ;
this . mounted = null ;
this . id = FS . nextInode ++ ;
this . name = name ;
this . mode = mode ;
this . node _ops = { } ;
this . stream _ops = { } ;
this . rdev = rdev ;
} ;
FS . FSNode . prototype = { } ;
var readMode = 292 | 73 ;
var writeMode = 146 ;
Object . defineProperties ( FS . FSNode . prototype , {
read : {
get : function ( ) {
return ( this . mode & readMode ) === readMode ;
} ,
set : function ( val ) {
val ? this . mode |= readMode : this . mode &= ~ readMode ;
}
} ,
write : {
get : function ( ) {
return ( this . mode & writeMode ) === writeMode ;
} ,
set : function ( val ) {
val ? this . mode |= writeMode : this . mode &= ~ writeMode ;
}
} ,
isFolder : {
get : function ( ) {
return FS . isDir ( this . mode ) ;
}
} ,
isDevice : {
get : function ( ) {
return FS . isChrdev ( this . mode ) ;
}
}
} ) ;
}
var node = new FS . FSNode ( parent , name , mode , rdev ) ;
FS . hashAddNode ( node ) ;
return node ;
} ,
destroyNode : function ( node ) {
FS . hashRemoveNode ( node ) ;
} ,
isRoot : function ( node ) {
return node === node . parent ;
} ,
isMountpoint : function ( node ) {
return ! ! node . mounted ;
} ,
isFile : function ( mode ) {
return ( mode & 61440 ) === 32768 ;
} ,
isDir : function ( mode ) {
return ( mode & 61440 ) === 16384 ;
} ,
isLink : function ( mode ) {
return ( mode & 61440 ) === 40960 ;
} ,
isChrdev : function ( mode ) {
return ( mode & 61440 ) === 8192 ;
} ,
isBlkdev : function ( mode ) {
return ( mode & 61440 ) === 24576 ;
} ,
isFIFO : function ( mode ) {
return ( mode & 61440 ) === 4096 ;
} ,
isSocket : function ( mode ) {
return ( mode & 49152 ) === 49152 ;
} ,
flagModes : {
"r" : 0 ,
"rs" : 1052672 ,
"r+" : 2 ,
"w" : 577 ,
"wx" : 705 ,
"xw" : 705 ,
"w+" : 578 ,
"wx+" : 706 ,
"xw+" : 706 ,
"a" : 1089 ,
"ax" : 1217 ,
"xa" : 1217 ,
"a+" : 1090 ,
"ax+" : 1218 ,
"xa+" : 1218
} ,
modeStringToFlags : function ( str ) {
var flags = FS . flagModes [ str ] ;
if ( typeof flags === "undefined" ) {
throw new Error ( "Unknown file open mode: " + str ) ;
}
return flags ;
} ,
flagsToPermissionString : function ( flag ) {
var perms = [ "r" , "w" , "rw" ] [ flag & 3 ] ;
if ( flag & 512 ) {
perms += "w" ;
}
return perms ;
} ,
nodePermissions : function ( node , perms ) {
if ( FS . ignorePermissions ) {
return 0 ;
}
if ( perms . indexOf ( "r" ) !== - 1 && ! ( node . mode & 292 ) ) {
return 13 ;
} else if ( perms . indexOf ( "w" ) !== - 1 && ! ( node . mode & 146 ) ) {
return 13 ;
} else if ( perms . indexOf ( "x" ) !== - 1 && ! ( node . mode & 73 ) ) {
return 13 ;
}
return 0 ;
} ,
mayLookup : function ( dir ) {
var err = FS . nodePermissions ( dir , "x" ) ;
if ( err ) return err ;
if ( ! dir . node _ops . lookup ) return 13 ;
return 0 ;
} ,
mayCreate : function ( dir , name ) {
try {
var node = FS . lookupNode ( dir , name ) ;
return 17 ;
} catch ( e ) { }
return FS . nodePermissions ( dir , "wx" ) ;
} ,
mayDelete : function ( dir , name , isdir ) {
var node ;
try {
node = FS . lookupNode ( dir , name ) ;
} catch ( e ) {
return e . errno ;
}
var err = FS . nodePermissions ( dir , "wx" ) ;
if ( err ) {
return err ;
}
if ( isdir ) {
if ( ! FS . isDir ( node . mode ) ) {
return 20 ;
}
if ( FS . isRoot ( node ) || FS . getPath ( node ) === FS . cwd ( ) ) {
return 16 ;
}
} else {
if ( FS . isDir ( node . mode ) ) {
return 21 ;
}
}
return 0 ;
} ,
mayOpen : function ( node , flags ) {
if ( ! node ) {
return 2 ;
}
if ( FS . isLink ( node . mode ) ) {
return 40 ;
} else if ( FS . isDir ( node . mode ) ) {
if ( FS . flagsToPermissionString ( flags ) !== "r" || flags & 512 ) {
return 21 ;
}
}
return FS . nodePermissions ( node , FS . flagsToPermissionString ( flags ) ) ;
} ,
MAX _OPEN _FDS : 4096 ,
nextfd : function ( fd _start , fd _end ) {
fd _start = fd _start || 0 ;
fd _end = fd _end || FS . MAX _OPEN _FDS ;
for ( var fd = fd _start ; fd <= fd _end ; fd ++ ) {
if ( ! FS . streams [ fd ] ) {
return fd ;
}
}
throw new FS . ErrnoError ( 24 ) ;
} ,
getStream : function ( fd ) {
return FS . streams [ fd ] ;
} ,
createStream : function ( stream , fd _start , fd _end ) {
if ( ! FS . FSStream ) {
FS . FSStream = function ( ) { } ;
FS . FSStream . prototype = { } ;
Object . defineProperties ( FS . FSStream . prototype , {
object : {
get : function ( ) {
return this . node ;
} ,
set : function ( val ) {
this . node = val ;
}
} ,
isRead : {
get : function ( ) {
return ( this . flags & 2097155 ) !== 1 ;
}
} ,
isWrite : {
get : function ( ) {
return ( this . flags & 2097155 ) !== 0 ;
}
} ,
isAppend : {
get : function ( ) {
return this . flags & 1024 ;
}
}
} ) ;
}
var newStream = new FS . FSStream ( ) ;
for ( var p in stream ) {
newStream [ p ] = stream [ p ] ;
}
stream = newStream ;
var fd = FS . nextfd ( fd _start , fd _end ) ;
stream . fd = fd ;
FS . streams [ fd ] = stream ;
return stream ;
} ,
closeStream : function ( fd ) {
FS . streams [ fd ] = null ;
} ,
chrdev _stream _ops : {
open : function ( stream ) {
var device = FS . getDevice ( stream . node . rdev ) ;
stream . stream _ops = device . stream _ops ;
if ( stream . stream _ops . open ) {
stream . stream _ops . open ( stream ) ;
}
} ,
llseek : function ( ) {
throw new FS . ErrnoError ( 29 ) ;
}
} ,
major : function ( dev ) {
return dev >> 8 ;
} ,
minor : function ( dev ) {
return dev & 255 ;
} ,
makedev : function ( ma , mi ) {
return ma << 8 | mi ;
} ,
registerDevice : function ( dev , ops ) {
FS . devices [ dev ] = {
stream _ops : ops
} ;
} ,
getDevice : function ( dev ) {
return FS . devices [ dev ] ;
} ,
getMounts : function ( mount ) {
var mounts = [ ] ;
var check = [ mount ] ;
while ( check . length ) {
var m = check . pop ( ) ;
mounts . push ( m ) ;
check . push . apply ( check , m . mounts ) ;
}
return mounts ;
} ,
syncfs : function ( populate , callback ) {
if ( typeof populate === "function" ) {
callback = populate ;
populate = false ;
}
FS . syncFSRequests ++ ;
if ( FS . syncFSRequests > 1 ) {
console . log ( "warning: " + FS . syncFSRequests + " FS.syncfs operations in flight at once, probably just doing extra work" ) ;
}
var mounts = FS . getMounts ( FS . root . mount ) ;
var completed = 0 ;
function doCallback ( err ) {
assert ( FS . syncFSRequests > 0 ) ;
FS . syncFSRequests -- ;
return callback ( err ) ;
}
function done ( err ) {
if ( err ) {
if ( ! done . errored ) {
done . errored = true ;
return doCallback ( err ) ;
}
return ;
}
if ( ++ completed >= mounts . length ) {
doCallback ( null ) ;
}
}
mounts . forEach ( function ( mount ) {
if ( ! mount . type . syncfs ) {
return done ( null ) ;
}
mount . type . syncfs ( mount , populate , done ) ;
} ) ;
} ,
mount : function ( type , opts , mountpoint ) {
var root = mountpoint === "/" ;
var pseudo = ! mountpoint ;
var node ;
if ( root && FS . root ) {
throw new FS . ErrnoError ( 16 ) ;
} else if ( ! root && ! pseudo ) {
var lookup = FS . lookupPath ( mountpoint , {
follow _mount : false
} ) ;
mountpoint = lookup . path ;
node = lookup . node ;
if ( FS . isMountpoint ( node ) ) {
throw new FS . ErrnoError ( 16 ) ;
}
if ( ! FS . isDir ( node . mode ) ) {
throw new FS . ErrnoError ( 20 ) ;
}
}
var mount = {
type : type ,
opts : opts ,
mountpoint : mountpoint ,
mounts : [ ]
} ;
var mountRoot = type . mount ( mount ) ;
mountRoot . mount = mount ;
mount . root = mountRoot ;
if ( root ) {
FS . root = mountRoot ;
} else if ( node ) {
node . mounted = mount ;
if ( node . mount ) {
node . mount . mounts . push ( mount ) ;
}
}
return mountRoot ;
} ,
unmount : function ( mountpoint ) {
var lookup = FS . lookupPath ( mountpoint , {
follow _mount : false
} ) ;
if ( ! FS . isMountpoint ( lookup . node ) ) {
throw new FS . ErrnoError ( 22 ) ;
}
var node = lookup . node ;
var mount = node . mounted ;
var mounts = FS . getMounts ( mount ) ;
Object . keys ( FS . nameTable ) . forEach ( function ( hash ) {
var current = FS . nameTable [ hash ] ;
while ( current ) {
var next = current . name _next ;
if ( mounts . indexOf ( current . mount ) !== - 1 ) {
FS . destroyNode ( current ) ;
}
current = next ;
}
} ) ;
node . mounted = null ;
var idx = node . mount . mounts . indexOf ( mount ) ;
assert ( idx !== - 1 ) ;
node . mount . mounts . splice ( idx , 1 ) ;
} ,
lookup : function ( parent , name ) {
return parent . node _ops . lookup ( parent , name ) ;
} ,
mknod : function ( path , mode , dev ) {
var lookup = FS . lookupPath ( path , {
parent : true
} ) ;
var parent = lookup . node ;
var name = PATH . basename ( path ) ;
if ( ! name || name === "." || name === ".." ) {
throw new FS . ErrnoError ( 22 ) ;
}
var err = FS . mayCreate ( parent , name ) ;
if ( err ) {
throw new FS . ErrnoError ( err ) ;
}
if ( ! parent . node _ops . mknod ) {
throw new FS . ErrnoError ( 1 ) ;
}
return parent . node _ops . mknod ( parent , name , mode , dev ) ;
} ,
create : function ( path , mode ) {
mode = mode !== undefined ? mode : 438 ;
mode &= 4095 ;
mode |= 32768 ;
return FS . mknod ( path , mode , 0 ) ;
} ,
mkdir : function ( path , mode ) {
mode = mode !== undefined ? mode : 511 ;
mode &= 511 | 512 ;
mode |= 16384 ;
return FS . mknod ( path , mode , 0 ) ;
} ,
mkdirTree : function ( path , mode ) {
var dirs = path . split ( "/" ) ;
var d = "" ;
for ( var i = 0 ; i < dirs . length ; ++ i ) {
if ( ! dirs [ i ] ) continue ;
d += "/" + dirs [ i ] ;
try {
FS . mkdir ( d , mode ) ;
} catch ( e ) {
if ( e . errno != 17 ) throw e ;
}
}
} ,
mkdev : function ( path , mode , dev ) {
if ( typeof dev === "undefined" ) {
dev = mode ;
mode = 438 ;
}
mode |= 8192 ;
return FS . mknod ( path , mode , dev ) ;
} ,
symlink : function ( oldpath , newpath ) {
if ( ! PATH . resolve ( oldpath ) ) {
throw new FS . ErrnoError ( 2 ) ;
}
var lookup = FS . lookupPath ( newpath , {
parent : true
} ) ;
var parent = lookup . node ;
if ( ! parent ) {
throw new FS . ErrnoError ( 2 ) ;
}
var newname = PATH . basename ( newpath ) ;
var err = FS . mayCreate ( parent , newname ) ;
if ( err ) {
throw new FS . ErrnoError ( err ) ;
}
if ( ! parent . node _ops . symlink ) {
throw new FS . ErrnoError ( 1 ) ;
}
return parent . node _ops . symlink ( parent , newname , oldpath ) ;
} ,
rename : function ( old _path , new _path ) {
var old _dirname = PATH . dirname ( old _path ) ;
var new _dirname = PATH . dirname ( new _path ) ;
var old _name = PATH . basename ( old _path ) ;
var new _name = PATH . basename ( new _path ) ;
var lookup , old _dir , new _dir ;
try {
lookup = FS . lookupPath ( old _path , {
parent : true
} ) ;
old _dir = lookup . node ;
lookup = FS . lookupPath ( new _path , {
parent : true
} ) ;
new _dir = lookup . node ;
} catch ( e ) {
throw new FS . ErrnoError ( 16 ) ;
}
if ( ! old _dir || ! new _dir ) throw new FS . ErrnoError ( 2 ) ;
if ( old _dir . mount !== new _dir . mount ) {
throw new FS . ErrnoError ( 18 ) ;
}
var old _node = FS . lookupNode ( old _dir , old _name ) ;
var relative = PATH . relative ( old _path , new _dirname ) ;
if ( relative . charAt ( 0 ) !== "." ) {
throw new FS . ErrnoError ( 22 ) ;
}
relative = PATH . relative ( new _path , old _dirname ) ;
if ( relative . charAt ( 0 ) !== "." ) {
throw new FS . ErrnoError ( 39 ) ;
}
var new _node ;
try {
new _node = FS . lookupNode ( new _dir , new _name ) ;
} catch ( e ) { }
if ( old _node === new _node ) {
return ;
}
var isdir = FS . isDir ( old _node . mode ) ;
var err = FS . mayDelete ( old _dir , old _name , isdir ) ;
if ( err ) {
throw new FS . ErrnoError ( err ) ;
}
err = new _node ? FS . mayDelete ( new _dir , new _name , isdir ) : FS . mayCreate ( new _dir , new _name ) ;
if ( err ) {
throw new FS . ErrnoError ( err ) ;
}
if ( ! old _dir . node _ops . rename ) {
throw new FS . ErrnoError ( 1 ) ;
}
if ( FS . isMountpoint ( old _node ) || new _node && FS . isMountpoint ( new _node ) ) {
throw new FS . ErrnoError ( 16 ) ;
}
if ( new _dir !== old _dir ) {
err = FS . nodePermissions ( old _dir , "w" ) ;
if ( err ) {
throw new FS . ErrnoError ( err ) ;
}
}
try {
if ( FS . trackingDelegate [ "willMovePath" ] ) {
FS . trackingDelegate [ "willMovePath" ] ( old _path , new _path ) ;
}
} catch ( e ) {
console . log ( "FS.trackingDelegate['willMovePath']('" + old _path + "', '" + new _path + "') threw an exception: " + e . message ) ;
}
FS . hashRemoveNode ( old _node ) ;
try {
old _dir . node _ops . rename ( old _node , new _dir , new _name ) ;
} catch ( e ) {
throw e ;
} finally {
FS . hashAddNode ( old _node ) ;
}
try {
if ( FS . trackingDelegate [ "onMovePath" ] ) FS . trackingDelegate [ "onMovePath" ] ( old _path , new _path ) ;
} catch ( e ) {
console . log ( "FS.trackingDelegate['onMovePath']('" + old _path + "', '" + new _path + "') threw an exception: " + e . message ) ;
}
} ,
rmdir : function ( path ) {
var lookup = FS . lookupPath ( path , {
parent : true
} ) ;
var parent = lookup . node ;
var name = PATH . basename ( path ) ;
var node = FS . lookupNode ( parent , name ) ;
var err = FS . mayDelete ( parent , name , true ) ;
if ( err ) {
throw new FS . ErrnoError ( err ) ;
}
if ( ! parent . node _ops . rmdir ) {
throw new FS . ErrnoError ( 1 ) ;
}
if ( FS . isMountpoint ( node ) ) {
throw new FS . ErrnoError ( 16 ) ;
}
try {
if ( FS . trackingDelegate [ "willDeletePath" ] ) {
FS . trackingDelegate [ "willDeletePath" ] ( path ) ;
}
} catch ( e ) {
console . log ( "FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e . message ) ;
}
parent . node _ops . rmdir ( parent , name ) ;
FS . destroyNode ( node ) ;
try {
if ( FS . trackingDelegate [ "onDeletePath" ] ) FS . trackingDelegate [ "onDeletePath" ] ( path ) ;
} catch ( e ) {
console . log ( "FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e . message ) ;
}
} ,
readdir : function ( path ) {
var lookup = FS . lookupPath ( path , {
follow : true
} ) ;
var node = lookup . node ;
if ( ! node . node _ops . readdir ) {
throw new FS . ErrnoError ( 20 ) ;
}
return node . node _ops . readdir ( node ) ;
} ,
unlink : function ( path ) {
var lookup = FS . lookupPath ( path , {
parent : true
} ) ;
var parent = lookup . node ;
var name = PATH . basename ( path ) ;
var node = FS . lookupNode ( parent , name ) ;
var err = FS . mayDelete ( parent , name , false ) ;
if ( err ) {
throw new FS . ErrnoError ( err ) ;
}
if ( ! parent . node _ops . unlink ) {
throw new FS . ErrnoError ( 1 ) ;
}
if ( FS . isMountpoint ( node ) ) {
throw new FS . ErrnoError ( 16 ) ;
}
try {
if ( FS . trackingDelegate [ "willDeletePath" ] ) {
FS . trackingDelegate [ "willDeletePath" ] ( path ) ;
}
} catch ( e ) {
console . log ( "FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e . message ) ;
}
parent . node _ops . unlink ( parent , name ) ;
FS . destroyNode ( node ) ;
try {
if ( FS . trackingDelegate [ "onDeletePath" ] ) FS . trackingDelegate [ "onDeletePath" ] ( path ) ;
} catch ( e ) {
console . log ( "FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e . message ) ;
}
} ,
readlink : function ( path ) {
var lookup = FS . lookupPath ( path ) ;
var link = lookup . node ;
if ( ! link ) {
throw new FS . ErrnoError ( 2 ) ;
}
if ( ! link . node _ops . readlink ) {
throw new FS . ErrnoError ( 22 ) ;
}
return PATH . resolve ( FS . getPath ( link . parent ) , link . node _ops . readlink ( link ) ) ;
} ,
stat : function ( path , dontFollow ) {
var lookup = FS . lookupPath ( path , {
follow : ! dontFollow
} ) ;
var node = lookup . node ;
if ( ! node ) {
throw new FS . ErrnoError ( 2 ) ;
}
if ( ! node . node _ops . getattr ) {
throw new FS . ErrnoError ( 1 ) ;
}
return node . node _ops . getattr ( node ) ;
} ,
lstat : function ( path ) {
return FS . stat ( path , true ) ;
} ,
chmod : function ( path , mode , dontFollow ) {
var node ;
if ( typeof path === "string" ) {
var lookup = FS . lookupPath ( path , {
follow : ! dontFollow
} ) ;
node = lookup . node ;
} else {
node = path ;
}
if ( ! node . node _ops . setattr ) {
throw new FS . ErrnoError ( 1 ) ;
}
node . node _ops . setattr ( node , {
mode : mode & 4095 | node . mode & ~ 4095 ,
timestamp : Date . now ( )
} ) ;
} ,
lchmod : function ( path , mode ) {
FS . chmod ( path , mode , true ) ;
} ,
fchmod : function ( fd , mode ) {
var stream = FS . getStream ( fd ) ;
if ( ! stream ) {
throw new FS . ErrnoError ( 9 ) ;
}
FS . chmod ( stream . node , mode ) ;
} ,
chown : function ( path , uid , gid , dontFollow ) {
var node ;
if ( typeof path === "string" ) {
var lookup = FS . lookupPath ( path , {
follow : ! dontFollow
} ) ;
node = lookup . node ;
} else {
node = path ;
}
if ( ! node . node _ops . setattr ) {
throw new FS . ErrnoError ( 1 ) ;
}
node . node _ops . setattr ( node , {
timestamp : Date . now ( )
} ) ;
} ,
lchown : function ( path , uid , gid ) {
FS . chown ( path , uid , gid , true ) ;
} ,
fchown : function ( fd , uid , gid ) {
var stream = FS . getStream ( fd ) ;
if ( ! stream ) {
throw new FS . ErrnoError ( 9 ) ;
}
FS . chown ( stream . node , uid , gid ) ;
} ,
truncate : function ( path , len ) {
if ( len < 0 ) {
throw new FS . ErrnoError ( 22 ) ;
}
var node ;
if ( typeof path === "string" ) {
var lookup = FS . lookupPath ( path , {
follow : true
} ) ;
node = lookup . node ;
} else {
node = path ;
}
if ( ! node . node _ops . setattr ) {
throw new FS . ErrnoError ( 1 ) ;
}
if ( FS . isDir ( node . mode ) ) {
throw new FS . ErrnoError ( 21 ) ;
}
if ( ! FS . isFile ( node . mode ) ) {
throw new FS . ErrnoError ( 22 ) ;
}
var err = FS . nodePermissions ( node , "w" ) ;
if ( err ) {
throw new FS . ErrnoError ( err ) ;
}
node . node _ops . setattr ( node , {
size : len ,
timestamp : Date . now ( )
} ) ;
} ,
ftruncate : function ( fd , len ) {
var stream = FS . getStream ( fd ) ;
if ( ! stream ) {
throw new FS . ErrnoError ( 9 ) ;
}
if ( ( stream . flags & 2097155 ) === 0 ) {
throw new FS . ErrnoError ( 22 ) ;
}
FS . truncate ( stream . node , len ) ;
} ,
utime : function ( path , atime , mtime ) {
var lookup = FS . lookupPath ( path , {
follow : true
} ) ;
var node = lookup . node ;
node . node _ops . setattr ( node , {
timestamp : Math . max ( atime , mtime )
} ) ;
} ,
open : function ( path , flags , mode , fd _start , fd _end ) {
if ( path === "" ) {
throw new FS . ErrnoError ( 2 ) ;
}
flags = typeof flags === "string" ? FS . modeStringToFlags ( flags ) : flags ;
mode = typeof mode === "undefined" ? 438 : mode ;
if ( flags & 64 ) {
mode = mode & 4095 | 32768 ;
} else {
mode = 0 ;
}
var node ;
if ( typeof path === "object" ) {
node = path ;
} else {
path = PATH . normalize ( path ) ;
try {
var lookup = FS . lookupPath ( path , {
follow : ! ( flags & 131072 )
} ) ;
node = lookup . node ;
} catch ( e ) { }
}
var created = false ;
if ( flags & 64 ) {
if ( node ) {
if ( flags & 128 ) {
throw new FS . ErrnoError ( 17 ) ;
}
} else {
node = FS . mknod ( path , mode , 0 ) ;
created = true ;
}
}
if ( ! node ) {
throw new FS . ErrnoError ( 2 ) ;
}
if ( FS . isChrdev ( node . mode ) ) {
flags &= ~ 512 ;
}
if ( flags & 65536 && ! FS . isDir ( node . mode ) ) {
throw new FS . ErrnoError ( 20 ) ;
}
if ( ! created ) {
var err = FS . mayOpen ( node , flags ) ;
if ( err ) {
throw new FS . ErrnoError ( err ) ;
}
}
if ( flags & 512 ) {
FS . truncate ( node , 0 ) ;
}
flags &= ~ ( 128 | 512 ) ;
var stream = FS . createStream ( {
node : node ,
path : FS . getPath ( node ) ,
flags : flags ,
seekable : true ,
position : 0 ,
stream _ops : node . stream _ops ,
ungotten : [ ] ,
error : false
} , fd _start , fd _end ) ;
if ( stream . stream _ops . open ) {
stream . stream _ops . open ( stream ) ;
}
if ( Module [ "logReadFiles" ] && ! ( flags & 1 ) ) {
if ( ! FS . readFiles ) FS . readFiles = { } ;
if ( ! ( path in FS . readFiles ) ) {
FS . readFiles [ path ] = 1 ;
console . log ( "FS.trackingDelegate error on read file: " + path ) ;
}
}
try {
if ( FS . trackingDelegate [ "onOpenFile" ] ) {
var trackingFlags = 0 ;
if ( ( flags & 2097155 ) !== 1 ) {
trackingFlags |= FS . tracking . openFlags . READ ;
}
if ( ( flags & 2097155 ) !== 0 ) {
trackingFlags |= FS . tracking . openFlags . WRITE ;
}
FS . trackingDelegate [ "onOpenFile" ] ( path , trackingFlags ) ;
}
} catch ( e ) {
console . log ( "FS.trackingDelegate['onOpenFile']('" + path + "', flags) threw an exception: " + e . message ) ;
}
return stream ;
} ,
close : function ( stream ) {
if ( FS . isClosed ( stream ) ) {
throw new FS . ErrnoError ( 9 ) ;
}
if ( stream . getdents ) stream . getdents = null ;
try {
if ( stream . stream _ops . close ) {
stream . stream _ops . close ( stream ) ;
}
} catch ( e ) {
throw e ;
} finally {
FS . closeStream ( stream . fd ) ;
}
stream . fd = null ;
} ,
isClosed : function ( stream ) {
return stream . fd === null ;
} ,
llseek : function ( stream , offset , whence ) {
if ( FS . isClosed ( stream ) ) {
throw new FS . ErrnoError ( 9 ) ;
}
if ( ! stream . seekable || ! stream . stream _ops . llseek ) {
throw new FS . ErrnoError ( 29 ) ;
}
if ( whence != 0 && whence != 1 && whence != 2 ) {
throw new FS . ErrnoError ( 22 ) ;
}
stream . position = stream . stream _ops . llseek ( stream , offset , whence ) ;
stream . ungotten = [ ] ;
return stream . position ;
} ,
read : function ( stream , buffer , offset , length , position ) {
if ( length < 0 || position < 0 ) {
throw new FS . ErrnoError ( 22 ) ;
}
if ( FS . isClosed ( stream ) ) {
throw new FS . ErrnoError ( 9 ) ;
}
if ( ( stream . flags & 2097155 ) === 1 ) {
throw new FS . ErrnoError ( 9 ) ;
}
if ( FS . isDir ( stream . node . mode ) ) {
throw new FS . ErrnoError ( 21 ) ;
}
if ( ! stream . stream _ops . read ) {
throw new FS . ErrnoError ( 22 ) ;
}
var seeking = typeof position !== "undefined" ;
if ( ! seeking ) {
position = stream . position ;
} else if ( ! stream . seekable ) {
throw new FS . ErrnoError ( 29 ) ;
}
var bytesRead = stream . stream _ops . read ( stream , buffer , offset , length , position ) ;
if ( ! seeking ) stream . position += bytesRead ;
return bytesRead ;
} ,
write : function ( stream , buffer , offset , length , position , canOwn ) {
if ( length < 0 || position < 0 ) {
throw new FS . ErrnoError ( 22 ) ;
}
if ( FS . isClosed ( stream ) ) {
throw new FS . ErrnoError ( 9 ) ;
}
if ( ( stream . flags & 2097155 ) === 0 ) {
throw new FS . ErrnoError ( 9 ) ;
}
if ( FS . isDir ( stream . node . mode ) ) {
throw new FS . ErrnoError ( 21 ) ;
}
if ( ! stream . stream _ops . write ) {
throw new FS . ErrnoError ( 22 ) ;
}
if ( stream . flags & 1024 ) {
FS . llseek ( stream , 0 , 2 ) ;
}
var seeking = typeof position !== "undefined" ;
if ( ! seeking ) {
position = stream . position ;
} else if ( ! stream . seekable ) {
throw new FS . ErrnoError ( 29 ) ;
}
var bytesWritten = stream . stream _ops . write ( stream , buffer , offset , length , position , canOwn ) ;
if ( ! seeking ) stream . position += bytesWritten ;
try {
if ( stream . path && FS . trackingDelegate [ "onWriteToFile" ] ) FS . trackingDelegate [ "onWriteToFile" ] ( stream . path ) ;
} catch ( e ) {
console . log ( "FS.trackingDelegate['onWriteToFile']('" + stream . path + "') threw an exception: " + e . message ) ;
}
return bytesWritten ;
} ,
allocate : function ( stream , offset , length ) {
if ( FS . isClosed ( stream ) ) {
throw new FS . ErrnoError ( 9 ) ;
}
if ( offset < 0 || length <= 0 ) {
throw new FS . ErrnoError ( 22 ) ;
}
if ( ( stream . flags & 2097155 ) === 0 ) {
throw new FS . ErrnoError ( 9 ) ;
}
if ( ! FS . isFile ( stream . node . mode ) && ! FS . isDir ( stream . node . mode ) ) {
throw new FS . ErrnoError ( 19 ) ;
}
if ( ! stream . stream _ops . allocate ) {
throw new FS . ErrnoError ( 95 ) ;
}
stream . stream _ops . allocate ( stream , offset , length ) ;
} ,
mmap : function ( stream , buffer , offset , length , position , prot , flags ) {
if ( ( stream . flags & 2097155 ) === 1 ) {
throw new FS . ErrnoError ( 13 ) ;
}
if ( ! stream . stream _ops . mmap ) {
throw new FS . ErrnoError ( 19 ) ;
}
return stream . stream _ops . mmap ( stream , buffer , offset , length , position , prot , flags ) ;
} ,
msync : function ( stream , buffer , offset , length , mmapFlags ) {
if ( ! stream || ! stream . stream _ops . msync ) {
return 0 ;
}
return stream . stream _ops . msync ( stream , buffer , offset , length , mmapFlags ) ;
} ,
munmap : function ( stream ) {
return 0 ;
} ,
ioctl : function ( stream , cmd , arg ) {
if ( ! stream . stream _ops . ioctl ) {
throw new FS . ErrnoError ( 25 ) ;
}
return stream . stream _ops . ioctl ( stream , cmd , arg ) ;
} ,
readFile : function ( path , opts ) {
opts = opts || { } ;
opts . flags = opts . flags || "r" ;
opts . encoding = opts . encoding || "binary" ;
if ( opts . encoding !== "utf8" && opts . encoding !== "binary" ) {
throw new Error ( 'Invalid encoding type "' + opts . encoding + '"' ) ;
}
var ret ;
var stream = FS . open ( path , opts . flags ) ;
var stat = FS . stat ( path ) ;
var length = stat . size ;
var buf = new Uint8Array ( length ) ;
FS . read ( stream , buf , 0 , length , 0 ) ;
if ( opts . encoding === "utf8" ) {
ret = UTF8ArrayToString ( buf , 0 ) ;
} else if ( opts . encoding === "binary" ) {
ret = buf ;
}
FS . close ( stream ) ;
return ret ;
} ,
writeFile : function ( path , data , opts ) {
opts = opts || { } ;
opts . flags = opts . flags || "w" ;
var stream = FS . open ( path , opts . flags , opts . mode ) ;
if ( typeof data === "string" ) {
var buf = new Uint8Array ( lengthBytesUTF8 ( data ) + 1 ) ;
var actualNumBytes = stringToUTF8Array ( data , buf , 0 , buf . length ) ;
FS . write ( stream , buf , 0 , actualNumBytes , undefined , opts . canOwn ) ;
} else if ( ArrayBuffer . isView ( data ) ) {
FS . write ( stream , data , 0 , data . byteLength , undefined , opts . canOwn ) ;
} else {
throw new Error ( "Unsupported data type" ) ;
}
FS . close ( stream ) ;
} ,
cwd : function ( ) {
return FS . currentPath ;
} ,
chdir : function ( path ) {
var lookup = FS . lookupPath ( path , {
follow : true
} ) ;
if ( lookup . node === null ) {
throw new FS . ErrnoError ( 2 ) ;
}
if ( ! FS . isDir ( lookup . node . mode ) ) {
throw new FS . ErrnoError ( 20 ) ;
}
var err = FS . nodePermissions ( lookup . node , "x" ) ;
if ( err ) {
throw new FS . ErrnoError ( err ) ;
}
FS . currentPath = lookup . path ;
} ,
createDefaultDirectories : function ( ) {
FS . mkdir ( "/tmp" ) ;
FS . mkdir ( "/home" ) ;
FS . mkdir ( "/home/web_user" ) ;
} ,
createDefaultDevices : function ( ) {
FS . mkdir ( "/dev" ) ;
FS . registerDevice ( FS . makedev ( 1 , 3 ) , {
read : function ( ) {
return 0 ;
} ,
write : function ( stream , buffer , offset , length , pos ) {
return length ;
}
} ) ;
FS . mkdev ( "/dev/null" , FS . makedev ( 1 , 3 ) ) ;
TTY . register ( FS . makedev ( 5 , 0 ) , TTY . default _tty _ops ) ;
TTY . register ( FS . makedev ( 6 , 0 ) , TTY . default _tty1 _ops ) ;
FS . mkdev ( "/dev/tty" , FS . makedev ( 5 , 0 ) ) ;
FS . mkdev ( "/dev/tty1" , FS . makedev ( 6 , 0 ) ) ;
var random _device ;
if ( typeof crypto === "object" && typeof crypto [ "getRandomValues" ] === "function" ) {
var randomBuffer = new Uint8Array ( 1 ) ;
random _device = function ( ) {
crypto . getRandomValues ( randomBuffer ) ;
return randomBuffer [ 0 ] ;
} ;
} else if ( ENVIRONMENT _IS _NODE ) {
try {
var crypto _module = require ( "crypto" ) ;
random _device = function ( ) {
return crypto _module [ "randomBytes" ] ( 1 ) [ 0 ] ;
} ;
} catch ( e ) {
random _device = function ( ) {
return Math . random ( ) * 256 | 0 ;
} ;
}
} else {
random _device = function ( ) {
abort ( "random_device" ) ;
} ;
}
FS . createDevice ( "/dev" , "random" , random _device ) ;
FS . createDevice ( "/dev" , "urandom" , random _device ) ;
FS . mkdir ( "/dev/shm" ) ;
FS . mkdir ( "/dev/shm/tmp" ) ;
} ,
createSpecialDirectories : function ( ) {
FS . mkdir ( "/proc" ) ;
FS . mkdir ( "/proc/self" ) ;
FS . mkdir ( "/proc/self/fd" ) ;
FS . mount ( {
mount : function ( ) {
var node = FS . createNode ( "/proc/self" , "fd" , 16384 | 511 , 73 ) ;
node . node _ops = {
lookup : function ( parent , name ) {
var fd = + name ;
var stream = FS . getStream ( fd ) ;
if ( ! stream ) throw new FS . ErrnoError ( 9 ) ;
var ret = {
parent : null ,
mount : {
mountpoint : "fake"
} ,
node _ops : {
readlink : function ( ) {
return stream . path ;
}
}
} ;
ret . parent = ret ;
return ret ;
}
} ;
return node ;
}
} , { } , "/proc/self/fd" ) ;
} ,
createStandardStreams : function ( ) {
if ( Module [ "stdin" ] ) {
FS . createDevice ( "/dev" , "stdin" , Module [ "stdin" ] ) ;
} else {
FS . symlink ( "/dev/tty" , "/dev/stdin" ) ;
}
if ( Module [ "stdout" ] ) {
FS . createDevice ( "/dev" , "stdout" , null , Module [ "stdout" ] ) ;
} else {
FS . symlink ( "/dev/tty" , "/dev/stdout" ) ;
}
if ( Module [ "stderr" ] ) {
FS . createDevice ( "/dev" , "stderr" , null , Module [ "stderr" ] ) ;
} else {
FS . symlink ( "/dev/tty1" , "/dev/stderr" ) ;
}
var stdin = FS . open ( "/dev/stdin" , "r" ) ;
assert ( stdin . fd === 0 , "invalid handle for stdin (" + stdin . fd + ")" ) ;
var stdout = FS . open ( "/dev/stdout" , "w" ) ;
assert ( stdout . fd === 1 , "invalid handle for stdout (" + stdout . fd + ")" ) ;
var stderr = FS . open ( "/dev/stderr" , "w" ) ;
assert ( stderr . fd === 2 , "invalid handle for stderr (" + stderr . fd + ")" ) ;
} ,
ensureErrnoError : function ( ) {
if ( FS . ErrnoError ) return ;
FS . ErrnoError = function ErrnoError ( errno , node ) {
this . node = node ;
this . setErrno = function ( errno ) {
this . errno = errno ;
} ;
this . setErrno ( errno ) ;
this . message = "FS error" ;
if ( this . stack ) Object . defineProperty ( this , "stack" , {
value : new Error ( ) . stack ,
writable : true
} ) ;
} ;
FS . ErrnoError . prototype = new Error ( ) ;
FS . ErrnoError . prototype . constructor = FS . ErrnoError ;
[ 2 ] . forEach ( function ( code ) {
FS . genericErrors [ code ] = new FS . ErrnoError ( code ) ;
FS . genericErrors [ code ] . stack = "<generic error, no stack>" ;
} ) ;
} ,
staticInit : function ( ) {
FS . ensureErrnoError ( ) ;
FS . nameTable = new Array ( 4096 ) ;
FS . mount ( MEMFS , { } , "/" ) ;
FS . createDefaultDirectories ( ) ;
FS . createDefaultDevices ( ) ;
FS . createSpecialDirectories ( ) ;
FS . filesystems = {
"MEMFS" : MEMFS ,
"IDBFS" : IDBFS ,
"NODEFS" : NODEFS ,
"WORKERFS" : WORKERFS
} ;
} ,
init : function ( input , output , error ) {
assert ( ! FS . init . initialized , "FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)" ) ;
FS . init . initialized = true ;
FS . ensureErrnoError ( ) ;
Module [ "stdin" ] = input || Module [ "stdin" ] ;
Module [ "stdout" ] = output || Module [ "stdout" ] ;
Module [ "stderr" ] = error || Module [ "stderr" ] ;
FS . createStandardStreams ( ) ;
} ,
quit : function ( ) {
FS . init . initialized = false ;
var fflush = Module [ "_fflush" ] ;
if ( fflush ) fflush ( 0 ) ;
for ( var i = 0 ; i < FS . streams . length ; i ++ ) {
var stream = FS . streams [ i ] ;
if ( ! stream ) {
continue ;
}
FS . close ( stream ) ;
}
} ,
getMode : function ( canRead , canWrite ) {
var mode = 0 ;
if ( canRead ) mode |= 292 | 73 ;
if ( canWrite ) mode |= 146 ;
return mode ;
} ,
joinPath : function ( parts , forceRelative ) {
var path = PATH . join . apply ( null , parts ) ;
if ( forceRelative && path [ 0 ] == "/" ) path = path . substr ( 1 ) ;
return path ;
} ,
absolutePath : function ( relative , base ) {
return PATH . resolve ( base , relative ) ;
} ,
standardizePath : function ( path ) {
return PATH . normalize ( path ) ;
} ,
findObject : function ( path , dontResolveLastLink ) {
var ret = FS . analyzePath ( path , dontResolveLastLink ) ;
if ( ret . exists ) {
return ret . object ;
} else {
_ _ _setErrNo ( ret . error ) ;
return null ;
}
} ,
analyzePath : function ( path , dontResolveLastLink ) {
try {
var lookup = FS . lookupPath ( path , {
follow : ! dontResolveLastLink
} ) ;
path = lookup . path ;
} catch ( e ) { }
var ret = {
isRoot : false ,
exists : false ,
error : 0 ,
name : null ,
path : null ,
object : null ,
parentExists : false ,
parentPath : null ,
parentObject : null
} ;
try {
var lookup = FS . lookupPath ( path , {
parent : true
} ) ;
ret . parentExists = true ;
ret . parentPath = lookup . path ;
ret . parentObject = lookup . node ;
ret . name = PATH . basename ( path ) ;
lookup = FS . lookupPath ( path , {
follow : ! dontResolveLastLink
} ) ;
ret . exists = true ;
ret . path = lookup . path ;
ret . object = lookup . node ;
ret . name = lookup . node . name ;
ret . isRoot = lookup . path === "/" ;
} catch ( e ) {
ret . error = e . errno ;
}
return ret ;
} ,
createFolder : function ( parent , name , canRead , canWrite ) {
var path = PATH . join2 ( typeof parent === "string" ? parent : FS . getPath ( parent ) , name ) ;
var mode = FS . getMode ( canRead , canWrite ) ;
return FS . mkdir ( path , mode ) ;
} ,
createPath : function ( parent , path , canRead , canWrite ) {
parent = typeof parent === "string" ? parent : FS . getPath ( parent ) ;
var parts = path . split ( "/" ) . reverse ( ) ;
while ( parts . length ) {
var part = parts . pop ( ) ;
if ( ! part ) continue ;
var current = PATH . join2 ( parent , part ) ;
try {
FS . mkdir ( current ) ;
} catch ( e ) { }
parent = current ;
}
return current ;
} ,
createFile : function ( parent , name , properties , canRead , canWrite ) {
var path = PATH . join2 ( typeof parent === "string" ? parent : FS . getPath ( parent ) , name ) ;
var mode = FS . getMode ( canRead , canWrite ) ;
return FS . create ( path , mode ) ;
} ,
createDataFile : function ( parent , name , data , canRead , canWrite , canOwn ) {
var path = name ? PATH . join2 ( typeof parent === "string" ? parent : FS . getPath ( parent ) , name ) : parent ;
var mode = FS . getMode ( canRead , canWrite ) ;
var node = FS . create ( path , mode ) ;
if ( data ) {
if ( typeof data === "string" ) {
var arr = new Array ( data . length ) ;
for ( var i = 0 , len = data . length ; i < len ; ++ i ) arr [ i ] = data . charCodeAt ( i ) ;
data = arr ;
}
FS . chmod ( node , mode | 146 ) ;
var stream = FS . open ( node , "w" ) ;
FS . write ( stream , data , 0 , data . length , 0 , canOwn ) ;
FS . close ( stream ) ;
FS . chmod ( node , mode ) ;
}
return node ;
} ,
createDevice : function ( parent , name , input , output ) {
var path = PATH . join2 ( typeof parent === "string" ? parent : FS . getPath ( parent ) , name ) ;
var mode = FS . getMode ( ! ! input , ! ! output ) ;
if ( ! FS . createDevice . major ) FS . createDevice . major = 64 ;
var dev = FS . makedev ( FS . createDevice . major ++ , 0 ) ;
FS . registerDevice ( dev , {
open : function ( stream ) {
stream . seekable = false ;
} ,
close : function ( stream ) {
if ( output && output . buffer && output . buffer . length ) {
output ( 10 ) ;
}
} ,
read : function ( stream , buffer , offset , length , pos ) {
var bytesRead = 0 ;
for ( var i = 0 ; i < length ; i ++ ) {
var result ;
try {
result = input ( ) ;
} catch ( e ) {
throw new FS . ErrnoError ( 5 ) ;
}
if ( result === undefined && bytesRead === 0 ) {
throw new FS . ErrnoError ( 11 ) ;
}
if ( result === null || result === undefined ) break ;
bytesRead ++ ;
buffer [ offset + i ] = result ;
}
if ( bytesRead ) {
stream . node . timestamp = Date . now ( ) ;
}
return bytesRead ;
} ,
write : function ( stream , buffer , offset , length , pos ) {
for ( var i = 0 ; i < length ; i ++ ) {
try {
output ( buffer [ offset + i ] ) ;
} catch ( e ) {
throw new FS . ErrnoError ( 5 ) ;
}
}
if ( length ) {
stream . node . timestamp = Date . now ( ) ;
}
return i ;
}
} ) ;
return FS . mkdev ( path , mode , dev ) ;
} ,
createLink : function ( parent , name , target , canRead , canWrite ) {
var path = PATH . join2 ( typeof parent === "string" ? parent : FS . getPath ( parent ) , name ) ;
return FS . symlink ( target , path ) ;
} ,
forceLoadFile : function ( obj ) {
if ( obj . isDevice || obj . isFolder || obj . link || obj . contents ) return true ;
var success = true ;
if ( typeof XMLHttpRequest !== "undefined" ) {
throw new Error ( "Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread." ) ;
} else if ( Module [ "read" ] ) {
try {
obj . contents = intArrayFromString ( Module [ "read" ] ( obj . url ) , true ) ;
obj . usedBytes = obj . contents . length ;
} catch ( e ) {
success = false ;
}
} else {
throw new Error ( "Cannot load without read() or XMLHttpRequest." ) ;
}
if ( ! success ) _ _ _setErrNo ( 5 ) ;
return success ;
} ,
createLazyFile : function ( parent , name , url , canRead , canWrite ) {
function LazyUint8Array ( ) {
this . lengthKnown = false ;
this . chunks = [ ] ;
}
LazyUint8Array . prototype . get = function LazyUint8Array _get ( idx ) {
if ( idx > this . length - 1 || idx < 0 ) {
return undefined ;
}
var chunkOffset = idx % this . chunkSize ;
var chunkNum = idx / this . chunkSize | 0 ;
return this . getter ( chunkNum ) [ chunkOffset ] ;
} ;
LazyUint8Array . prototype . setDataGetter = function LazyUint8Array _setDataGetter ( getter ) {
this . getter = getter ;
} ;
LazyUint8Array . prototype . cacheLength = function LazyUint8Array _cacheLength ( ) {
var xhr = new XMLHttpRequest ( ) ;
xhr . open ( "HEAD" , url , false ) ;
xhr . send ( null ) ;
if ( ! ( xhr . status >= 200 && xhr . status < 300 || xhr . status === 304 ) ) throw new Error ( "Couldn't load " + url + ". Status: " + xhr . status ) ;
var datalength = Number ( xhr . getResponseHeader ( "Content-length" ) ) ;
var header ;
var hasByteServing = ( header = xhr . getResponseHeader ( "Accept-Ranges" ) ) && header === "bytes" ;
var usesGzip = ( header = xhr . getResponseHeader ( "Content-Encoding" ) ) && header === "gzip" ;
var chunkSize = 1024 * 1024 ;
if ( ! hasByteServing ) chunkSize = datalength ;
var doXHR = function ( from , to ) {
if ( from > to ) throw new Error ( "invalid range (" + from + ", " + to + ") or no bytes requested!" ) ;
if ( to > datalength - 1 ) throw new Error ( "only " + datalength + " bytes available! programmer error!" ) ;
var xhr = new XMLHttpRequest ( ) ;
xhr . open ( "GET" , url , false ) ;
if ( datalength !== chunkSize ) xhr . setRequestHeader ( "Range" , "bytes=" + from + "-" + to ) ;
if ( typeof Uint8Array != "undefined" ) xhr . responseType = "arraybuffer" ;
if ( xhr . overrideMimeType ) {
xhr . overrideMimeType ( "text/plain; charset=x-user-defined" ) ;
}
xhr . send ( null ) ;
if ( ! ( xhr . status >= 200 && xhr . status < 300 || xhr . status === 304 ) ) throw new Error ( "Couldn't load " + url + ". Status: " + xhr . status ) ;
if ( xhr . response !== undefined ) {
return new Uint8Array ( xhr . response || [ ] ) ;
} else {
return intArrayFromString ( xhr . responseText || "" , true ) ;
}
} ;
var lazyArray = this ;
lazyArray . setDataGetter ( function ( chunkNum ) {
var start = chunkNum * chunkSize ;
var end = ( chunkNum + 1 ) * chunkSize - 1 ;
end = Math . min ( end , datalength - 1 ) ;
if ( typeof lazyArray . chunks [ chunkNum ] === "undefined" ) {
lazyArray . chunks [ chunkNum ] = doXHR ( start , end ) ;
}
if ( typeof lazyArray . chunks [ chunkNum ] === "undefined" ) throw new Error ( "doXHR failed!" ) ;
return lazyArray . chunks [ chunkNum ] ;
} ) ;
if ( usesGzip || ! datalength ) {
chunkSize = datalength = 1 ;
datalength = this . getter ( 0 ) . length ;
chunkSize = datalength ;
console . log ( "LazyFiles on gzip forces download of the whole file when length is accessed" ) ;
}
this . _length = datalength ;
this . _chunkSize = chunkSize ;
this . lengthKnown = true ;
} ;
if ( typeof XMLHttpRequest !== "undefined" ) {
if ( ! ENVIRONMENT _IS _WORKER ) throw "Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc" ;
var lazyArray = new LazyUint8Array ( ) ;
Object . defineProperties ( lazyArray , {
length : {
get : function ( ) {
if ( ! this . lengthKnown ) {
this . cacheLength ( ) ;
}
return this . _length ;
}
} ,
chunkSize : {
get : function ( ) {
if ( ! this . lengthKnown ) {
this . cacheLength ( ) ;
}
return this . _chunkSize ;
}
}
} ) ;
var properties = {
isDevice : false ,
contents : lazyArray
} ;
} else {
var properties = {
isDevice : false ,
url : url
} ;
}
var node = FS . createFile ( parent , name , properties , canRead , canWrite ) ;
if ( properties . contents ) {
node . contents = properties . contents ;
} else if ( properties . url ) {
node . contents = null ;
node . url = properties . url ;
}
Object . defineProperties ( node , {
usedBytes : {
get : function ( ) {
return this . contents . length ;
}
}
} ) ;
var stream _ops = { } ;
var keys = Object . keys ( node . stream _ops ) ;
keys . forEach ( function ( key ) {
var fn = node . stream _ops [ key ] ;
stream _ops [ key ] = function forceLoadLazyFile ( ) {
if ( ! FS . forceLoadFile ( node ) ) {
throw new FS . ErrnoError ( 5 ) ;
}
return fn . apply ( null , arguments ) ;
} ;
} ) ;
stream _ops . read = function stream _ops _read ( stream , buffer , offset , length , position ) {
if ( ! FS . forceLoadFile ( node ) ) {
throw new FS . ErrnoError ( 5 ) ;
}
var contents = stream . node . contents ;
if ( position >= contents . length ) return 0 ;
var size = Math . min ( contents . length - position , length ) ;
assert ( size >= 0 ) ;
if ( contents . slice ) {
for ( var i = 0 ; i < size ; i ++ ) {
buffer [ offset + i ] = contents [ position + i ] ;
}
} else {
for ( var i = 0 ; i < size ; i ++ ) {
buffer [ offset + i ] = contents . get ( position + i ) ;
}
}
return size ;
} ;
node . stream _ops = stream _ops ;
return node ;
} ,
createPreloadedFile : function ( parent , name , url , canRead , canWrite , onload , onerror , dontCreateFile , canOwn , preFinish ) {
Browser . init ( ) ;
var fullname = name ? PATH . resolve ( PATH . join2 ( parent , name ) ) : parent ;
var dep = getUniqueRunDependency ( "cp " + fullname ) ;
function processData ( byteArray ) {
function finish ( byteArray ) {
if ( preFinish ) preFinish ( ) ;
if ( ! dontCreateFile ) {
FS . createDataFile ( parent , name , byteArray , canRead , canWrite , canOwn ) ;
}
if ( onload ) onload ( ) ;
removeRunDependency ( dep ) ;
}
var handled = false ;
Module [ "preloadPlugins" ] . forEach ( function ( plugin ) {
if ( handled ) return ;
if ( plugin [ "canHandle" ] ( fullname ) ) {
plugin [ "handle" ] ( byteArray , fullname , finish , function ( ) {
if ( onerror ) onerror ( ) ;
removeRunDependency ( dep ) ;
} ) ;
handled = true ;
}
} ) ;
if ( ! handled ) finish ( byteArray ) ;
}
addRunDependency ( dep ) ;
if ( typeof url == "string" ) {
Browser . asyncLoad ( url , function ( byteArray ) {
processData ( byteArray ) ;
} , onerror ) ;
} else {
processData ( url ) ;
}
} ,
indexedDB : function ( ) {
return window . indexedDB || window . mozIndexedDB || window . webkitIndexedDB || window . msIndexedDB ;
} ,
DB _NAME : function ( ) {
return "EM_FS_" + window . location . pathname ;
} ,
DB _VERSION : 20 ,
DB _STORE _NAME : "FILE_DATA" ,
saveFilesToDB : function ( paths , onload , onerror ) {
onload = onload || function ( ) { } ;
onerror = onerror || function ( ) { } ;
var indexedDB = FS . indexedDB ( ) ;
try {
var openRequest = indexedDB . open ( FS . DB _NAME ( ) , FS . DB _VERSION ) ;
} catch ( e ) {
return onerror ( e ) ;
}
openRequest . onupgradeneeded = function openRequest _onupgradeneeded ( ) {
console . log ( "creating db" ) ;
var db = openRequest . result ;
db . createObjectStore ( FS . DB _STORE _NAME ) ;
} ;
openRequest . onsuccess = function openRequest _onsuccess ( ) {
var db = openRequest . result ;
var transaction = db . transaction ( [ FS . DB _STORE _NAME ] , "readwrite" ) ;
var files = transaction . objectStore ( FS . DB _STORE _NAME ) ;
var ok = 0 , fail = 0 , total = paths . length ;
function finish ( ) {
if ( fail == 0 ) onload ( ) ; else onerror ( ) ;
}
paths . forEach ( function ( path ) {
var putRequest = files . put ( FS . analyzePath ( path ) . object . contents , path ) ;
putRequest . onsuccess = function putRequest _onsuccess ( ) {
ok ++ ;
if ( ok + fail == total ) finish ( ) ;
} ;
putRequest . onerror = function putRequest _onerror ( ) {
fail ++ ;
if ( ok + fail == total ) finish ( ) ;
} ;
} ) ;
transaction . onerror = onerror ;
} ;
openRequest . onerror = onerror ;
} ,
loadFilesFromDB : function ( paths , onload , onerror ) {
onload = onload || function ( ) { } ;
onerror = onerror || function ( ) { } ;
var indexedDB = FS . indexedDB ( ) ;
try {
var openRequest = indexedDB . open ( FS . DB _NAME ( ) , FS . DB _VERSION ) ;
} catch ( e ) {
return onerror ( e ) ;
}
openRequest . onupgradeneeded = onerror ;
openRequest . onsuccess = function openRequest _onsuccess ( ) {
var db = openRequest . result ;
try {
var transaction = db . transaction ( [ FS . DB _STORE _NAME ] , "readonly" ) ;
} catch ( e ) {
onerror ( e ) ;
return ;
}
var files = transaction . objectStore ( FS . DB _STORE _NAME ) ;
var ok = 0 , fail = 0 , total = paths . length ;
function finish ( ) {
if ( fail == 0 ) onload ( ) ; else onerror ( ) ;
}
paths . forEach ( function ( path ) {
var getRequest = files . get ( path ) ;
getRequest . onsuccess = function getRequest _onsuccess ( ) {
if ( FS . analyzePath ( path ) . exists ) {
FS . unlink ( path ) ;
}
FS . createDataFile ( PATH . dirname ( path ) , PATH . basename ( path ) , getRequest . result , true , true , true ) ;
ok ++ ;
if ( ok + fail == total ) finish ( ) ;
} ;
getRequest . onerror = function getRequest _onerror ( ) {
fail ++ ;
if ( ok + fail == total ) finish ( ) ;
} ;
} ) ;
transaction . onerror = onerror ;
} ;
openRequest . onerror = onerror ;
}
} ;
function _emscripten _set _main _loop _timing ( mode , value ) {
Browser . mainLoop . timingMode = mode ;
Browser . mainLoop . timingValue = value ;
if ( ! Browser . mainLoop . func ) {
return 1 ;
}
if ( mode == 0 ) {
Browser . mainLoop . scheduler = function Browser _mainLoop _scheduler _setTimeout ( ) {
var timeUntilNextTick = Math . max ( 0 , Browser . mainLoop . tickStartTime + value - _emscripten _get _now ( ) ) | 0 ;
setTimeout ( Browser . mainLoop . runner , timeUntilNextTick ) ;
} ;
Browser . mainLoop . method = "timeout" ;
} else if ( mode == 1 ) {
Browser . mainLoop . scheduler = function Browser _mainLoop _scheduler _rAF ( ) {
Browser . requestAnimationFrame ( Browser . mainLoop . runner ) ;
} ;
Browser . mainLoop . method = "rAF" ;
} else if ( mode == 2 ) {
if ( typeof setImmediate === "undefined" ) {
var setImmediates = [ ] ;
var emscriptenMainLoopMessageId = "setimmediate" ;
var Browser _setImmediate _messageHandler = function ( event ) {
if ( event . data === emscriptenMainLoopMessageId || event . data . target === emscriptenMainLoopMessageId ) {
event . stopPropagation ( ) ;
setImmediates . shift ( ) ( ) ;
}
} ;
addEventListener ( "message" , Browser _setImmediate _messageHandler , true ) ;
setImmediate = function Browser _emulated _setImmediate ( func ) {
setImmediates . push ( func ) ;
if ( ENVIRONMENT _IS _WORKER ) {
if ( Module [ "setImmediates" ] === undefined ) Module [ "setImmediates" ] = [ ] ;
Module [ "setImmediates" ] . push ( func ) ;
postMessage ( {
target : emscriptenMainLoopMessageId
} ) ;
} else postMessage ( emscriptenMainLoopMessageId , "*" ) ;
} ;
}
Browser . mainLoop . scheduler = function Browser _mainLoop _scheduler _setImmediate ( ) {
setImmediate ( Browser . mainLoop . runner ) ;
} ;
Browser . mainLoop . method = "immediate" ;
}
return 0 ;
}
function _emscripten _get _now ( ) {
abort ( ) ;
}
function _emscripten _set _main _loop ( func , fps , simulateInfiniteLoop , arg , noSetTiming ) {
Module [ "noExitRuntime" ] = true ;
assert ( ! Browser . mainLoop . func , "emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters." ) ;
Browser . mainLoop . func = func ;
Browser . mainLoop . arg = arg ;
var browserIterationFunc ;
if ( typeof arg !== "undefined" ) {
browserIterationFunc = function ( ) {
Module [ "dynCall_vi" ] ( func , arg ) ;
} ;
} else {
browserIterationFunc = function ( ) {
Module [ "dynCall_v" ] ( func ) ;
} ;
}
var thisMainLoopId = Browser . mainLoop . currentlyRunningMainloop ;
Browser . mainLoop . runner = function Browser _mainLoop _runner ( ) {
if ( ABORT ) return ;
if ( Browser . mainLoop . queue . length > 0 ) {
var start = Date . now ( ) ;
var blocker = Browser . mainLoop . queue . shift ( ) ;
blocker . func ( blocker . arg ) ;
if ( Browser . mainLoop . remainingBlockers ) {
var remaining = Browser . mainLoop . remainingBlockers ;
var next = remaining % 1 == 0 ? remaining - 1 : Math . floor ( remaining ) ;
if ( blocker . counted ) {
Browser . mainLoop . remainingBlockers = next ;
} else {
next = next + . 5 ;
Browser . mainLoop . remainingBlockers = ( 8 * remaining + next ) / 9 ;
}
}
console . log ( 'main loop blocker "' + blocker . name + '" took ' + ( Date . now ( ) - start ) + " ms" ) ;
Browser . mainLoop . updateStatus ( ) ;
if ( thisMainLoopId < Browser . mainLoop . currentlyRunningMainloop ) return ;
setTimeout ( Browser . mainLoop . runner , 0 ) ;
return ;
}
if ( thisMainLoopId < Browser . mainLoop . currentlyRunningMainloop ) return ;
Browser . mainLoop . currentFrameNumber = Browser . mainLoop . currentFrameNumber + 1 | 0 ;
if ( Browser . mainLoop . timingMode == 1 && Browser . mainLoop . timingValue > 1 && Browser . mainLoop . currentFrameNumber % Browser . mainLoop . timingValue != 0 ) {
Browser . mainLoop . scheduler ( ) ;
return ;
} else if ( Browser . mainLoop . timingMode == 0 ) {
Browser . mainLoop . tickStartTime = _emscripten _get _now ( ) ;
}
if ( Browser . mainLoop . method === "timeout" && Module . ctx ) {
err ( "Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!" ) ;
Browser . mainLoop . method = "" ;
}
Browser . mainLoop . runIter ( browserIterationFunc ) ;
if ( thisMainLoopId < Browser . mainLoop . currentlyRunningMainloop ) return ;
if ( typeof SDL === "object" && SDL . audio && SDL . audio . queueNewAudioData ) SDL . audio . queueNewAudioData ( ) ;
Browser . mainLoop . scheduler ( ) ;
} ;
if ( ! noSetTiming ) {
if ( fps && fps > 0 ) _emscripten _set _main _loop _timing ( 0 , 1e3 / fps ) ; else _emscripten _set _main _loop _timing ( 1 , 1 ) ;
Browser . mainLoop . scheduler ( ) ;
}
if ( simulateInfiniteLoop ) {
throw "SimulateInfiniteLoop" ;
}
}
var Browser = {
mainLoop : {
scheduler : null ,
method : "" ,
currentlyRunningMainloop : 0 ,
func : null ,
arg : 0 ,
timingMode : 0 ,
timingValue : 0 ,
currentFrameNumber : 0 ,
queue : [ ] ,
pause : function ( ) {
Browser . mainLoop . scheduler = null ;
Browser . mainLoop . currentlyRunningMainloop ++ ;
} ,
resume : function ( ) {
Browser . mainLoop . currentlyRunningMainloop ++ ;
var timingMode = Browser . mainLoop . timingMode ;
var timingValue = Browser . mainLoop . timingValue ;
var func = Browser . mainLoop . func ;
Browser . mainLoop . func = null ;
_emscripten _set _main _loop ( func , 0 , false , Browser . mainLoop . arg , true ) ;
_emscripten _set _main _loop _timing ( timingMode , timingValue ) ;
Browser . mainLoop . scheduler ( ) ;
} ,
updateStatus : function ( ) {
if ( Module [ "setStatus" ] ) {
var message = Module [ "statusMessage" ] || "Please wait..." ;
var remaining = Browser . mainLoop . remainingBlockers ;
var expected = Browser . mainLoop . expectedBlockers ;
if ( remaining ) {
if ( remaining < expected ) {
Module [ "setStatus" ] ( message + " (" + ( expected - remaining ) + "/" + expected + ")" ) ;
} else {
Module [ "setStatus" ] ( message ) ;
}
} else {
Module [ "setStatus" ] ( "" ) ;
}
}
} ,
runIter : function ( func ) {
if ( ABORT ) return ;
if ( Module [ "preMainLoop" ] ) {
var preRet = Module [ "preMainLoop" ] ( ) ;
if ( preRet === false ) {
return ;
}
}
try {
func ( ) ;
} catch ( e ) {
if ( e instanceof ExitStatus ) {
return ;
} else {
if ( e && typeof e === "object" && e . stack ) err ( "exception thrown: " + [ e , e . stack ] ) ;
throw e ;
}
}
if ( Module [ "postMainLoop" ] ) Module [ "postMainLoop" ] ( ) ;
}
} ,
isFullscreen : false ,
pointerLock : false ,
moduleContextCreatedCallbacks : [ ] ,
workers : [ ] ,
init : function ( ) {
if ( ! Module [ "preloadPlugins" ] ) Module [ "preloadPlugins" ] = [ ] ;
if ( Browser . initted ) return ;
Browser . initted = true ;
try {
new Blob ( ) ;
Browser . hasBlobConstructor = true ;
} catch ( e ) {
Browser . hasBlobConstructor = false ;
console . log ( "warning: no blob constructor, cannot create blobs with mimetypes" ) ;
}
Browser . BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : ! Browser . hasBlobConstructor ? console . log ( "warning: no BlobBuilder" ) : null ;
Browser . URLObject = typeof window != "undefined" ? window . URL ? window . URL : window . webkitURL : undefined ;
if ( ! Module . noImageDecoding && typeof Browser . URLObject === "undefined" ) {
console . log ( "warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available." ) ;
Module . noImageDecoding = true ;
}
var imagePlugin = { } ;
imagePlugin [ "canHandle" ] = function imagePlugin _canHandle ( name ) {
return ! Module . noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i . test ( name ) ;
} ;
imagePlugin [ "handle" ] = function imagePlugin _handle ( byteArray , name , onload , onerror ) {
var b = null ;
if ( Browser . hasBlobConstructor ) {
try {
b = new Blob ( [ byteArray ] , {
type : Browser . getMimetype ( name )
} ) ;
if ( b . size !== byteArray . length ) {
b = new Blob ( [ new Uint8Array ( byteArray ) . buffer ] , {
type : Browser . getMimetype ( name )
} ) ;
}
} catch ( e ) {
warnOnce ( "Blob constructor present but fails: " + e + "; falling back to blob builder" ) ;
}
}
if ( ! b ) {
var bb = new Browser . BlobBuilder ( ) ;
bb . append ( new Uint8Array ( byteArray ) . buffer ) ;
b = bb . getBlob ( ) ;
}
var url = Browser . URLObject . createObjectURL ( b ) ;
var img = new Image ( ) ;
img . onload = function img _onload ( ) {
assert ( img . complete , "Image " + name + " could not be decoded" ) ;
var canvas = document . createElement ( "canvas" ) ;
canvas . width = img . width ;
canvas . height = img . height ;
var ctx = canvas . getContext ( "2d" ) ;
ctx . drawImage ( img , 0 , 0 ) ;
Module [ "preloadedImages" ] [ name ] = canvas ;
Browser . URLObject . revokeObjectURL ( url ) ;
if ( onload ) onload ( byteArray ) ;
} ;
img . onerror = function img _onerror ( event ) {
console . log ( "Image " + url + " could not be decoded" ) ;
if ( onerror ) onerror ( ) ;
} ;
img . src = url ;
} ;
Module [ "preloadPlugins" ] . push ( imagePlugin ) ;
var audioPlugin = { } ;
audioPlugin [ "canHandle" ] = function audioPlugin _canHandle ( name ) {
return ! Module . noAudioDecoding && name . substr ( - 4 ) in {
".ogg" : 1 ,
".wav" : 1 ,
".mp3" : 1
} ;
} ;
audioPlugin [ "handle" ] = function audioPlugin _handle ( byteArray , name , onload , onerror ) {
var done = false ;
function finish ( audio ) {
if ( done ) return ;
done = true ;
Module [ "preloadedAudios" ] [ name ] = audio ;
if ( onload ) onload ( byteArray ) ;
}
function fail ( ) {
if ( done ) return ;
done = true ;
Module [ "preloadedAudios" ] [ name ] = new Audio ( ) ;
if ( onerror ) onerror ( ) ;
}
if ( Browser . hasBlobConstructor ) {
try {
var b = new Blob ( [ byteArray ] , {
type : Browser . getMimetype ( name )
} ) ;
} catch ( e ) {
return fail ( ) ;
}
var url = Browser . URLObject . createObjectURL ( b ) ;
var audio = new Audio ( ) ;
audio . addEventListener ( "canplaythrough" , function ( ) {
finish ( audio ) ;
} , false ) ;
audio . onerror = function audio _onerror ( event ) {
if ( done ) return ;
console . log ( "warning: browser could not fully decode audio " + name + ", trying slower base64 approach" ) ;
function encode64 ( data ) {
var BASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" ;
var PAD = "=" ;
var ret = "" ;
var leftchar = 0 ;
var leftbits = 0 ;
for ( var i = 0 ; i < data . length ; i ++ ) {
leftchar = leftchar << 8 | data [ i ] ;
leftbits += 8 ;
while ( leftbits >= 6 ) {
var curr = leftchar >> leftbits - 6 & 63 ;
leftbits -= 6 ;
ret += BASE [ curr ] ;
}
}
if ( leftbits == 2 ) {
ret += BASE [ ( leftchar & 3 ) << 4 ] ;
ret += PAD + PAD ;
} else if ( leftbits == 4 ) {
ret += BASE [ ( leftchar & 15 ) << 2 ] ;
ret += PAD ;
}
return ret ;
}
audio . src = "data:audio/x-" + name . substr ( - 3 ) + ";base64," + encode64 ( byteArray ) ;
finish ( audio ) ;
} ;
audio . src = url ;
Browser . safeSetTimeout ( function ( ) {
finish ( audio ) ;
} , 1e4 ) ;
} else {
return fail ( ) ;
}
} ;
Module [ "preloadPlugins" ] . push ( audioPlugin ) ;
function pointerLockChange ( ) {
Browser . pointerLock = document [ "pointerLockElement" ] === Module [ "canvas" ] || document [ "mozPointerLockElement" ] === Module [ "canvas" ] || document [ "webkitPointerLockElement" ] === Module [ "canvas" ] || document [ "msPointerLockElement" ] === Module [ "canvas" ] ;
}
var canvas = Module [ "canvas" ] ;
if ( canvas ) {
canvas . requestPointerLock = canvas [ "requestPointerLock" ] || canvas [ "mozRequestPointerLock" ] || canvas [ "webkitRequestPointerLock" ] || canvas [ "msRequestPointerLock" ] || function ( ) { } ;
canvas . exitPointerLock = document [ "exitPointerLock" ] || document [ "mozExitPointerLock" ] || document [ "webkitExitPointerLock" ] || document [ "msExitPointerLock" ] || function ( ) { } ;
canvas . exitPointerLock = canvas . exitPointerLock . bind ( document ) ;
document . addEventListener ( "pointerlockchange" , pointerLockChange , false ) ;
document . addEventListener ( "mozpointerlockchange" , pointerLockChange , false ) ;
document . addEventListener ( "webkitpointerlockchange" , pointerLockChange , false ) ;
document . addEventListener ( "mspointerlockchange" , pointerLockChange , false ) ;
if ( Module [ "elementPointerLock" ] ) {
canvas . addEventListener ( "click" , function ( ev ) {
if ( ! Browser . pointerLock && Module [ "canvas" ] . requestPointerLock ) {
Module [ "canvas" ] . requestPointerLock ( ) ;
ev . preventDefault ( ) ;
}
} , false ) ;
}
}
} ,
createContext : function ( canvas , useWebGL , setInModule , webGLContextAttributes ) {
if ( useWebGL && Module . ctx && canvas == Module . canvas ) return Module . ctx ;
var ctx ;
var contextHandle ;
if ( useWebGL ) {
var contextAttributes = {
antialias : false ,
alpha : false ,
majorVersion : 1
} ;
if ( webGLContextAttributes ) {
for ( var attribute in webGLContextAttributes ) {
contextAttributes [ attribute ] = webGLContextAttributes [ attribute ] ;
}
}
if ( typeof GL !== "undefined" ) {
contextHandle = GL . createContext ( canvas , contextAttributes ) ;
if ( contextHandle ) {
ctx = GL . getContext ( contextHandle ) . GLctx ;
}
}
} else {
ctx = canvas . getContext ( "2d" ) ;
}
if ( ! ctx ) return null ;
if ( setInModule ) {
if ( ! useWebGL ) assert ( typeof GLctx === "undefined" , "cannot set in module if GLctx is used, but we are a non-GL context that would replace it" ) ;
Module . ctx = ctx ;
if ( useWebGL ) GL . makeContextCurrent ( contextHandle ) ;
Module . useWebGL = useWebGL ;
Browser . moduleContextCreatedCallbacks . forEach ( function ( callback ) {
callback ( ) ;
} ) ;
Browser . init ( ) ;
}
return ctx ;
} ,
destroyContext : function ( canvas , useWebGL , setInModule ) { } ,
fullscreenHandlersInstalled : false ,
lockPointer : undefined ,
resizeCanvas : undefined ,
requestFullscreen : function ( lockPointer , resizeCanvas , vrDevice ) {
lockPointer = false ;
console . log ( "forcing lockPointer to false" ) ;
Browser . lockPointer = lockPointer ;
Browser . resizeCanvas = resizeCanvas ;
Browser . vrDevice = vrDevice ;
if ( typeof Browser . lockPointer === "undefined" ) Browser . lockPointer = false ;
if ( typeof Browser . resizeCanvas === "undefined" ) Browser . resizeCanvas = false ;
if ( typeof Browser . vrDevice === "undefined" ) Browser . vrDevice = null ;
var canvas = Module [ "canvas" ] ;
function fullscreenChange ( ) {
Browser . isFullscreen = false ;
var canvasContainer = canvas . parentNode ;
if ( ( document [ "fullscreenElement" ] || document [ "mozFullScreenElement" ] || document [ "msFullscreenElement" ] || document [ "webkitFullscreenElement" ] || document [ "webkitCurrentFullScreenElement" ] ) === canvasContainer ) {
canvas . exitFullscreen = document [ "exitFullscreen" ] || document [ "cancelFullScreen" ] || document [ "mozCancelFullScreen" ] || document [ "msExitFullscreen" ] || document [ "webkitCancelFullScreen" ] || function ( ) { } ;
canvas . exitFullscreen = canvas . exitFullscreen . bind ( document ) ;
Browser . isFullscreen = true ;
if ( Browser . resizeCanvas ) {
Browser . setFullscreenCanvasSize ( ) ;
} else {
Browser . updateCanvasDimensions ( canvas ) ;
}
} else {
canvasContainer . parentNode . insertBefore ( canvas , canvasContainer ) ;
canvasContainer . parentNode . removeChild ( canvasContainer ) ;
if ( Browser . resizeCanvas ) {
Browser . setWindowedCanvasSize ( ) ;
} else {
Browser . updateCanvasDimensions ( canvas ) ;
}
}
if ( Module [ "onFullScreen" ] ) Module [ "onFullScreen" ] ( Browser . isFullscreen ) ;
if ( Module [ "onFullscreen" ] ) Module [ "onFullscreen" ] ( Browser . isFullscreen ) ;
}
if ( ! Browser . fullscreenHandlersInstalled ) {
Browser . fullscreenHandlersInstalled = true ;
document . addEventListener ( "fullscreenchange" , fullscreenChange , false ) ;
document . addEventListener ( "mozfullscreenchange" , fullscreenChange , false ) ;
document . addEventListener ( "webkitfullscreenchange" , fullscreenChange , false ) ;
document . addEventListener ( "MSFullscreenChange" , fullscreenChange , false ) ;
}
var canvasContainer = document . createElement ( "div" ) ;
canvas . parentNode . insertBefore ( canvasContainer , canvas ) ;
canvasContainer . appendChild ( canvas ) ;
canvasContainer . requestFullscreen = canvasContainer [ "requestFullscreen" ] || canvasContainer [ "mozRequestFullScreen" ] || canvasContainer [ "msRequestFullscreen" ] || ( canvasContainer [ "webkitRequestFullscreen" ] ? function ( ) {
canvasContainer [ "webkitRequestFullscreen" ] ( Element [ "ALLOW_KEYBOARD_INPUT" ] ) ;
} : null ) || ( canvasContainer [ "webkitRequestFullScreen" ] ? function ( ) {
canvasContainer [ "webkitRequestFullScreen" ] ( Element [ "ALLOW_KEYBOARD_INPUT" ] ) ;
} : null ) ;
if ( vrDevice ) {
canvasContainer . requestFullscreen ( {
vrDisplay : vrDevice
} ) ;
} else {
canvasContainer . requestFullscreen ( ) ;
}
} ,
requestFullScreen : function ( lockPointer , resizeCanvas , vrDevice ) {
err ( "Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead." ) ;
Browser . requestFullScreen = function ( lockPointer , resizeCanvas , vrDevice ) {
return Browser . requestFullscreen ( lockPointer , resizeCanvas , vrDevice ) ;
} ;
return Browser . requestFullscreen ( lockPointer , resizeCanvas , vrDevice ) ;
} ,
nextRAF : 0 ,
fakeRequestAnimationFrame : function ( func ) {
var now = Date . now ( ) ;
if ( Browser . nextRAF === 0 ) {
Browser . nextRAF = now + 1e3 / 60 ;
} else {
while ( now + 2 >= Browser . nextRAF ) {
Browser . nextRAF += 1e3 / 60 ;
}
}
var delay = Math . max ( Browser . nextRAF - now , 0 ) ;
setTimeout ( func , delay ) ;
} ,
requestAnimationFrame : function requestAnimationFrame ( func ) {
if ( typeof window === "undefined" ) {
Browser . fakeRequestAnimationFrame ( func ) ;
} else {
if ( ! window . requestAnimationFrame ) {
window . requestAnimationFrame = window [ "requestAnimationFrame" ] || window [ "mozRequestAnimationFrame" ] || window [ "webkitRequestAnimationFrame" ] || window [ "msRequestAnimationFrame" ] || window [ "oRequestAnimationFrame" ] || Browser . fakeRequestAnimationFrame ;
}
window . requestAnimationFrame ( func ) ;
}
} ,
safeCallback : function ( func ) {
return function ( ) {
if ( ! ABORT ) return func . apply ( null , arguments ) ;
} ;
} ,
allowAsyncCallbacks : true ,
queuedAsyncCallbacks : [ ] ,
pauseAsyncCallbacks : function ( ) {
Browser . allowAsyncCallbacks = false ;
} ,
resumeAsyncCallbacks : function ( ) {
Browser . allowAsyncCallbacks = true ;
if ( Browser . queuedAsyncCallbacks . length > 0 ) {
var callbacks = Browser . queuedAsyncCallbacks ;
Browser . queuedAsyncCallbacks = [ ] ;
callbacks . forEach ( function ( func ) {
func ( ) ;
} ) ;
}
} ,
safeRequestAnimationFrame : function ( func ) {
return Browser . requestAnimationFrame ( function ( ) {
if ( ABORT ) return ;
if ( Browser . allowAsyncCallbacks ) {
func ( ) ;
} else {
Browser . queuedAsyncCallbacks . push ( func ) ;
}
} ) ;
} ,
safeSetTimeout : function ( func , timeout ) {
Module [ "noExitRuntime" ] = true ;
return setTimeout ( function ( ) {
if ( ABORT ) return ;
if ( Browser . allowAsyncCallbacks ) {
func ( ) ;
} else {
Browser . queuedAsyncCallbacks . push ( func ) ;
}
} , timeout ) ;
} ,
safeSetInterval : function ( func , timeout ) {
Module [ "noExitRuntime" ] = true ;
return setInterval ( function ( ) {
if ( ABORT ) return ;
if ( Browser . allowAsyncCallbacks ) {
func ( ) ;
}
} , timeout ) ;
} ,
getMimetype : function ( name ) {
return {
"jpg" : "image/jpeg" ,
"jpeg" : "image/jpeg" ,
"png" : "image/png" ,
"bmp" : "image/bmp" ,
"ogg" : "audio/ogg" ,
"wav" : "audio/wav" ,
"mp3" : "audio/mpeg"
} [ name . substr ( name . lastIndexOf ( "." ) + 1 ) ] ;
} ,
getUserMedia : function ( func ) {
if ( ! window . getUserMedia ) {
window . getUserMedia = navigator [ "getUserMedia" ] || navigator [ "mozGetUserMedia" ] ;
}
window . getUserMedia ( func ) ;
} ,
getMovementX : function ( event ) {
return event [ "movementX" ] || event [ "mozMovementX" ] || event [ "webkitMovementX" ] || 0 ;
} ,
getMovementY : function ( event ) {
return event [ "movementY" ] || event [ "mozMovementY" ] || event [ "webkitMovementY" ] || 0 ;
} ,
getMouseWheelDelta : function ( event ) {
var delta = 0 ;
switch ( event . type ) {
case "DOMMouseScroll" :
delta = event . detail ;
break ;
case "mousewheel" :
delta = event . wheelDelta ;
break ;
case "wheel" :
delta = event [ "deltaY" ] ;
break ;
default :
throw "unrecognized mouse wheel event: " + event . type ;
}
return delta ;
} ,
mouseX : 0 ,
mouseY : 0 ,
mouseMovementX : 0 ,
mouseMovementY : 0 ,
touches : { } ,
lastTouches : { } ,
calculateMouseEvent : function ( event ) {
if ( Browser . pointerLock ) {
if ( event . type != "mousemove" && "mozMovementX" in event ) {
Browser . mouseMovementX = Browser . mouseMovementY = 0 ;
} else {
Browser . mouseMovementX = Browser . getMovementX ( event ) ;
Browser . mouseMovementY = Browser . getMovementY ( event ) ;
}
if ( typeof SDL != "undefined" ) {
Browser . mouseX = SDL . mouseX + Browser . mouseMovementX ;
Browser . mouseY = SDL . mouseY + Browser . mouseMovementY ;
} else {
Browser . mouseX += Browser . mouseMovementX ;
Browser . mouseY += Browser . mouseMovementY ;
}
} else {
var rect = Module [ "canvas" ] . getBoundingClientRect ( ) ;
var cw = Module [ "canvas" ] . width ;
var ch = Module [ "canvas" ] . height ;
var scrollX = typeof window . scrollX !== "undefined" ? window . scrollX : window . pageXOffset ;
var scrollY = typeof window . scrollY !== "undefined" ? window . scrollY : window . pageYOffset ;
if ( event . type === "touchstart" || event . type === "touchend" || event . type === "touchmove" ) {
var touch = event . touch ;
if ( touch === undefined ) {
return ;
}
var adjustedX = touch . pageX - ( scrollX + rect . left ) ;
var adjustedY = touch . pageY - ( scrollY + rect . top ) ;
adjustedX = adjustedX * ( cw / rect . width ) ;
adjustedY = adjustedY * ( ch / rect . height ) ;
var coords = {
x : adjustedX ,
y : adjustedY
} ;
if ( event . type === "touchstart" ) {
Browser . lastTouches [ touch . identifier ] = coords ;
Browser . touches [ touch . identifier ] = coords ;
} else if ( event . type === "touchend" || event . type === "touchmove" ) {
var last = Browser . touches [ touch . identifier ] ;
if ( ! last ) last = coords ;
Browser . lastTouches [ touch . identifier ] = last ;
Browser . touches [ touch . identifier ] = coords ;
}
return ;
}
var x = event . pageX - ( scrollX + rect . left ) ;
var y = event . pageY - ( scrollY + rect . top ) ;
x = x * ( cw / rect . width ) ;
y = y * ( ch / rect . height ) ;
Browser . mouseMovementX = x - Browser . mouseX ;
Browser . mouseMovementY = y - Browser . mouseY ;
Browser . mouseX = x ;
Browser . mouseY = y ;
}
} ,
asyncLoad : function ( url , onload , onerror , noRunDep ) {
var dep = ! noRunDep ? getUniqueRunDependency ( "al " + url ) : "" ;
Module [ "readAsync" ] ( url , function ( arrayBuffer ) {
assert ( arrayBuffer , 'Loading data file "' + url + '" failed (no arrayBuffer).' ) ;
onload ( new Uint8Array ( arrayBuffer ) ) ;
if ( dep ) removeRunDependency ( dep ) ;
} , function ( event ) {
if ( onerror ) {
onerror ( ) ;
} else {
throw 'Loading data file "' + url + '" failed.' ;
}
} ) ;
if ( dep ) addRunDependency ( dep ) ;
} ,
resizeListeners : [ ] ,
updateResizeListeners : function ( ) {
var canvas = Module [ "canvas" ] ;
Browser . resizeListeners . forEach ( function ( listener ) {
listener ( canvas . width , canvas . height ) ;
} ) ;
} ,
setCanvasSize : function ( width , height , noUpdates ) {
var canvas = Module [ "canvas" ] ;
Browser . updateCanvasDimensions ( canvas , width , height ) ;
if ( ! noUpdates ) Browser . updateResizeListeners ( ) ;
} ,
windowedWidth : 0 ,
windowedHeight : 0 ,
setFullscreenCanvasSize : function ( ) {
if ( typeof SDL != "undefined" ) {
var flags = HEAPU32 [ SDL . screen >> 2 ] ;
flags = flags | 8388608 ;
HEAP32 [ SDL . screen >> 2 ] = flags ;
}
Browser . updateCanvasDimensions ( Module [ "canvas" ] ) ;
Browser . updateResizeListeners ( ) ;
} ,
setWindowedCanvasSize : function ( ) {
if ( typeof SDL != "undefined" ) {
var flags = HEAPU32 [ SDL . screen >> 2 ] ;
flags = flags & ~ 8388608 ;
HEAP32 [ SDL . screen >> 2 ] = flags ;
}
Browser . updateCanvasDimensions ( Module [ "canvas" ] ) ;
Browser . updateResizeListeners ( ) ;
} ,
updateCanvasDimensions : function ( canvas , wNative , hNative ) {
if ( wNative && hNative ) {
canvas . widthNative = wNative ;
canvas . heightNative = hNative ;
} else {
wNative = canvas . widthNative ;
hNative = canvas . heightNative ;
}
var w = wNative ;
var h = hNative ;
if ( Module [ "forcedAspectRatio" ] && Module [ "forcedAspectRatio" ] > 0 ) {
if ( w / h < Module [ "forcedAspectRatio" ] ) {
w = Math . round ( h * Module [ "forcedAspectRatio" ] ) ;
} else {
h = Math . round ( w / Module [ "forcedAspectRatio" ] ) ;
}
}
if ( ( document [ "fullscreenElement" ] || document [ "mozFullScreenElement" ] || document [ "msFullscreenElement" ] || document [ "webkitFullscreenElement" ] || document [ "webkitCurrentFullScreenElement" ] ) === canvas . parentNode && typeof screen != "undefined" ) {
var factor = Math . min ( screen . width / w , screen . height / h ) ;
w = Math . round ( w * factor ) ;
h = Math . round ( h * factor ) ;
}
if ( Browser . resizeCanvas ) {
if ( canvas . width != w ) canvas . width = w ;
if ( canvas . height != h ) canvas . height = h ;
if ( typeof canvas . style != "undefined" ) {
canvas . style . removeProperty ( "width" ) ;
canvas . style . removeProperty ( "height" ) ;
}
} else {
if ( canvas . width != wNative ) canvas . width = wNative ;
if ( canvas . height != hNative ) canvas . height = hNative ;
if ( typeof canvas . style != "undefined" ) {
if ( w != wNative || h != hNative ) {
canvas . style . setProperty ( "width" , w + "px" , "important" ) ;
canvas . style . setProperty ( "height" , h + "px" , "important" ) ;
} else {
canvas . style . removeProperty ( "width" ) ;
canvas . style . removeProperty ( "height" ) ;
}
}
}
} ,
wgetRequests : { } ,
nextWgetRequestHandle : 0 ,
getNextWgetRequestHandle : function ( ) {
var handle = Browser . nextWgetRequestHandle ;
Browser . nextWgetRequestHandle ++ ;
return handle ;
}
} ;
function _SDL _GetTicks ( ) {
return Date . now ( ) - SDL . startTime | 0 ;
}
function _SDL _LockSurface ( surf ) {
var surfData = SDL . surfaces [ surf ] ;
surfData . locked ++ ;
if ( surfData . locked > 1 ) return 0 ;
if ( ! surfData . buffer ) {
surfData . buffer = _malloc ( surfData . width * surfData . height * 4 ) ;
HEAP32 [ surf + 20 >> 2 ] = surfData . buffer ;
}
HEAP32 [ surf + 20 >> 2 ] = surfData . buffer ;
if ( surf == SDL . screen && Module . screenIsReadOnly && surfData . image ) return 0 ;
if ( SDL . defaults . discardOnLock ) {
if ( ! surfData . image ) {
surfData . image = surfData . ctx . createImageData ( surfData . width , surfData . height ) ;
}
if ( ! SDL . defaults . opaqueFrontBuffer ) return ;
} else {
surfData . image = surfData . ctx . getImageData ( 0 , 0 , surfData . width , surfData . height ) ;
}
if ( surf == SDL . screen && SDL . defaults . opaqueFrontBuffer ) {
var data = surfData . image . data ;
var num = data . length ;
for ( var i = 0 ; i < num / 4 ; i ++ ) {
data [ i * 4 + 3 ] = 255 ;
}
}
if ( SDL . defaults . copyOnLock && ! SDL . defaults . discardOnLock ) {
if ( surfData . isFlagSet ( 2097152 ) ) {
throw "CopyOnLock is not supported for SDL_LockSurface with SDL_HWPALETTE flag set" + new Error ( ) . stack ;
} else {
HEAPU8 . set ( surfData . image . data , surfData . buffer ) ;
}
}
return 0 ;
}
var SDL = {
defaults : {
width : 320 ,
height : 200 ,
copyOnLock : false ,
discardOnLock : true ,
opaqueFrontBuffer : false
} ,
version : null ,
surfaces : { } ,
canvasPool : [ ] ,
events : [ ] ,
fonts : [ null ] ,
audios : [ null ] ,
rwops : [ null ] ,
music : {
audio : null ,
volume : 1
} ,
mixerFrequency : 22050 ,
mixerFormat : 32784 ,
mixerNumChannels : 2 ,
mixerChunkSize : 1024 ,
channelMinimumNumber : 0 ,
GL : false ,
glAttributes : {
0 : 3 ,
1 : 3 ,
2 : 2 ,
3 : 0 ,
4 : 0 ,
5 : 1 ,
6 : 16 ,
7 : 0 ,
8 : 0 ,
9 : 0 ,
10 : 0 ,
11 : 0 ,
12 : 0 ,
13 : 0 ,
14 : 0 ,
15 : 1 ,
16 : 0 ,
17 : 0 ,
18 : 0
} ,
keyboardState : null ,
keyboardMap : { } ,
canRequestFullscreen : false ,
isRequestingFullscreen : false ,
textInput : false ,
startTime : null ,
initFlags : 0 ,
buttonState : 0 ,
modState : 0 ,
DOMButtons : [ 0 , 0 , 0 ] ,
DOMEventToSDLEvent : { } ,
TOUCH _DEFAULT _ID : 0 ,
eventHandler : null ,
eventHandlerContext : null ,
eventHandlerTemp : 0 ,
keyCodes : {
16 : 1249 ,
17 : 1248 ,
18 : 1250 ,
20 : 1081 ,
33 : 1099 ,
34 : 1102 ,
35 : 1101 ,
36 : 1098 ,
37 : 1104 ,
38 : 1106 ,
39 : 1103 ,
40 : 1105 ,
44 : 316 ,
45 : 1097 ,
46 : 127 ,
91 : 1251 ,
93 : 1125 ,
96 : 1122 ,
97 : 1113 ,
98 : 1114 ,
99 : 1115 ,
100 : 1116 ,
101 : 1117 ,
102 : 1118 ,
103 : 1119 ,
104 : 1120 ,
105 : 1121 ,
106 : 1109 ,
107 : 1111 ,
109 : 1110 ,
110 : 1123 ,
111 : 1108 ,
112 : 1082 ,
113 : 1083 ,
114 : 1084 ,
115 : 1085 ,
116 : 1086 ,
117 : 1087 ,
118 : 1088 ,
119 : 1089 ,
120 : 1090 ,
121 : 1091 ,
122 : 1092 ,
123 : 1093 ,
124 : 1128 ,
125 : 1129 ,
126 : 1130 ,
127 : 1131 ,
128 : 1132 ,
129 : 1133 ,
130 : 1134 ,
131 : 1135 ,
132 : 1136 ,
133 : 1137 ,
134 : 1138 ,
135 : 1139 ,
144 : 1107 ,
160 : 94 ,
161 : 33 ,
162 : 34 ,
163 : 35 ,
164 : 36 ,
165 : 37 ,
166 : 38 ,
167 : 95 ,
168 : 40 ,
169 : 41 ,
170 : 42 ,
171 : 43 ,
172 : 124 ,
173 : 45 ,
174 : 123 ,
175 : 125 ,
176 : 126 ,
181 : 127 ,
182 : 129 ,
183 : 128 ,
188 : 44 ,
190 : 46 ,
191 : 47 ,
192 : 96 ,
219 : 91 ,
220 : 92 ,
221 : 93 ,
222 : 39 ,
224 : 1251
} ,
scanCodes : {
8 : 42 ,
9 : 43 ,
13 : 40 ,
27 : 41 ,
32 : 44 ,
35 : 204 ,
39 : 53 ,
44 : 54 ,
46 : 55 ,
47 : 56 ,
48 : 39 ,
49 : 30 ,
50 : 31 ,
51 : 32 ,
52 : 33 ,
53 : 34 ,
54 : 35 ,
55 : 36 ,
56 : 37 ,
57 : 38 ,
58 : 203 ,
59 : 51 ,
61 : 46 ,
91 : 47 ,
92 : 49 ,
93 : 48 ,
96 : 52 ,
97 : 4 ,
98 : 5 ,
99 : 6 ,
100 : 7 ,
101 : 8 ,
102 : 9 ,
103 : 10 ,
104 : 11 ,
105 : 12 ,
106 : 13 ,
107 : 14 ,
108 : 15 ,
109 : 16 ,
110 : 17 ,
111 : 18 ,
112 : 19 ,
113 : 20 ,
114 : 21 ,
115 : 22 ,
116 : 23 ,
117 : 24 ,
118 : 25 ,
119 : 26 ,
120 : 27 ,
121 : 28 ,
122 : 29 ,
127 : 76 ,
305 : 224 ,
308 : 226 ,
316 : 70
} ,
loadRect : function ( rect ) {
return {
x : HEAP32 [ rect + 0 >> 2 ] ,
y : HEAP32 [ rect + 4 >> 2 ] ,
w : HEAP32 [ rect + 8 >> 2 ] ,
h : HEAP32 [ rect + 12 >> 2 ]
} ;
} ,
updateRect : function ( rect , r ) {
HEAP32 [ rect >> 2 ] = r . x ;
HEAP32 [ rect + 4 >> 2 ] = r . y ;
HEAP32 [ rect + 8 >> 2 ] = r . w ;
HEAP32 [ rect + 12 >> 2 ] = r . h ;
} ,
intersectionOfRects : function ( first , second ) {
var leftX = Math . max ( first . x , second . x ) ;
var leftY = Math . max ( first . y , second . y ) ;
var rightX = Math . min ( first . x + first . w , second . x + second . w ) ;
var rightY = Math . min ( first . y + first . h , second . y + second . h ) ;
return {
x : leftX ,
y : leftY ,
w : Math . max ( leftX , rightX ) - leftX ,
h : Math . max ( leftY , rightY ) - leftY
} ;
} ,
checkPixelFormat : function ( fmt ) { } ,
loadColorToCSSRGB : function ( color ) {
var rgba = HEAP32 [ color >> 2 ] ;
return "rgb(" + ( rgba & 255 ) + "," + ( rgba >> 8 & 255 ) + "," + ( rgba >> 16 & 255 ) + ")" ;
} ,
loadColorToCSSRGBA : function ( color ) {
var rgba = HEAP32 [ color >> 2 ] ;
return "rgba(" + ( rgba & 255 ) + "," + ( rgba >> 8 & 255 ) + "," + ( rgba >> 16 & 255 ) + "," + ( rgba >> 24 & 255 ) / 255 + ")" ;
} ,
translateColorToCSSRGBA : function ( rgba ) {
return "rgba(" + ( rgba & 255 ) + "," + ( rgba >> 8 & 255 ) + "," + ( rgba >> 16 & 255 ) + "," + ( rgba >>> 24 ) / 255 + ")" ;
} ,
translateRGBAToCSSRGBA : function ( r , g , b , a ) {
return "rgba(" + ( r & 255 ) + "," + ( g & 255 ) + "," + ( b & 255 ) + "," + ( a & 255 ) / 255 + ")" ;
} ,
translateRGBAToColor : function ( r , g , b , a ) {
return r | g << 8 | b << 16 | a << 24 ;
} ,
makeSurface : function ( width , height , flags , usePageCanvas , source , rmask , gmask , bmask , amask ) {
flags = flags || 0 ;
var is _SDL _HWSURFACE = flags & 1 ;
var is _SDL _HWPALETTE = flags & 2097152 ;
var is _SDL _OPENGL = flags & 67108864 ;
var surf = _malloc ( 60 ) ;
var pixelFormat = _malloc ( 44 ) ;
var bpp = is _SDL _HWPALETTE ? 1 : 4 ;
var buffer = 0 ;
if ( ! is _SDL _HWSURFACE && ! is _SDL _OPENGL ) {
buffer = _malloc ( width * height * 4 ) ;
}
HEAP32 [ surf >> 2 ] = flags ;
HEAP32 [ surf + 4 >> 2 ] = pixelFormat ;
HEAP32 [ surf + 8 >> 2 ] = width ;
HEAP32 [ surf + 12 >> 2 ] = height ;
HEAP32 [ surf + 16 >> 2 ] = width * bpp ;
HEAP32 [ surf + 20 >> 2 ] = buffer ;
HEAP32 [ surf + 36 >> 2 ] = 0 ;
HEAP32 [ surf + 40 >> 2 ] = 0 ;
HEAP32 [ surf + 44 >> 2 ] = Module [ "canvas" ] . width ;
HEAP32 [ surf + 48 >> 2 ] = Module [ "canvas" ] . height ;
HEAP32 [ surf + 56 >> 2 ] = 1 ;
HEAP32 [ pixelFormat >> 2 ] = - 2042224636 ;
HEAP32 [ pixelFormat + 4 >> 2 ] = 0 ;
HEAP8 [ pixelFormat + 8 >> 0 ] = bpp * 8 ;
HEAP8 [ pixelFormat + 9 >> 0 ] = bpp ;
HEAP32 [ pixelFormat + 12 >> 2 ] = rmask || 255 ;
HEAP32 [ pixelFormat + 16 >> 2 ] = gmask || 65280 ;
HEAP32 [ pixelFormat + 20 >> 2 ] = bmask || 16711680 ;
HEAP32 [ pixelFormat + 24 >> 2 ] = amask || 4278190080 ;
SDL . GL = SDL . GL || is _SDL _OPENGL ;
var canvas ;
if ( ! usePageCanvas ) {
if ( SDL . canvasPool . length > 0 ) {
canvas = SDL . canvasPool . pop ( ) ;
} else {
canvas = document . createElement ( "canvas" ) ;
}
canvas . width = width ;
canvas . height = height ;
} else {
canvas = Module [ "canvas" ] ;
}
var webGLContextAttributes = {
antialias : SDL . glAttributes [ 13 ] != 0 && SDL . glAttributes [ 14 ] > 1 ,
depth : SDL . glAttributes [ 6 ] > 0 ,
stencil : SDL . glAttributes [ 7 ] > 0 ,
alpha : SDL . glAttributes [ 3 ] > 0
} ;
var ctx = Browser . createContext ( canvas , is _SDL _OPENGL , usePageCanvas , webGLContextAttributes ) ;
SDL . surfaces [ surf ] = {
width : width ,
height : height ,
canvas : canvas ,
ctx : ctx ,
surf : surf ,
buffer : buffer ,
pixelFormat : pixelFormat ,
alpha : 255 ,
flags : flags ,
locked : 0 ,
usePageCanvas : usePageCanvas ,
source : source ,
isFlagSet : function ( flag ) {
return flags & flag ;
}
} ;
return surf ;
} ,
copyIndexedColorData : function ( surfData , rX , rY , rW , rH ) {
if ( ! surfData . colors ) {
return ;
}
var fullWidth = Module [ "canvas" ] . width ;
var fullHeight = Module [ "canvas" ] . height ;
var startX = rX || 0 ;
var startY = rY || 0 ;
var endX = ( rW || fullWidth - startX ) + startX ;
var endY = ( rH || fullHeight - startY ) + startY ;
var buffer = surfData . buffer ;
if ( ! surfData . image . data32 ) {
surfData . image . data32 = new Uint32Array ( surfData . image . data . buffer ) ;
}
var data32 = surfData . image . data32 ;
var colors32 = surfData . colors32 ;
for ( var y = startY ; y < endY ; ++ y ) {
var base = y * fullWidth ;
for ( var x = startX ; x < endX ; ++ x ) {
data32 [ base + x ] = colors32 [ HEAPU8 [ buffer + base + x >> 0 ] ] ;
}
}
} ,
freeSurface : function ( surf ) {
var refcountPointer = surf + 56 ;
var refcount = HEAP32 [ refcountPointer >> 2 ] ;
if ( refcount > 1 ) {
HEAP32 [ refcountPointer >> 2 ] = refcount - 1 ;
return ;
}
var info = SDL . surfaces [ surf ] ;
if ( ! info . usePageCanvas && info . canvas ) SDL . canvasPool . push ( info . canvas ) ;
if ( info . buffer ) _free ( info . buffer ) ;
_free ( info . pixelFormat ) ;
_free ( surf ) ;
SDL . surfaces [ surf ] = null ;
if ( surf === SDL . screen ) {
SDL . screen = null ;
}
} ,
blitSurface : function ( src , srcrect , dst , dstrect , scale ) {
var srcData = SDL . surfaces [ src ] ;
var dstData = SDL . surfaces [ dst ] ;
var sr , dr ;
if ( srcrect ) {
sr = SDL . loadRect ( srcrect ) ;
} else {
sr = {
x : 0 ,
y : 0 ,
w : srcData . width ,
h : srcData . height
} ;
}
if ( dstrect ) {
dr = SDL . loadRect ( dstrect ) ;
} else {
dr = {
x : 0 ,
y : 0 ,
w : srcData . width ,
h : srcData . height
} ;
}
if ( dstData . clipRect ) {
var widthScale = ! scale || sr . w === 0 ? 1 : sr . w / dr . w ;
var heightScale = ! scale || sr . h === 0 ? 1 : sr . h / dr . h ;
dr = SDL . intersectionOfRects ( dstData . clipRect , dr ) ;
sr . w = dr . w * widthScale ;
sr . h = dr . h * heightScale ;
if ( dstrect ) {
SDL . updateRect ( dstrect , dr ) ;
}
}
var blitw , blith ;
if ( scale ) {
blitw = dr . w ;
blith = dr . h ;
} else {
blitw = sr . w ;
blith = sr . h ;
}
if ( sr . w === 0 || sr . h === 0 || blitw === 0 || blith === 0 ) {
return 0 ;
}
var oldAlpha = dstData . ctx . globalAlpha ;
dstData . ctx . globalAlpha = srcData . alpha / 255 ;
dstData . ctx . drawImage ( srcData . canvas , sr . x , sr . y , sr . w , sr . h , dr . x , dr . y , blitw , blith ) ;
dstData . ctx . globalAlpha = oldAlpha ;
if ( dst != SDL . screen ) {
warnOnce ( "WARNING: copying canvas data to memory for compatibility" ) ;
_SDL _LockSurface ( dst ) ;
dstData . locked -- ;
}
return 0 ;
} ,
downFingers : { } ,
savedKeydown : null ,
receiveEvent : function ( event ) {
function unpressAllPressedKeys ( ) {
for ( var code in SDL . keyboardMap ) {
SDL . events . push ( {
type : "keyup" ,
keyCode : SDL . keyboardMap [ code ]
} ) ;
}
}
switch ( event . type ) {
case "touchstart" :
case "touchmove" :
{
event . preventDefault ( ) ;
var touches = [ ] ;
if ( event . type === "touchstart" ) {
for ( var i = 0 ; i < event . touches . length ; i ++ ) {
var touch = event . touches [ i ] ;
if ( SDL . downFingers [ touch . identifier ] != true ) {
SDL . downFingers [ touch . identifier ] = true ;
touches . push ( touch ) ;
}
}
} else {
touches = event . touches ;
}
var firstTouch = touches [ 0 ] ;
if ( firstTouch ) {
if ( event . type == "touchstart" ) {
SDL . DOMButtons [ 0 ] = 1 ;
}
var mouseEventType ;
switch ( event . type ) {
case "touchstart" :
mouseEventType = "mousedown" ;
break ;
case "touchmove" :
mouseEventType = "mousemove" ;
break ;
}
var mouseEvent = {
type : mouseEventType ,
button : 0 ,
pageX : firstTouch . clientX ,
pageY : firstTouch . clientY
} ;
SDL . events . push ( mouseEvent ) ;
}
for ( var i = 0 ; i < touches . length ; i ++ ) {
var touch = touches [ i ] ;
SDL . events . push ( {
type : event . type ,
touch : touch
} ) ;
}
break ;
}
case "touchend" :
{
event . preventDefault ( ) ;
for ( var i = 0 ; i < event . changedTouches . length ; i ++ ) {
var touch = event . changedTouches [ i ] ;
if ( SDL . downFingers [ touch . identifier ] === true ) {
delete SDL . downFingers [ touch . identifier ] ;
}
}
var mouseEvent = {
type : "mouseup" ,
button : 0 ,
pageX : event . changedTouches [ 0 ] . clientX ,
pageY : event . changedTouches [ 0 ] . clientY
} ;
SDL . DOMButtons [ 0 ] = 0 ;
SDL . events . push ( mouseEvent ) ;
for ( var i = 0 ; i < event . changedTouches . length ; i ++ ) {
var touch = event . changedTouches [ i ] ;
SDL . events . push ( {
type : "touchend" ,
touch : touch
} ) ;
}
break ;
}
case "DOMMouseScroll" :
case "mousewheel" :
case "wheel" :
var delta = - Browser . getMouseWheelDelta ( event ) ;
delta = delta == 0 ? 0 : delta > 0 ? Math . max ( delta , 1 ) : Math . min ( delta , - 1 ) ;
var button = delta > 0 ? 3 : 4 ;
SDL . events . push ( {
type : "mousedown" ,
button : button ,
pageX : event . pageX ,
pageY : event . pageY
} ) ;
SDL . events . push ( {
type : "mouseup" ,
button : button ,
pageX : event . pageX ,
pageY : event . pageY
} ) ;
SDL . events . push ( {
type : "wheel" ,
deltaX : 0 ,
deltaY : delta
} ) ;
event . preventDefault ( ) ;
break ;
case "mousemove" :
if ( SDL . DOMButtons [ 0 ] === 1 ) {
SDL . events . push ( {
type : "touchmove" ,
touch : {
identifier : 0 ,
deviceID : - 1 ,
pageX : event . pageX ,
pageY : event . pageY
}
} ) ;
}
if ( Browser . pointerLock ) {
if ( "mozMovementX" in event ) {
event [ "movementX" ] = event [ "mozMovementX" ] ;
event [ "movementY" ] = event [ "mozMovementY" ] ;
}
if ( event [ "movementX" ] == 0 && event [ "movementY" ] == 0 ) {
event . preventDefault ( ) ;
return ;
}
}
case "keydown" :
case "keyup" :
case "keypress" :
case "mousedown" :
case "mouseup" :
if ( event . type !== "keydown" || ! SDL . unicode && ! SDL . textInput || ( event . keyCode === 8 || event . keyCode === 9 ) ) { }
if ( event . type == "mousedown" ) {
SDL . DOMButtons [ event . button ] = 1 ;
SDL . events . push ( {
type : "touchstart" ,
touch : {
identifier : 0 ,
deviceID : - 1 ,
pageX : event . pageX ,
pageY : event . pageY
}
} ) ;
} else if ( event . type == "mouseup" ) {
if ( ! SDL . DOMButtons [ event . button ] ) {
return ;
}
SDL . events . push ( {
type : "touchend" ,
touch : {
identifier : 0 ,
deviceID : - 1 ,
pageX : event . pageX ,
pageY : event . pageY
}
} ) ;
SDL . DOMButtons [ event . button ] = 0 ;
}
if ( event . type === "keydown" || event . type === "mousedown" ) {
SDL . canRequestFullscreen = true ;
} else if ( event . type === "keyup" || event . type === "mouseup" ) {
if ( SDL . isRequestingFullscreen ) {
Module [ "requestFullscreen" ] ( false , true ) ;
SDL . isRequestingFullscreen = false ;
}
SDL . canRequestFullscreen = false ;
}
if ( event . type === "keypress" && SDL . savedKeydown ) {
SDL . savedKeydown . keypressCharCode = event . charCode ;
SDL . savedKeydown = null ;
} else if ( event . type === "keydown" ) {
SDL . savedKeydown = event ;
}
if ( event . type !== "keypress" || SDL . textInput ) {
SDL . events . push ( event ) ;
}
break ;
case "mouseout" :
for ( var i = 0 ; i < 3 ; i ++ ) {
if ( SDL . DOMButtons [ i ] ) {
SDL . events . push ( {
type : "mouseup" ,
button : i ,
pageX : event . pageX ,
pageY : event . pageY
} ) ;
SDL . DOMButtons [ i ] = 0 ;
}
}
event . preventDefault ( ) ;
break ;
case "focus" :
SDL . events . push ( event ) ;
event . preventDefault ( ) ;
break ;
case "blur" :
SDL . events . push ( event ) ;
unpressAllPressedKeys ( ) ;
event . preventDefault ( ) ;
break ;
case "visibilitychange" :
SDL . events . push ( {
type : "visibilitychange" ,
visible : ! document . hidden
} ) ;
unpressAllPressedKeys ( ) ;
event . preventDefault ( ) ;
break ;
case "unload" :
if ( Browser . mainLoop . runner ) {
SDL . events . push ( event ) ;
Browser . mainLoop . runner ( ) ;
}
return ;
case "resize" :
SDL . events . push ( event ) ;
if ( event . preventDefault ) {
event . preventDefault ( ) ;
}
break ;
}
if ( SDL . events . length >= 1e4 ) {
err ( "SDL event queue full, dropping events" ) ;
SDL . events = SDL . events . slice ( 0 , 1e4 ) ;
}
SDL . flushEventsToHandler ( ) ;
return ;
} ,
lookupKeyCodeForEvent : function ( event ) {
var code = event . keyCode ;
if ( code >= 65 && code <= 90 ) {
code += 32 ;
} else {
code = SDL . keyCodes [ event . keyCode ] || event . keyCode ;
if ( event . location === KeyboardEvent . DOM _KEY _LOCATION _RIGHT && code >= ( 224 | 1 << 10 ) && code <= ( 227 | 1 << 10 ) ) {
code += 4 ;
}
}
return code ;
} ,
handleEvent : function ( event ) {
if ( event . handled ) return ;
event . handled = true ;
switch ( event . type ) {
case "touchstart" :
case "touchend" :
case "touchmove" :
{
Browser . calculateMouseEvent ( event ) ;
break ;
}
case "keydown" :
case "keyup" :
{
var down = event . type === "keydown" ;
var code = SDL . lookupKeyCodeForEvent ( event ) ;
HEAP8 [ SDL . keyboardState + code >> 0 ] = down ;
SDL . modState = ( HEAP8 [ SDL . keyboardState + 1248 >> 0 ] ? 64 : 0 ) | ( HEAP8 [ SDL . keyboardState + 1249 >> 0 ] ? 1 : 0 ) | ( HEAP8 [ SDL . keyboardState + 1250 >> 0 ] ? 256 : 0 ) | ( HEAP8 [ SDL . keyboardState + 1252 >> 0 ] ? 128 : 0 ) | ( HEAP8 [ SDL . keyboardState + 1253 >> 0 ] ? 2 : 0 ) | ( HEAP8 [ SDL . keyboardState + 1254 >> 0 ] ? 512 : 0 ) ;
if ( down ) {
SDL . keyboardMap [ code ] = event . keyCode ;
} else {
delete SDL . keyboardMap [ code ] ;
}
break ;
}
case "mousedown" :
case "mouseup" :
if ( event . type == "mousedown" ) {
SDL . buttonState |= 1 << event . button ;
} else if ( event . type == "mouseup" ) {
SDL . buttonState &= ~ ( 1 << event . button ) ;
}
case "mousemove" :
{
Browser . calculateMouseEvent ( event ) ;
break ;
}
}
} ,
flushEventsToHandler : function ( ) {
if ( ! SDL . eventHandler ) return ;
while ( SDL . pollEvent ( SDL . eventHandlerTemp ) ) {
Module [ "dynCall_iii" ] ( SDL . eventHandler , SDL . eventHandlerContext , SDL . eventHandlerTemp ) ;
}
} ,
pollEvent : function ( ptr ) {
if ( SDL . initFlags & 512 && SDL . joystickEventState ) {
SDL . queryJoysticks ( ) ;
}
if ( ptr ) {
while ( SDL . events . length > 0 ) {
if ( SDL . makeCEvent ( SDL . events . shift ( ) , ptr ) !== false ) return 1 ;
}
return 0 ;
} else {
return SDL . events . length > 0 ;
}
} ,
makeCEvent : function ( event , ptr ) {
if ( typeof event === "number" ) {
_memcpy ( ptr , event , 28 ) ;
_free ( event ) ;
return ;
}
SDL . handleEvent ( event ) ;
switch ( event . type ) {
case "keydown" :
case "keyup" :
{
var down = event . type === "keydown" ;
var key = SDL . lookupKeyCodeForEvent ( event ) ;
var scan ;
if ( key >= 1024 ) {
scan = key - 1024 ;
} else {
scan = SDL . scanCodes [ key ] || key ;
}
HEAP32 [ ptr >> 2 ] = SDL . DOMEventToSDLEvent [ event . type ] ;
HEAP8 [ ptr + 8 >> 0 ] = down ? 1 : 0 ;
HEAP8 [ ptr + 9 >> 0 ] = 0 ;
HEAP32 [ ptr + 12 >> 2 ] = scan ;
HEAP32 [ ptr + 16 >> 2 ] = key ;
HEAP16 [ ptr + 20 >> 1 ] = SDL . modState ;
HEAP32 [ ptr + 24 >> 2 ] = event . keypressCharCode || key ;
break ;
}
case "keypress" :
{
HEAP32 [ ptr >> 2 ] = SDL . DOMEventToSDLEvent [ event . type ] ;
var cStr = intArrayFromString ( String . fromCharCode ( event . charCode ) ) ;
for ( var i = 0 ; i < cStr . length ; ++ i ) {
HEAP8 [ ptr + ( 8 + i ) >> 0 ] = cStr [ i ] ;
}
break ;
}
case "mousedown" :
case "mouseup" :
case "mousemove" :
{
if ( event . type != "mousemove" ) {
var down = event . type === "mousedown" ;
HEAP32 [ ptr >> 2 ] = SDL . DOMEventToSDLEvent [ event . type ] ;
HEAP32 [ ptr + 4 >> 2 ] = 0 ;
HEAP32 [ ptr + 8 >> 2 ] = 0 ;
HEAP32 [ ptr + 12 >> 2 ] = 0 ;
HEAP8 [ ptr + 16 >> 0 ] = event . button + 1 ;
HEAP8 [ ptr + 17 >> 0 ] = down ? 1 : 0 ;
HEAP32 [ ptr + 20 >> 2 ] = Browser . mouseX ;
HEAP32 [ ptr + 24 >> 2 ] = Browser . mouseY ;
} else {
HEAP32 [ ptr >> 2 ] = SDL . DOMEventToSDLEvent [ event . type ] ;
HEAP32 [ ptr + 4 >> 2 ] = 0 ;
HEAP32 [ ptr + 8 >> 2 ] = 0 ;
HEAP32 [ ptr + 12 >> 2 ] = 0 ;
HEAP32 [ ptr + 16 >> 2 ] = SDL . buttonState ;
HEAP32 [ ptr + 20 >> 2 ] = Browser . mouseX ;
HEAP32 [ ptr + 24 >> 2 ] = Browser . mouseY ;
HEAP32 [ ptr + 28 >> 2 ] = Browser . mouseMovementX ;
HEAP32 [ ptr + 32 >> 2 ] = Browser . mouseMovementY ;
}
break ;
}
case "wheel" :
{
HEAP32 [ ptr >> 2 ] = SDL . DOMEventToSDLEvent [ event . type ] ;
HEAP32 [ ptr + 16 >> 2 ] = event . deltaX ;
HEAP32 [ ptr + 20 >> 2 ] = event . deltaY ;
break ;
}
case "touchstart" :
case "touchend" :
case "touchmove" :
{
var touch = event . touch ;
if ( ! Browser . touches [ touch . identifier ] ) break ;
var w = Module [ "canvas" ] . width ;
var h = Module [ "canvas" ] . height ;
var x = Browser . touches [ touch . identifier ] . x / w ;
var y = Browser . touches [ touch . identifier ] . y / h ;
var lx = Browser . lastTouches [ touch . identifier ] . x / w ;
var ly = Browser . lastTouches [ touch . identifier ] . y / h ;
var dx = x - lx ;
var dy = y - ly ;
if ( touch [ "deviceID" ] === undefined ) touch . deviceID = SDL . TOUCH _DEFAULT _ID ;
if ( dx === 0 && dy === 0 && event . type === "touchmove" ) return false ;
HEAP32 [ ptr >> 2 ] = SDL . DOMEventToSDLEvent [ event . type ] ;
HEAP32 [ ptr + 4 >> 2 ] = _SDL _GetTicks ( ) ;
tempI64 = [ touch . deviceID >>> 0 , ( tempDouble = touch . deviceID , + Math _abs ( tempDouble ) >= + 1 ? tempDouble > + 0 ? ( Math _min ( + Math _floor ( tempDouble / + 4294967296 ) , + 4294967295 ) | 0 ) >>> 0 : ~ ~ + Math _ceil ( ( tempDouble - + ( ~ ~ tempDouble >>> 0 ) ) / + 4294967296 ) >>> 0 : 0 ) ] ,
HEAP32 [ ptr + 8 >> 2 ] = tempI64 [ 0 ] , HEAP32 [ ptr + 12 >> 2 ] = tempI64 [ 1 ] ;
tempI64 = [ touch . identifier >>> 0 , ( tempDouble = touch . identifier , + Math _abs ( tempDouble ) >= + 1 ? tempDouble > + 0 ? ( Math _min ( + Math _floor ( tempDouble / + 4294967296 ) , + 4294967295 ) | 0 ) >>> 0 : ~ ~ + Math _ceil ( ( tempDouble - + ( ~ ~ tempDouble >>> 0 ) ) / + 4294967296 ) >>> 0 : 0 ) ] ,
HEAP32 [ ptr + 16 >> 2 ] = tempI64 [ 0 ] , HEAP32 [ ptr + 20 >> 2 ] = tempI64 [ 1 ] ;
HEAPF32 [ ptr + 24 >> 2 ] = x ;
HEAPF32 [ ptr + 28 >> 2 ] = y ;
HEAPF32 [ ptr + 32 >> 2 ] = dx ;
HEAPF32 [ ptr + 36 >> 2 ] = dy ;
if ( touch . force !== undefined ) {
HEAPF32 [ ptr + 40 >> 2 ] = touch . force ;
} else {
HEAPF32 [ ptr + 40 >> 2 ] = event . type == "touchend" ? 0 : 1 ;
}
break ;
}
case "unload" :
{
HEAP32 [ ptr >> 2 ] = SDL . DOMEventToSDLEvent [ event . type ] ;
break ;
}
case "resize" :
{
HEAP32 [ ptr >> 2 ] = SDL . DOMEventToSDLEvent [ event . type ] ;
HEAP32 [ ptr + 4 >> 2 ] = event . w ;
HEAP32 [ ptr + 8 >> 2 ] = event . h ;
break ;
}
case "joystick_button_up" :
case "joystick_button_down" :
{
var state = event . type === "joystick_button_up" ? 0 : 1 ;
HEAP32 [ ptr >> 2 ] = SDL . DOMEventToSDLEvent [ event . type ] ;
HEAP8 [ ptr + 4 >> 0 ] = event . index ;
HEAP8 [ ptr + 5 >> 0 ] = event . button ;
HEAP8 [ ptr + 6 >> 0 ] = state ;
break ;
}
case "joystick_axis_motion" :
{
HEAP32 [ ptr >> 2 ] = SDL . DOMEventToSDLEvent [ event . type ] ;
HEAP8 [ ptr + 4 >> 0 ] = event . index ;
HEAP8 [ ptr + 5 >> 0 ] = event . axis ;
HEAP32 [ ptr + 8 >> 2 ] = SDL . joystickAxisValueConversion ( event . value ) ;
break ;
}
case "focus" :
{
var SDL _WINDOWEVENT _FOCUS _GAINED = 12 ;
HEAP32 [ ptr >> 2 ] = SDL . DOMEventToSDLEvent [ event . type ] ;
HEAP32 [ ptr + 4 >> 2 ] = 0 ;
HEAP8 [ ptr + 8 >> 0 ] = SDL _WINDOWEVENT _FOCUS _GAINED ;
break ;
}
case "blur" :
{
var SDL _WINDOWEVENT _FOCUS _LOST = 13 ;
HEAP32 [ ptr >> 2 ] = SDL . DOMEventToSDLEvent [ event . type ] ;
HEAP32 [ ptr + 4 >> 2 ] = 0 ;
HEAP8 [ ptr + 8 >> 0 ] = SDL _WINDOWEVENT _FOCUS _LOST ;
break ;
}
case "visibilitychange" :
{
var SDL _WINDOWEVENT _SHOWN = 1 ;
var SDL _WINDOWEVENT _HIDDEN = 2 ;
var visibilityEventID = event . visible ? SDL _WINDOWEVENT _SHOWN : SDL _WINDOWEVENT _HIDDEN ;
HEAP32 [ ptr >> 2 ] = SDL . DOMEventToSDLEvent [ event . type ] ;
HEAP32 [ ptr + 4 >> 2 ] = 0 ;
HEAP8 [ ptr + 8 >> 0 ] = visibilityEventID ;
break ;
}
default :
throw "Unhandled SDL event: " + event . type ;
}
} ,
makeFontString : function ( height , fontName ) {
if ( fontName . charAt ( 0 ) != "'" && fontName . charAt ( 0 ) != '"' ) {
fontName = '"' + fontName + '"' ;
}
return height + "px " + fontName + ", serif" ;
} ,
estimateTextWidth : function ( fontData , text ) {
var h = fontData . size ;
var fontString = SDL . makeFontString ( h , fontData . name ) ;
var tempCtx = SDL . ttfContext ;
tempCtx . save ( ) ;
tempCtx . font = fontString ;
var ret = tempCtx . measureText ( text ) . width | 0 ;
tempCtx . restore ( ) ;
return ret ;
} ,
allocateChannels : function ( num ) {
if ( SDL . numChannels && SDL . numChannels >= num && num != 0 ) return ;
SDL . numChannels = num ;
SDL . channels = [ ] ;
for ( var i = 0 ; i < num ; i ++ ) {
SDL . channels [ i ] = {
audio : null ,
volume : 1
} ;
}
} ,
setGetVolume : function ( info , volume ) {
if ( ! info ) return 0 ;
var ret = info . volume * 128 ;
if ( volume != - 1 ) {
info . volume = Math . min ( Math . max ( volume , 0 ) , 128 ) / 128 ;
if ( info . audio ) {
try {
info . audio . volume = info . volume ;
if ( info . audio . webAudioGainNode ) info . audio . webAudioGainNode [ "gain" ] [ "value" ] = info . volume ;
} catch ( e ) {
err ( "setGetVolume failed to set audio volume: " + e ) ;
}
}
}
return ret ;
} ,
setPannerPosition : function ( info , x , y , z ) {
if ( ! info ) return ;
if ( info . audio ) {
if ( info . audio . webAudioPannerNode ) {
info . audio . webAudioPannerNode [ "setPosition" ] ( x , y , z ) ;
}
}
} ,
playWebAudio : function ( audio ) {
if ( ! audio ) return ;
if ( audio . webAudioNode ) return ;
if ( ! SDL . webAudioAvailable ( ) ) return ;
try {
var webAudio = audio . resource . webAudio ;
audio . paused = false ;
if ( ! webAudio . decodedBuffer ) {
if ( webAudio . onDecodeComplete === undefined ) abort ( "Cannot play back audio object that was not loaded" ) ;
webAudio . onDecodeComplete . push ( function ( ) {
if ( ! audio . paused ) SDL . playWebAudio ( audio ) ;
} ) ;
return ;
}
audio . webAudioNode = SDL . audioContext [ "createBufferSource" ] ( ) ;
audio . webAudioNode [ "buffer" ] = webAudio . decodedBuffer ;
audio . webAudioNode [ "loop" ] = audio . loop ;
audio . webAudioNode [ "onended" ] = function ( ) {
audio [ "onended" ] ( ) ;
} ;
audio . webAudioPannerNode = SDL . audioContext [ "createPanner" ] ( ) ;
audio . webAudioPannerNode [ "setPosition" ] ( 0 , 0 , - . 5 ) ;
audio . webAudioPannerNode [ "panningModel" ] = "equalpower" ;
audio . webAudioGainNode = SDL . audioContext [ "createGain" ] ( ) ;
audio . webAudioGainNode [ "gain" ] [ "value" ] = audio . volume ;
audio . webAudioNode [ "connect" ] ( audio . webAudioPannerNode ) ;
audio . webAudioPannerNode [ "connect" ] ( audio . webAudioGainNode ) ;
audio . webAudioGainNode [ "connect" ] ( SDL . audioContext [ "destination" ] ) ;
audio . webAudioNode [ "start" ] ( 0 , audio . currentPosition ) ;
audio . startTime = SDL . audioContext [ "currentTime" ] - audio . currentPosition ;
} catch ( e ) {
err ( "playWebAudio failed: " + e ) ;
}
} ,
pauseWebAudio : function ( audio ) {
if ( ! audio ) return ;
if ( audio . webAudioNode ) {
try {
audio . currentPosition = ( SDL . audioContext [ "currentTime" ] - audio . startTime ) % audio . resource . webAudio . decodedBuffer . duration ;
audio . webAudioNode [ "onended" ] = undefined ;
audio . webAudioNode . stop ( 0 ) ;
audio . webAudioNode = undefined ;
} catch ( e ) {
err ( "pauseWebAudio failed: " + e ) ;
}
}
audio . paused = true ;
} ,
openAudioContext : function ( ) {
if ( ! SDL . audioContext ) {
if ( typeof AudioContext !== "undefined" ) SDL . audioContext = new AudioContext ( ) ; else if ( typeof webkitAudioContext !== "undefined" ) SDL . audioContext = new webkitAudioContext ( ) ;
}
} ,
webAudioAvailable : function ( ) {
return ! ! SDL . audioContext ;
} ,
fillWebAudioBufferFromHeap : function ( heapPtr , sizeSamplesPerChannel , dstAudioBuffer ) {
var numChannels = SDL . audio . channels ;
for ( var c = 0 ; c < numChannels ; ++ c ) {
var channelData = dstAudioBuffer [ "getChannelData" ] ( c ) ;
if ( channelData . length != sizeSamplesPerChannel ) {
throw "Web Audio output buffer length mismatch! Destination size: " + channelData . length + " samples vs expected " + sizeSamplesPerChannel + " samples!" ;
}
if ( SDL . audio . format == 32784 ) {
for ( var j = 0 ; j < sizeSamplesPerChannel ; ++ j ) {
channelData [ j ] = HEAP16 [ heapPtr + ( j * numChannels + c ) * 2 >> 1 ] / 32768 ;
}
} else if ( SDL . audio . format == 8 ) {
for ( var j = 0 ; j < sizeSamplesPerChannel ; ++ j ) {
var v = HEAP8 [ heapPtr + ( j * numChannels + c ) >> 0 ] ;
channelData [ j ] = ( v >= 0 ? v - 128 : v + 128 ) / 128 ;
}
} else if ( SDL . audio . format == 33056 ) {
for ( var j = 0 ; j < sizeSamplesPerChannel ; ++ j ) {
channelData [ j ] = HEAPF32 [ heapPtr + ( j * numChannels + c ) * 4 >> 2 ] ;
}
} else {
throw "Invalid SDL audio format " + SDL . audio . format + "!" ;
}
}
} ,
debugSurface : function ( surfData ) {
console . log ( "dumping surface " + [ surfData . surf , surfData . source , surfData . width , surfData . height ] ) ;
var image = surfData . ctx . getImageData ( 0 , 0 , surfData . width , surfData . height ) ;
var data = image . data ;
var num = Math . min ( surfData . width , surfData . height ) ;
for ( var i = 0 ; i < num ; i ++ ) {
console . log ( " diagonal " + i + ":" + [ data [ i * surfData . width * 4 + i * 4 + 0 ] , data [ i * surfData . width * 4 + i * 4 + 1 ] , data [ i * surfData . width * 4 + i * 4 + 2 ] , data [ i * surfData . width * 4 + i * 4 + 3 ] ] ) ;
}
} ,
joystickEventState : 1 ,
lastJoystickState : { } ,
joystickNamePool : { } ,
recordJoystickState : function ( joystick , state ) {
var buttons = new Array ( state . buttons . length ) ;
for ( var i = 0 ; i < state . buttons . length ; i ++ ) {
buttons [ i ] = SDL . getJoystickButtonState ( state . buttons [ i ] ) ;
}
SDL . lastJoystickState [ joystick ] = {
buttons : buttons ,
axes : state . axes . slice ( 0 ) ,
timestamp : state . timestamp ,
index : state . index ,
id : state . id
} ;
} ,
getJoystickButtonState : function ( button ) {
if ( typeof button === "object" ) {
return button [ "pressed" ] ;
} else {
return button > 0 ;
}
} ,
queryJoysticks : function ( ) {
for ( var joystick in SDL . lastJoystickState ) {
var state = SDL . getGamepad ( joystick - 1 ) ;
var prevState = SDL . lastJoystickState [ joystick ] ;
if ( typeof state === "undefined" ) return ;
if ( state === null ) return ;
if ( typeof state . timestamp !== "number" || state . timestamp !== prevState . timestamp || ! state . timestamp ) {
var i ;
for ( i = 0 ; i < state . buttons . length ; i ++ ) {
var buttonState = SDL . getJoystickButtonState ( state . buttons [ i ] ) ;
if ( buttonState !== prevState . buttons [ i ] ) {
SDL . events . push ( {
type : buttonState ? "joystick_button_down" : "joystick_button_up" ,
joystick : joystick ,
index : joystick - 1 ,
button : i
} ) ;
}
}
for ( i = 0 ; i < state . axes . length ; i ++ ) {
if ( state . axes [ i ] !== prevState . axes [ i ] ) {
SDL . events . push ( {
type : "joystick_axis_motion" ,
joystick : joystick ,
index : joystick - 1 ,
axis : i ,
value : state . axes [ i ]
} ) ;
}
}
SDL . recordJoystickState ( joystick , state ) ;
}
}
} ,
joystickAxisValueConversion : function ( value ) {
value = Math . min ( 1 , Math . max ( value , - 1 ) ) ;
return Math . ceil ( ( value + 1 ) * 32767.5 - 32768 ) ;
} ,
getGamepads : function ( ) {
var fcn = navigator . getGamepads || navigator . webkitGamepads || navigator . mozGamepads || navigator . gamepads || navigator . webkitGetGamepads ;
if ( fcn !== undefined ) {
return fcn . apply ( navigator ) ;
} else {
return [ ] ;
}
} ,
getGamepad : function ( deviceIndex ) {
var gamepads = SDL . getGamepads ( ) ;
if ( gamepads . length > deviceIndex && deviceIndex >= 0 ) {
return gamepads [ deviceIndex ] ;
}
return null ;
}
} ;
function _SDL _ClearError ( ) { }
function _SDL _GetError ( ) {
if ( ! SDL . errorMessage ) {
SDL . errorMessage = allocate ( intArrayFromString ( "unknown SDL-emscripten error" ) , "i8" , ALLOC _NORMAL ) ;
}
return SDL . errorMessage ;
}
function _SDL _GetModState ( ) {
return SDL . modState ;
}
function _SDL _GetMouseState ( x , y ) {
if ( x ) HEAP32 [ x >> 2 ] = Browser . mouseX ;
if ( y ) HEAP32 [ y >> 2 ] = Browser . mouseY ;
return SDL . buttonState ;
}
function _SDL _GetWindowSize ( window , width , height ) {
var w = Module [ "canvas" ] . width ;
var h = Module [ "canvas" ] . height ;
if ( width ) HEAP32 [ width >> 2 ] = w ;
if ( height ) HEAP32 [ height >> 2 ] = h ;
}
function _SDL _Init ( initFlags ) {
SDL . startTime = Date . now ( ) ;
SDL . initFlags = initFlags ;
if ( ! Module [ "doNotCaptureKeyboard" ] ) {
var keyboardListeningElement = Module [ "keyboardListeningElement" ] || document ;
keyboardListeningElement . addEventListener ( "keydown" , SDL . receiveEvent ) ;
keyboardListeningElement . addEventListener ( "keyup" , SDL . receiveEvent ) ;
keyboardListeningElement . addEventListener ( "keypress" , SDL . receiveEvent ) ;
window . addEventListener ( "focus" , SDL . receiveEvent ) ;
window . addEventListener ( "blur" , SDL . receiveEvent ) ;
document . addEventListener ( "visibilitychange" , SDL . receiveEvent ) ;
}
window . addEventListener ( "unload" , SDL . receiveEvent ) ;
SDL . keyboardState = _malloc ( 65536 ) ;
_memset ( SDL . keyboardState , 0 , 65536 ) ;
SDL . DOMEventToSDLEvent [ "keydown" ] = 768 ;
SDL . DOMEventToSDLEvent [ "keyup" ] = 769 ;
SDL . DOMEventToSDLEvent [ "keypress" ] = 771 ;
SDL . DOMEventToSDLEvent [ "mousedown" ] = 1025 ;
SDL . DOMEventToSDLEvent [ "mouseup" ] = 1026 ;
SDL . DOMEventToSDLEvent [ "mousemove" ] = 1024 ;
SDL . DOMEventToSDLEvent [ "wheel" ] = 1027 ;
SDL . DOMEventToSDLEvent [ "touchstart" ] = 1792 ;
SDL . DOMEventToSDLEvent [ "touchend" ] = 1793 ;
SDL . DOMEventToSDLEvent [ "touchmove" ] = 1794 ;
SDL . DOMEventToSDLEvent [ "unload" ] = 256 ;
SDL . DOMEventToSDLEvent [ "resize" ] = 28673 ;
SDL . DOMEventToSDLEvent [ "visibilitychange" ] = 512 ;
SDL . DOMEventToSDLEvent [ "focus" ] = 512 ;
SDL . DOMEventToSDLEvent [ "blur" ] = 512 ;
SDL . DOMEventToSDLEvent [ "joystick_axis_motion" ] = 1536 ;
SDL . DOMEventToSDLEvent [ "joystick_button_down" ] = 1539 ;
SDL . DOMEventToSDLEvent [ "joystick_button_up" ] = 1540 ;
return 0 ;
}
function _SDL _LockAudio ( ) { }
function _SDL _PollEvent ( ptr ) {
return SDL . pollEvent ( ptr ) ;
}
var GL = {
counter : 1 ,
lastError : 0 ,
buffers : [ ] ,
mappedBuffers : { } ,
programs : [ ] ,
framebuffers : [ ] ,
renderbuffers : [ ] ,
textures : [ ] ,
uniforms : [ ] ,
shaders : [ ] ,
vaos : [ ] ,
contexts : { } ,
currentContext : null ,
offscreenCanvases : { } ,
timerQueriesEXT : [ ] ,
programInfos : { } ,
stringCache : { } ,
unpackAlignment : 4 ,
init : function ( ) {
GL . miniTempBuffer = new Float32Array ( GL . MINI _TEMP _BUFFER _SIZE ) ;
for ( var i = 0 ; i < GL . MINI _TEMP _BUFFER _SIZE ; i ++ ) {
GL . miniTempBufferViews [ i ] = GL . miniTempBuffer . subarray ( 0 , i + 1 ) ;
}
} ,
recordError : function recordError ( errorCode ) {
if ( ! GL . lastError ) {
GL . lastError = errorCode ;
}
} ,
getNewId : function ( table ) {
var ret = GL . counter ++ ;
for ( var i = table . length ; i < ret ; i ++ ) {
table [ i ] = null ;
}
return ret ;
} ,
MINI _TEMP _BUFFER _SIZE : 256 ,
miniTempBuffer : null ,
miniTempBufferViews : [ 0 ] ,
getSource : function ( shader , count , string , length ) {
var source = "" ;
for ( var i = 0 ; i < count ; ++ i ) {
var len = length ? HEAP32 [ length + i * 4 >> 2 ] : - 1 ;
source += UTF8ToString ( HEAP32 [ string + i * 4 >> 2 ] , len < 0 ? undefined : len ) ;
}
return source ;
} ,
createContext : function ( canvas , webGLContextAttributes ) {
var ctx = canvas . getContext ( "webgl" , webGLContextAttributes ) || canvas . getContext ( "experimental-webgl" , webGLContextAttributes ) ;
return ctx && GL . registerContext ( ctx , webGLContextAttributes ) ;
} ,
registerContext : function ( ctx , webGLContextAttributes ) {
var handle = _malloc ( 8 ) ;
var context = {
handle : handle ,
attributes : webGLContextAttributes ,
version : webGLContextAttributes . majorVersion ,
GLctx : ctx
} ;
if ( ctx . canvas ) ctx . canvas . GLctxObject = context ;
GL . contexts [ handle ] = context ;
if ( typeof webGLContextAttributes . enableExtensionsByDefault === "undefined" || webGLContextAttributes . enableExtensionsByDefault ) {
GL . initExtensions ( context ) ;
}
return handle ;
} ,
makeContextCurrent : function ( contextHandle ) {
GL . currentContext = GL . contexts [ contextHandle ] ;
Module . ctx = GLctx = GL . currentContext && GL . currentContext . GLctx ;
return ! ( contextHandle && ! GLctx ) ;
} ,
getContext : function ( contextHandle ) {
return GL . contexts [ contextHandle ] ;
} ,
deleteContext : function ( contextHandle ) {
if ( GL . currentContext === GL . contexts [ contextHandle ] ) GL . currentContext = null ;
if ( typeof JSEvents === "object" ) JSEvents . removeAllHandlersOnTarget ( GL . contexts [ contextHandle ] . GLctx . canvas ) ;
if ( GL . contexts [ contextHandle ] && GL . contexts [ contextHandle ] . GLctx . canvas ) GL . contexts [ contextHandle ] . GLctx . canvas . GLctxObject = undefined ;
_free ( GL . contexts [ contextHandle ] ) ;
GL . contexts [ contextHandle ] = null ;
} ,
initExtensions : function ( context ) {
if ( ! context ) context = GL . currentContext ;
if ( context . initExtensionsDone ) return ;
context . initExtensionsDone = true ;
var GLctx = context . GLctx ;
if ( context . version < 2 ) {
var instancedArraysExt = GLctx . getExtension ( "ANGLE_instanced_arrays" ) ;
if ( instancedArraysExt ) {
GLctx [ "vertexAttribDivisor" ] = function ( index , divisor ) {
instancedArraysExt [ "vertexAttribDivisorANGLE" ] ( index , divisor ) ;
} ;
GLctx [ "drawArraysInstanced" ] = function ( mode , first , count , primcount ) {
instancedArraysExt [ "drawArraysInstancedANGLE" ] ( mode , first , count , primcount ) ;
} ;
GLctx [ "drawElementsInstanced" ] = function ( mode , count , type , indices , primcount ) {
instancedArraysExt [ "drawElementsInstancedANGLE" ] ( mode , count , type , indices , primcount ) ;
} ;
}
var vaoExt = GLctx . getExtension ( "OES_vertex_array_object" ) ;
if ( vaoExt ) {
GLctx [ "createVertexArray" ] = function ( ) {
return vaoExt [ "createVertexArrayOES" ] ( ) ;
} ;
GLctx [ "deleteVertexArray" ] = function ( vao ) {
vaoExt [ "deleteVertexArrayOES" ] ( vao ) ;
} ;
GLctx [ "bindVertexArray" ] = function ( vao ) {
vaoExt [ "bindVertexArrayOES" ] ( vao ) ;
} ;
GLctx [ "isVertexArray" ] = function ( vao ) {
return vaoExt [ "isVertexArrayOES" ] ( vao ) ;
} ;
}
var drawBuffersExt = GLctx . getExtension ( "WEBGL_draw_buffers" ) ;
if ( drawBuffersExt ) {
GLctx [ "drawBuffers" ] = function ( n , bufs ) {
drawBuffersExt [ "drawBuffersWEBGL" ] ( n , bufs ) ;
} ;
}
}
GLctx . disjointTimerQueryExt = GLctx . getExtension ( "EXT_disjoint_timer_query" ) ;
var automaticallyEnabledExtensions = [ "OES_texture_float" , "OES_texture_half_float" , "OES_standard_derivatives" , "OES_vertex_array_object" , "WEBGL_compressed_texture_s3tc" , "WEBGL_depth_texture" , "OES_element_index_uint" , "EXT_texture_filter_anisotropic" , "EXT_frag_depth" , "WEBGL_draw_buffers" , "ANGLE_instanced_arrays" , "OES_texture_float_linear" , "OES_texture_half_float_linear" , "EXT_blend_minmax" , "EXT_shader_texture_lod" , "WEBGL_compressed_texture_pvrtc" , "EXT_color_buffer_half_float" , "WEBGL_color_buffer_float" , "EXT_sRGB" , "WEBGL_compressed_texture_etc1" , "EXT_disjoint_timer_query" , "WEBGL_compressed_texture_etc" , "WEBGL_compressed_texture_astc" , "EXT_color_buffer_float" , "WEBGL_compressed_texture_s3tc_srgb" , "EXT_disjoint_timer_query_webgl2" ] ;
var exts = GLctx . getSupportedExtensions ( ) ;
if ( exts && exts . length > 0 ) {
GLctx . getSupportedExtensions ( ) . forEach ( function ( ext ) {
if ( automaticallyEnabledExtensions . indexOf ( ext ) != - 1 ) {
GLctx . getExtension ( ext ) ;
}
} ) ;
}
} ,
populateUniformTable : function ( program ) {
var p = GL . programs [ program ] ;
var ptable = GL . programInfos [ program ] = {
uniforms : { } ,
maxUniformLength : 0 ,
maxAttributeLength : - 1 ,
maxUniformBlockNameLength : - 1
} ;
var utable = ptable . uniforms ;
var numUniforms = GLctx . getProgramParameter ( p , 35718 ) ;
for ( var i = 0 ; i < numUniforms ; ++ i ) {
var u = GLctx . getActiveUniform ( p , i ) ;
var name = u . name ;
ptable . maxUniformLength = Math . max ( ptable . maxUniformLength , name . length + 1 ) ;
var ls = name . lastIndexOf ( "[" ) ;
if ( ls > 0 ) {
name = name . slice ( 0 , ls ) ;
}
var loc = GLctx . getUniformLocation ( p , name ) ;
if ( loc ) {
var id = GL . getNewId ( GL . uniforms ) ;
utable [ name ] = [ u . size , id ] ;
GL . uniforms [ id ] = loc ;
for ( var j = 1 ; j < u . size ; ++ j ) {
var n = name + "[" + j + "]" ;
loc = GLctx . getUniformLocation ( p , n ) ;
id = GL . getNewId ( GL . uniforms ) ;
GL . uniforms [ id ] = loc ;
}
}
}
}
} ;
function _SDL _SetVideoMode ( width , height , depth , flags ) {
[ "touchstart" , "touchend" , "touchmove" , "mousedown" , "mouseup" , "mousemove" , "DOMMouseScroll" , "mousewheel" , "wheel" , "mouseout" ] . forEach ( function ( event ) {
Module [ "canvas" ] . addEventListener ( event , SDL . receiveEvent , true ) ;
} ) ;
var canvas = Module [ "canvas" ] ;
if ( width == 0 && height == 0 ) {
width = canvas . width ;
height = canvas . height ;
}
if ( ! SDL . addedResizeListener ) {
SDL . addedResizeListener = true ;
Browser . resizeListeners . push ( function ( w , h ) {
if ( ! SDL . settingVideoMode ) {
SDL . receiveEvent ( {
type : "resize" ,
w : w ,
h : h
} ) ;
}
} ) ;
}
SDL . settingVideoMode = true ;
Browser . setCanvasSize ( width , height ) ;
SDL . settingVideoMode = false ;
if ( SDL . screen ) {
SDL . freeSurface ( SDL . screen ) ;
assert ( ! SDL . screen ) ;
}
if ( SDL . GL ) flags = flags | 67108864 ;
SDL . screen = SDL . makeSurface ( width , height , flags , true , "screen" ) ;
return SDL . screen ;
}
function _SDL _UnlockAudio ( ) { }
function _SDL _UnlockSurface ( surf ) {
assert ( ! SDL . GL ) ;
var surfData = SDL . surfaces [ surf ] ;
if ( ! surfData . locked || -- surfData . locked > 0 ) {
return ;
}
if ( surfData . isFlagSet ( 2097152 ) ) {
SDL . copyIndexedColorData ( surfData ) ;
} else if ( ! surfData . colors ) {
var data = surfData . image . data ;
var buffer = surfData . buffer ;
assert ( buffer % 4 == 0 , "Invalid buffer offset: " + buffer ) ;
var src = buffer >> 2 ;
var dst = 0 ;
var isScreen = surf == SDL . screen ;
var num ;
if ( typeof CanvasPixelArray !== "undefined" && data instanceof CanvasPixelArray ) {
num = data . length ;
while ( dst < num ) {
var val = HEAP32 [ src ] ;
data [ dst ] = val & 255 ;
data [ dst + 1 ] = val >> 8 & 255 ;
data [ dst + 2 ] = val >> 16 & 255 ;
data [ dst + 3 ] = isScreen ? 255 : val >> 24 & 255 ;
src ++ ;
dst += 4 ;
}
} else {
var data32 = new Uint32Array ( data . buffer ) ;
if ( isScreen && SDL . defaults . opaqueFrontBuffer ) {
num = data32 . length ;
data32 . set ( HEAP32 . subarray ( src , src + num ) ) ;
var data8 = new Uint8Array ( data . buffer ) ;
var i = 3 ;
var j = i + 4 * num ;
if ( num % 8 == 0 ) {
while ( i < j ) {
data8 [ i ] = 255 ;
i = i + 4 | 0 ;
data8 [ i ] = 255 ;
i = i + 4 | 0 ;
data8 [ i ] = 255 ;
i = i + 4 | 0 ;
data8 [ i ] = 255 ;
i = i + 4 | 0 ;
data8 [ i ] = 255 ;
i = i + 4 | 0 ;
data8 [ i ] = 255 ;
i = i + 4 | 0 ;
data8 [ i ] = 255 ;
i = i + 4 | 0 ;
data8 [ i ] = 255 ;
i = i + 4 | 0 ;
}
} else {
while ( i < j ) {
data8 [ i ] = 255 ;
i = i + 4 | 0 ;
}
}
} else {
data32 . set ( HEAP32 . subarray ( src , src + data32 . length ) ) ;
}
}
} else {
var width = Module [ "canvas" ] . width ;
var height = Module [ "canvas" ] . height ;
var s = surfData . buffer ;
var data = surfData . image . data ;
var colors = surfData . colors ;
for ( var y = 0 ; y < height ; y ++ ) {
var base = y * width * 4 ;
for ( var x = 0 ; x < width ; x ++ ) {
var val = HEAPU8 [ s ++ >> 0 ] * 4 ;
var start = base + x * 4 ;
data [ start ] = colors [ val ] ;
data [ start + 1 ] = colors [ val + 1 ] ;
data [ start + 2 ] = colors [ val + 2 ] ;
}
s += width * 3 ;
}
}
surfData . ctx . putImageData ( surfData . image , 0 , 0 ) ;
}
var ENV = { } ;
function _ _ _buildEnvironment ( environ ) {
var MAX _ENV _VALUES = 64 ;
var TOTAL _ENV _SIZE = 1024 ;
var poolPtr ;
var envPtr ;
if ( ! _ _ _buildEnvironment . called ) {
_ _ _buildEnvironment . called = true ;
ENV [ "USER" ] = ENV [ "LOGNAME" ] = "web_user" ;
ENV [ "PATH" ] = "/" ;
ENV [ "PWD" ] = "/" ;
ENV [ "HOME" ] = "/home/web_user" ;
ENV [ "LANG" ] = "C.UTF-8" ;
ENV [ "_" ] = Module [ "thisProgram" ] ;
poolPtr = getMemory ( TOTAL _ENV _SIZE ) ;
envPtr = getMemory ( MAX _ENV _VALUES * 4 ) ;
HEAP32 [ envPtr >> 2 ] = poolPtr ;
HEAP32 [ environ >> 2 ] = envPtr ;
} else {
envPtr = HEAP32 [ environ >> 2 ] ;
poolPtr = HEAP32 [ envPtr >> 2 ] ;
}
var strings = [ ] ;
var totalSize = 0 ;
for ( var key in ENV ) {
if ( typeof ENV [ key ] === "string" ) {
var line = key + "=" + ENV [ key ] ;
strings . push ( line ) ;
totalSize += line . length ;
}
}
if ( totalSize > TOTAL _ENV _SIZE ) {
throw new Error ( "Environment size exceeded TOTAL_ENV_SIZE!" ) ;
}
var ptrSize = 4 ;
for ( var i = 0 ; i < strings . length ; i ++ ) {
var line = strings [ i ] ;
writeAsciiToMemory ( line , poolPtr ) ;
HEAP32 [ envPtr + i * ptrSize >> 2 ] = poolPtr ;
poolPtr += line . length + 1 ;
}
HEAP32 [ envPtr + strings . length * ptrSize >> 2 ] = 0 ;
}
function _ _ _lock ( ) { }
var ERRNO _CODES = {
EPERM : 1 ,
ENOENT : 2 ,
ESRCH : 3 ,
EINTR : 4 ,
EIO : 5 ,
ENXIO : 6 ,
E2BIG : 7 ,
ENOEXEC : 8 ,
EBADF : 9 ,
ECHILD : 10 ,
EAGAIN : 11 ,
EWOULDBLOCK : 11 ,
ENOMEM : 12 ,
EACCES : 13 ,
EFAULT : 14 ,
ENOTBLK : 15 ,
EBUSY : 16 ,
EEXIST : 17 ,
EXDEV : 18 ,
ENODEV : 19 ,
ENOTDIR : 20 ,
EISDIR : 21 ,
EINVAL : 22 ,
ENFILE : 23 ,
EMFILE : 24 ,
ENOTTY : 25 ,
ETXTBSY : 26 ,
EFBIG : 27 ,
ENOSPC : 28 ,
ESPIPE : 29 ,
EROFS : 30 ,
EMLINK : 31 ,
EPIPE : 32 ,
EDOM : 33 ,
ERANGE : 34 ,
ENOMSG : 42 ,
EIDRM : 43 ,
ECHRNG : 44 ,
EL2NSYNC : 45 ,
EL3HLT : 46 ,
EL3RST : 47 ,
ELNRNG : 48 ,
EUNATCH : 49 ,
ENOCSI : 50 ,
EL2HLT : 51 ,
EDEADLK : 35 ,
ENOLCK : 37 ,
EBADE : 52 ,
EBADR : 53 ,
EXFULL : 54 ,
ENOANO : 55 ,
EBADRQC : 56 ,
EBADSLT : 57 ,
EDEADLOCK : 35 ,
EBFONT : 59 ,
ENOSTR : 60 ,
ENODATA : 61 ,
ETIME : 62 ,
ENOSR : 63 ,
ENONET : 64 ,
ENOPKG : 65 ,
EREMOTE : 66 ,
ENOLINK : 67 ,
EADV : 68 ,
ESRMNT : 69 ,
ECOMM : 70 ,
EPROTO : 71 ,
EMULTIHOP : 72 ,
EDOTDOT : 73 ,
EBADMSG : 74 ,
ENOTUNIQ : 76 ,
EBADFD : 77 ,
EREMCHG : 78 ,
ELIBACC : 79 ,
ELIBBAD : 80 ,
ELIBSCN : 81 ,
ELIBMAX : 82 ,
ELIBEXEC : 83 ,
ENOSYS : 38 ,
ENOTEMPTY : 39 ,
ENAMETOOLONG : 36 ,
ELOOP : 40 ,
EOPNOTSUPP : 95 ,
EPFNOSUPPORT : 96 ,
ECONNRESET : 104 ,
ENOBUFS : 105 ,
EAFNOSUPPORT : 97 ,
EPROTOTYPE : 91 ,
ENOTSOCK : 88 ,
ENOPROTOOPT : 92 ,
ESHUTDOWN : 108 ,
ECONNREFUSED : 111 ,
EADDRINUSE : 98 ,
ECONNABORTED : 103 ,
ENETUNREACH : 101 ,
ENETDOWN : 100 ,
ETIMEDOUT : 110 ,
EHOSTDOWN : 112 ,
EHOSTUNREACH : 113 ,
EINPROGRESS : 115 ,
EALREADY : 114 ,
EDESTADDRREQ : 89 ,
EMSGSIZE : 90 ,
EPROTONOSUPPORT : 93 ,
ESOCKTNOSUPPORT : 94 ,
EADDRNOTAVAIL : 99 ,
ENETRESET : 102 ,
EISCONN : 106 ,
ENOTCONN : 107 ,
ETOOMANYREFS : 109 ,
EUSERS : 87 ,
EDQUOT : 122 ,
ESTALE : 116 ,
ENOTSUP : 95 ,
ENOMEDIUM : 123 ,
EILSEQ : 84 ,
EOVERFLOW : 75 ,
ECANCELED : 125 ,
ENOTRECOVERABLE : 131 ,
EOWNERDEAD : 130 ,
ESTRPIPE : 86
} ;
var SYSCALLS = {
DEFAULT _POLLMASK : 5 ,
mappings : { } ,
umask : 511 ,
calculateAt : function ( dirfd , path ) {
if ( path [ 0 ] !== "/" ) {
var dir ;
if ( dirfd === - 100 ) {
dir = FS . cwd ( ) ;
} else {
var dirstream = FS . getStream ( dirfd ) ;
if ( ! dirstream ) throw new FS . ErrnoError ( ERRNO _CODES . EBADF ) ;
dir = dirstream . path ;
}
path = PATH . join2 ( dir , path ) ;
}
return path ;
} ,
doStat : function ( func , path , buf ) {
try {
var stat = func ( path ) ;
} catch ( e ) {
if ( e && e . node && PATH . normalize ( path ) !== PATH . normalize ( FS . getPath ( e . node ) ) ) {
return - ERRNO _CODES . ENOTDIR ;
}
throw e ;
}
HEAP32 [ buf >> 2 ] = stat . dev ;
HEAP32 [ buf + 4 >> 2 ] = 0 ;
HEAP32 [ buf + 8 >> 2 ] = stat . ino ;
HEAP32 [ buf + 12 >> 2 ] = stat . mode ;
HEAP32 [ buf + 16 >> 2 ] = stat . nlink ;
HEAP32 [ buf + 20 >> 2 ] = stat . uid ;
HEAP32 [ buf + 24 >> 2 ] = stat . gid ;
HEAP32 [ buf + 28 >> 2 ] = stat . rdev ;
HEAP32 [ buf + 32 >> 2 ] = 0 ;
HEAP32 [ buf + 36 >> 2 ] = stat . size ;
HEAP32 [ buf + 40 >> 2 ] = 4096 ;
HEAP32 [ buf + 44 >> 2 ] = stat . blocks ;
HEAP32 [ buf + 48 >> 2 ] = stat . atime . getTime ( ) / 1e3 | 0 ;
HEAP32 [ buf + 52 >> 2 ] = 0 ;
HEAP32 [ buf + 56 >> 2 ] = stat . mtime . getTime ( ) / 1e3 | 0 ;
HEAP32 [ buf + 60 >> 2 ] = 0 ;
HEAP32 [ buf + 64 >> 2 ] = stat . ctime . getTime ( ) / 1e3 | 0 ;
HEAP32 [ buf + 68 >> 2 ] = 0 ;
HEAP32 [ buf + 72 >> 2 ] = stat . ino ;
return 0 ;
} ,
doMsync : function ( addr , stream , len , flags ) {
var buffer = new Uint8Array ( HEAPU8 . subarray ( addr , addr + len ) ) ;
FS . msync ( stream , buffer , 0 , len , flags ) ;
} ,
doMkdir : function ( path , mode ) {
path = PATH . normalize ( path ) ;
if ( path [ path . length - 1 ] === "/" ) path = path . substr ( 0 , path . length - 1 ) ;
FS . mkdir ( path , mode , 0 ) ;
return 0 ;
} ,
doMknod : function ( path , mode , dev ) {
switch ( mode & 61440 ) {
case 32768 :
case 8192 :
case 24576 :
case 4096 :
case 49152 :
break ;
default :
return - ERRNO _CODES . EINVAL ;
}
FS . mknod ( path , mode , dev ) ;
return 0 ;
} ,
doReadlink : function ( path , buf , bufsize ) {
if ( bufsize <= 0 ) return - ERRNO _CODES . EINVAL ;
var ret = FS . readlink ( path ) ;
var len = Math . min ( bufsize , lengthBytesUTF8 ( ret ) ) ;
var endChar = HEAP8 [ buf + len ] ;
stringToUTF8 ( ret , buf , bufsize + 1 ) ;
HEAP8 [ buf + len ] = endChar ;
return len ;
} ,
doAccess : function ( path , amode ) {
if ( amode & ~ 7 ) {
return - ERRNO _CODES . EINVAL ;
}
var node ;
var lookup = FS . lookupPath ( path , {
follow : true
} ) ;
node = lookup . node ;
var perms = "" ;
if ( amode & 4 ) perms += "r" ;
if ( amode & 2 ) perms += "w" ;
if ( amode & 1 ) perms += "x" ;
if ( perms && FS . nodePermissions ( node , perms ) ) {
return - ERRNO _CODES . EACCES ;
}
return 0 ;
} ,
doDup : function ( path , flags , suggestFD ) {
var suggest = FS . getStream ( suggestFD ) ;
if ( suggest ) FS . close ( suggest ) ;
return FS . open ( path , flags , 0 , suggestFD , suggestFD ) . fd ;
} ,
doReadv : function ( stream , iov , iovcnt , offset ) {
var ret = 0 ;
for ( var i = 0 ; i < iovcnt ; i ++ ) {
var ptr = HEAP32 [ iov + i * 8 >> 2 ] ;
var len = HEAP32 [ iov + ( i * 8 + 4 ) >> 2 ] ;
var curr = FS . read ( stream , HEAP8 , ptr , len , offset ) ;
if ( curr < 0 ) return - 1 ;
ret += curr ;
if ( curr < len ) break ;
}
return ret ;
} ,
doWritev : function ( stream , iov , iovcnt , offset ) {
var ret = 0 ;
for ( var i = 0 ; i < iovcnt ; i ++ ) {
var ptr = HEAP32 [ iov + i * 8 >> 2 ] ;
var len = HEAP32 [ iov + ( i * 8 + 4 ) >> 2 ] ;
var curr = FS . write ( stream , HEAP8 , ptr , len , offset ) ;
if ( curr < 0 ) return - 1 ;
ret += curr ;
}
return ret ;
} ,
varargs : 0 ,
get : function ( varargs ) {
SYSCALLS . varargs += 4 ;
var ret = HEAP32 [ SYSCALLS . varargs - 4 >> 2 ] ;
return ret ;
} ,
getStr : function ( ) {
var ret = UTF8ToString ( SYSCALLS . get ( ) ) ;
return ret ;
} ,
getStreamFromFD : function ( ) {
var stream = FS . getStream ( SYSCALLS . get ( ) ) ;
if ( ! stream ) throw new FS . ErrnoError ( ERRNO _CODES . EBADF ) ;
return stream ;
} ,
getSocketFromFD : function ( ) {
var socket = SOCKFS . getSocket ( SYSCALLS . get ( ) ) ;
if ( ! socket ) throw new FS . ErrnoError ( ERRNO _CODES . EBADF ) ;
return socket ;
} ,
getSocketAddress : function ( allowNull ) {
var addrp = SYSCALLS . get ( ) , addrlen = SYSCALLS . get ( ) ;
if ( allowNull && addrp === 0 ) return null ;
var info = _ _read _sockaddr ( addrp , addrlen ) ;
if ( info . errno ) throw new FS . ErrnoError ( info . errno ) ;
info . addr = DNS . lookup _addr ( info . addr ) || info . addr ;
return info ;
} ,
get64 : function ( ) {
var low = SYSCALLS . get ( ) , high = SYSCALLS . get ( ) ;
return low ;
} ,
getZero : function ( ) {
SYSCALLS . get ( ) ;
}
} ;
function _ _ _syscall140 ( which , varargs ) {
SYSCALLS . varargs = varargs ;
try {
var stream = SYSCALLS . getStreamFromFD ( ) , offset _high = SYSCALLS . get ( ) , offset _low = SYSCALLS . get ( ) , result = SYSCALLS . get ( ) , whence = SYSCALLS . get ( ) ;
var offset = offset _low ;
FS . llseek ( stream , offset , whence ) ;
HEAP32 [ result >> 2 ] = stream . position ;
if ( stream . getdents && offset === 0 && whence === 0 ) stream . getdents = null ;
return 0 ;
} catch ( e ) {
if ( typeof FS === "undefined" || ! ( e instanceof FS . ErrnoError ) ) abort ( e ) ;
return - e . errno ;
}
}
function _ _ _syscall145 ( which , varargs ) {
SYSCALLS . varargs = varargs ;
try {
var stream = SYSCALLS . getStreamFromFD ( ) , iov = SYSCALLS . get ( ) , iovcnt = SYSCALLS . get ( ) ;
return SYSCALLS . doReadv ( stream , iov , iovcnt ) ;
} catch ( e ) {
if ( typeof FS === "undefined" || ! ( e instanceof FS . ErrnoError ) ) abort ( e ) ;
return - e . errno ;
}
}
function _ _ _syscall146 ( which , varargs ) {
SYSCALLS . varargs = varargs ;
try {
var stream = SYSCALLS . getStreamFromFD ( ) , iov = SYSCALLS . get ( ) , iovcnt = SYSCALLS . get ( ) ;
return SYSCALLS . doWritev ( stream , iov , iovcnt ) ;
} catch ( e ) {
if ( typeof FS === "undefined" || ! ( e instanceof FS . ErrnoError ) ) abort ( e ) ;
return - e . errno ;
}
}
function _ _ _syscall195 ( which , varargs ) {
SYSCALLS . varargs = varargs ;
try {
var path = SYSCALLS . getStr ( ) , buf = SYSCALLS . get ( ) ;
return SYSCALLS . doStat ( FS . stat , path , buf ) ;
} catch ( e ) {
if ( typeof FS === "undefined" || ! ( e instanceof FS . ErrnoError ) ) abort ( e ) ;
return - e . errno ;
}
}
function _ _ _syscall220 ( which , varargs ) {
SYSCALLS . varargs = varargs ;
try {
var stream = SYSCALLS . getStreamFromFD ( ) , dirp = SYSCALLS . get ( ) , count = SYSCALLS . get ( ) ;
if ( ! stream . getdents ) {
stream . getdents = FS . readdir ( stream . path ) ;
}
var pos = 0 ;
while ( stream . getdents . length > 0 && pos + 268 <= count ) {
var id ;
var type ;
var name = stream . getdents . pop ( ) ;
if ( name [ 0 ] === "." ) {
id = 1 ;
type = 4 ;
} else {
var child = FS . lookupNode ( stream . node , name ) ;
id = child . id ;
type = FS . isChrdev ( child . mode ) ? 2 : FS . isDir ( child . mode ) ? 4 : FS . isLink ( child . mode ) ? 10 : 8 ;
}
HEAP32 [ dirp + pos >> 2 ] = id ;
HEAP32 [ dirp + pos + 4 >> 2 ] = stream . position ;
HEAP16 [ dirp + pos + 8 >> 1 ] = 268 ;
HEAP8 [ dirp + pos + 10 >> 0 ] = type ;
stringToUTF8 ( name , dirp + pos + 11 , 256 ) ;
pos += 268 ;
}
return pos ;
} catch ( e ) {
if ( typeof FS === "undefined" || ! ( e instanceof FS . ErrnoError ) ) abort ( e ) ;
return - e . errno ;
}
}
function _ _ _syscall221 ( which , varargs ) {
SYSCALLS . varargs = varargs ;
try {
var stream = SYSCALLS . getStreamFromFD ( ) , cmd = SYSCALLS . get ( ) ;
switch ( cmd ) {
case 0 :
{
var arg = SYSCALLS . get ( ) ;
if ( arg < 0 ) {
return - ERRNO _CODES . EINVAL ;
}
var newStream ;
newStream = FS . open ( stream . path , stream . flags , 0 , arg ) ;
return newStream . fd ;
}
case 1 :
case 2 :
return 0 ;
case 3 :
return stream . flags ;
case 4 :
{
var arg = SYSCALLS . get ( ) ;
stream . flags |= arg ;
return 0 ;
}
case 12 :
{
var arg = SYSCALLS . get ( ) ;
var offset = 0 ;
HEAP16 [ arg + offset >> 1 ] = 2 ;
return 0 ;
}
case 13 :
case 14 :
return 0 ;
case 16 :
case 8 :
return - ERRNO _CODES . EINVAL ;
case 9 :
_ _ _setErrNo ( ERRNO _CODES . EINVAL ) ;
return - 1 ;
default :
{
return - ERRNO _CODES . EINVAL ;
}
}
} catch ( e ) {
if ( typeof FS === "undefined" || ! ( e instanceof FS . ErrnoError ) ) abort ( e ) ;
return - e . errno ;
}
}
function _ _ _syscall5 ( which , varargs ) {
SYSCALLS . varargs = varargs ;
try {
var pathname = SYSCALLS . getStr ( ) , flags = SYSCALLS . get ( ) , mode = SYSCALLS . get ( ) ;
var stream = FS . open ( pathname , flags , mode ) ;
return stream . fd ;
} catch ( e ) {
if ( typeof FS === "undefined" || ! ( e instanceof FS . ErrnoError ) ) abort ( e ) ;
return - e . errno ;
}
}
function _ _ _syscall54 ( which , varargs ) {
SYSCALLS . varargs = varargs ;
try {
var stream = SYSCALLS . getStreamFromFD ( ) , op = SYSCALLS . get ( ) ;
switch ( op ) {
case 21509 :
case 21505 :
{
if ( ! stream . tty ) return - ERRNO _CODES . ENOTTY ;
return 0 ;
}
case 21510 :
case 21511 :
case 21512 :
case 21506 :
case 21507 :
case 21508 :
{
if ( ! stream . tty ) return - ERRNO _CODES . ENOTTY ;
return 0 ;
}
case 21519 :
{
if ( ! stream . tty ) return - ERRNO _CODES . ENOTTY ;
var argp = SYSCALLS . get ( ) ;
HEAP32 [ argp >> 2 ] = 0 ;
return 0 ;
}
case 21520 :
{
if ( ! stream . tty ) return - ERRNO _CODES . ENOTTY ;
return - ERRNO _CODES . EINVAL ;
}
case 21531 :
{
var argp = SYSCALLS . get ( ) ;
return FS . ioctl ( stream , op , argp ) ;
}
case 21523 :
{
if ( ! stream . tty ) return - ERRNO _CODES . ENOTTY ;
return 0 ;
}
case 21524 :
{
if ( ! stream . tty ) return - ERRNO _CODES . ENOTTY ;
return 0 ;
}
default :
abort ( "bad ioctl syscall " + op ) ;
}
} catch ( e ) {
if ( typeof FS === "undefined" || ! ( e instanceof FS . ErrnoError ) ) abort ( e ) ;
return - e . errno ;
}
}
function _ _ _syscall6 ( which , varargs ) {
SYSCALLS . varargs = varargs ;
try {
var stream = SYSCALLS . getStreamFromFD ( ) ;
FS . close ( stream ) ;
return 0 ;
} catch ( e ) {
if ( typeof FS === "undefined" || ! ( e instanceof FS . ErrnoError ) ) abort ( e ) ;
return - e . errno ;
}
}
function _ _ _unlock ( ) { }
function _abort ( ) {
Module [ "abort" ] ( ) ;
}
function _emscripten _async _wget _data ( url , arg , onload , onerror ) {
Browser . asyncLoad ( UTF8ToString ( url ) , function ( byteArray ) {
var buffer = _malloc ( byteArray . length ) ;
HEAPU8 . set ( byteArray , buffer ) ;
dynCall _viii ( onload , arg , buffer , byteArray . length ) ;
_free ( buffer ) ;
} , function ( ) {
if ( onerror ) dynCall _vi ( onerror , arg ) ;
} , true ) ;
}
function _emscripten _get _heap _size ( ) {
return TOTAL _MEMORY ;
}
function abortOnCannotGrowMemory ( requestedSize ) {
abort ( "Cannot enlarge memory arrays to size " + requestedSize + " bytes. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value " + TOTAL _MEMORY + ", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 " ) ;
}
function _emscripten _resize _heap ( requestedSize ) {
abortOnCannotGrowMemory ( requestedSize ) ;
}
function _exit ( status ) {
exit ( status ) ;
}
var _ _ _tm _current = 3042576 ;
var _ _ _tm _timezone = ( stringToUTF8 ( "GMT" , 3042624 , 4 ) , 3042624 ) ;
function _gmtime _r ( time , tmPtr ) {
var date = new Date ( HEAP32 [ time >> 2 ] * 1e3 ) ;
HEAP32 [ tmPtr >> 2 ] = date . getUTCSeconds ( ) ;
HEAP32 [ tmPtr + 4 >> 2 ] = date . getUTCMinutes ( ) ;
HEAP32 [ tmPtr + 8 >> 2 ] = date . getUTCHours ( ) ;
HEAP32 [ tmPtr + 12 >> 2 ] = date . getUTCDate ( ) ;
HEAP32 [ tmPtr + 16 >> 2 ] = date . getUTCMonth ( ) ;
HEAP32 [ tmPtr + 20 >> 2 ] = date . getUTCFullYear ( ) - 1900 ;
HEAP32 [ tmPtr + 24 >> 2 ] = date . getUTCDay ( ) ;
HEAP32 [ tmPtr + 36 >> 2 ] = 0 ;
HEAP32 [ tmPtr + 32 >> 2 ] = 0 ;
var start = Date . UTC ( date . getUTCFullYear ( ) , 0 , 1 , 0 , 0 , 0 , 0 ) ;
var yday = ( date . getTime ( ) - start ) / ( 1e3 * 60 * 60 * 24 ) | 0 ;
HEAP32 [ tmPtr + 28 >> 2 ] = yday ;
HEAP32 [ tmPtr + 40 >> 2 ] = _ _ _tm _timezone ;
return tmPtr ;
}
function _gmtime ( time ) {
return _gmtime _r ( time , _ _ _tm _current ) ;
}
function _tzset ( ) {
if ( _tzset . called ) return ;
_tzset . called = true ;
HEAP32 [ _ _get _timezone ( ) >> 2 ] = new Date ( ) . getTimezoneOffset ( ) * 60 ;
var winter = new Date ( 2e3 , 0 , 1 ) ;
var summer = new Date ( 2e3 , 6 , 1 ) ;
HEAP32 [ _ _get _daylight ( ) >> 2 ] = Number ( winter . getTimezoneOffset ( ) != summer . getTimezoneOffset ( ) ) ;
function extractZone ( date ) {
var match = date . toTimeString ( ) . match ( /\(([A-Za-z ]+)\)$/ ) ;
return match ? match [ 1 ] : "GMT" ;
}
var winterName = extractZone ( winter ) ;
var summerName = extractZone ( summer ) ;
var winterNamePtr = allocate ( intArrayFromString ( winterName ) , "i8" , ALLOC _NORMAL ) ;
var summerNamePtr = allocate ( intArrayFromString ( summerName ) , "i8" , ALLOC _NORMAL ) ;
if ( summer . getTimezoneOffset ( ) < winter . getTimezoneOffset ( ) ) {
HEAP32 [ _ _get _tzname ( ) >> 2 ] = winterNamePtr ;
HEAP32 [ _ _get _tzname ( ) + 4 >> 2 ] = summerNamePtr ;
} else {
HEAP32 [ _ _get _tzname ( ) >> 2 ] = summerNamePtr ;
HEAP32 [ _ _get _tzname ( ) + 4 >> 2 ] = winterNamePtr ;
}
}
function _localtime _r ( time , tmPtr ) {
_tzset ( ) ;
var date = new Date ( HEAP32 [ time >> 2 ] * 1e3 ) ;
HEAP32 [ tmPtr >> 2 ] = date . getSeconds ( ) ;
HEAP32 [ tmPtr + 4 >> 2 ] = date . getMinutes ( ) ;
HEAP32 [ tmPtr + 8 >> 2 ] = date . getHours ( ) ;
HEAP32 [ tmPtr + 12 >> 2 ] = date . getDate ( ) ;
HEAP32 [ tmPtr + 16 >> 2 ] = date . getMonth ( ) ;
HEAP32 [ tmPtr + 20 >> 2 ] = date . getFullYear ( ) - 1900 ;
HEAP32 [ tmPtr + 24 >> 2 ] = date . getDay ( ) ;
var start = new Date ( date . getFullYear ( ) , 0 , 1 ) ;
var yday = ( date . getTime ( ) - start . getTime ( ) ) / ( 1e3 * 60 * 60 * 24 ) | 0 ;
HEAP32 [ tmPtr + 28 >> 2 ] = yday ;
HEAP32 [ tmPtr + 36 >> 2 ] = - ( date . getTimezoneOffset ( ) * 60 ) ;
var summerOffset = new Date ( 2e3 , 6 , 1 ) . getTimezoneOffset ( ) ;
var winterOffset = start . getTimezoneOffset ( ) ;
var dst = ( summerOffset != winterOffset && date . getTimezoneOffset ( ) == Math . min ( winterOffset , summerOffset ) ) | 0 ;
HEAP32 [ tmPtr + 32 >> 2 ] = dst ;
var zonePtr = HEAP32 [ _ _get _tzname ( ) + ( dst ? 4 : 0 ) >> 2 ] ;
HEAP32 [ tmPtr + 40 >> 2 ] = zonePtr ;
return tmPtr ;
}
function _localtime ( time ) {
return _localtime _r ( time , _ _ _tm _current ) ;
}
function _longjmp ( env , value ) {
_setThrew ( env , value || 1 ) ;
throw "longjmp" ;
}
function _emscripten _memcpy _big ( dest , src , num ) {
HEAPU8 . set ( HEAPU8 . subarray ( src , src + num ) , dest ) ;
}
function _ _isLeapYear ( year ) {
return year % 4 === 0 && ( year % 100 !== 0 || year % 400 === 0 ) ;
}
function _ _arraySum ( array , index ) {
var sum = 0 ;
for ( var i = 0 ; i <= index ; sum += array [ i ++ ] ) ;
return sum ;
}
var _ _MONTH _DAYS _LEAP = [ 31 , 29 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 ] ;
var _ _MONTH _DAYS _REGULAR = [ 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 ] ;
function _ _addDays ( date , days ) {
var newDate = new Date ( date . getTime ( ) ) ;
while ( days > 0 ) {
var leap = _ _isLeapYear ( newDate . getFullYear ( ) ) ;
var currentMonth = newDate . getMonth ( ) ;
var daysInCurrentMonth = ( leap ? _ _MONTH _DAYS _LEAP : _ _MONTH _DAYS _REGULAR ) [ currentMonth ] ;
if ( days > daysInCurrentMonth - newDate . getDate ( ) ) {
days -= daysInCurrentMonth - newDate . getDate ( ) + 1 ;
newDate . setDate ( 1 ) ;
if ( currentMonth < 11 ) {
newDate . setMonth ( currentMonth + 1 ) ;
} else {
newDate . setMonth ( 0 ) ;
newDate . setFullYear ( newDate . getFullYear ( ) + 1 ) ;
}
} else {
newDate . setDate ( newDate . getDate ( ) + days ) ;
return newDate ;
}
}
return newDate ;
}
function _strftime ( s , maxsize , format , tm ) {
var tm _zone = HEAP32 [ tm + 40 >> 2 ] ;
var date = {
tm _sec : HEAP32 [ tm >> 2 ] ,
tm _min : HEAP32 [ tm + 4 >> 2 ] ,
tm _hour : HEAP32 [ tm + 8 >> 2 ] ,
tm _mday : HEAP32 [ tm + 12 >> 2 ] ,
tm _mon : HEAP32 [ tm + 16 >> 2 ] ,
tm _year : HEAP32 [ tm + 20 >> 2 ] ,
tm _wday : HEAP32 [ tm + 24 >> 2 ] ,
tm _yday : HEAP32 [ tm + 28 >> 2 ] ,
tm _isdst : HEAP32 [ tm + 32 >> 2 ] ,
tm _gmtoff : HEAP32 [ tm + 36 >> 2 ] ,
tm _zone : tm _zone ? UTF8ToString ( tm _zone ) : ""
} ;
var pattern = UTF8ToString ( format ) ;
var EXPANSION _RULES _1 = {
"%c" : "%a %b %d %H:%M:%S %Y" ,
"%D" : "%m/%d/%y" ,
"%F" : "%Y-%m-%d" ,
"%h" : "%b" ,
"%r" : "%I:%M:%S %p" ,
"%R" : "%H:%M" ,
"%T" : "%H:%M:%S" ,
"%x" : "%m/%d/%y" ,
"%X" : "%H:%M:%S"
} ;
for ( var rule in EXPANSION _RULES _1 ) {
pattern = pattern . replace ( new RegExp ( rule , "g" ) , EXPANSION _RULES _1 [ rule ] ) ;
}
var WEEKDAYS = [ "Sunday" , "Monday" , "Tuesday" , "Wednesday" , "Thursday" , "Friday" , "Saturday" ] ;
var MONTHS = [ "January" , "February" , "March" , "April" , "May" , "June" , "July" , "August" , "September" , "October" , "November" , "December" ] ;
function leadingSomething ( value , digits , character ) {
var str = typeof value === "number" ? value . toString ( ) : value || "" ;
while ( str . length < digits ) {
str = character [ 0 ] + str ;
}
return str ;
}
function leadingNulls ( value , digits ) {
return leadingSomething ( value , digits , "0" ) ;
}
function compareByDay ( date1 , date2 ) {
function sgn ( value ) {
return value < 0 ? - 1 : value > 0 ? 1 : 0 ;
}
var compare ;
if ( ( compare = sgn ( date1 . getFullYear ( ) - date2 . getFullYear ( ) ) ) === 0 ) {
if ( ( compare = sgn ( date1 . getMonth ( ) - date2 . getMonth ( ) ) ) === 0 ) {
compare = sgn ( date1 . getDate ( ) - date2 . getDate ( ) ) ;
}
}
return compare ;
}
function getFirstWeekStartDate ( janFourth ) {
switch ( janFourth . getDay ( ) ) {
case 0 :
return new Date ( janFourth . getFullYear ( ) - 1 , 11 , 29 ) ;
case 1 :
return janFourth ;
case 2 :
return new Date ( janFourth . getFullYear ( ) , 0 , 3 ) ;
case 3 :
return new Date ( janFourth . getFullYear ( ) , 0 , 2 ) ;
case 4 :
return new Date ( janFourth . getFullYear ( ) , 0 , 1 ) ;
case 5 :
return new Date ( janFourth . getFullYear ( ) - 1 , 11 , 31 ) ;
case 6 :
return new Date ( janFourth . getFullYear ( ) - 1 , 11 , 30 ) ;
}
}
function getWeekBasedYear ( date ) {
var thisDate = _ _addDays ( new Date ( date . tm _year + 1900 , 0 , 1 ) , date . tm _yday ) ;
var janFourthThisYear = new Date ( thisDate . getFullYear ( ) , 0 , 4 ) ;
var janFourthNextYear = new Date ( thisDate . getFullYear ( ) + 1 , 0 , 4 ) ;
var firstWeekStartThisYear = getFirstWeekStartDate ( janFourthThisYear ) ;
var firstWeekStartNextYear = getFirstWeekStartDate ( janFourthNextYear ) ;
if ( compareByDay ( firstWeekStartThisYear , thisDate ) <= 0 ) {
if ( compareByDay ( firstWeekStartNextYear , thisDate ) <= 0 ) {
return thisDate . getFullYear ( ) + 1 ;
} else {
return thisDate . getFullYear ( ) ;
}
} else {
return thisDate . getFullYear ( ) - 1 ;
}
}
var EXPANSION _RULES _2 = {
"%a" : function ( date ) {
return WEEKDAYS [ date . tm _wday ] . substring ( 0 , 3 ) ;
} ,
"%A" : function ( date ) {
return WEEKDAYS [ date . tm _wday ] ;
} ,
"%b" : function ( date ) {
return MONTHS [ date . tm _mon ] . substring ( 0 , 3 ) ;
} ,
"%B" : function ( date ) {
return MONTHS [ date . tm _mon ] ;
} ,
"%C" : function ( date ) {
var year = date . tm _year + 1900 ;
return leadingNulls ( year / 100 | 0 , 2 ) ;
} ,
"%d" : function ( date ) {
return leadingNulls ( date . tm _mday , 2 ) ;
} ,
"%e" : function ( date ) {
return leadingSomething ( date . tm _mday , 2 , " " ) ;
} ,
"%g" : function ( date ) {
return getWeekBasedYear ( date ) . toString ( ) . substring ( 2 ) ;
} ,
"%G" : function ( date ) {
return getWeekBasedYear ( date ) ;
} ,
"%H" : function ( date ) {
return leadingNulls ( date . tm _hour , 2 ) ;
} ,
"%I" : function ( date ) {
var twelveHour = date . tm _hour ;
if ( twelveHour == 0 ) twelveHour = 12 ; else if ( twelveHour > 12 ) twelveHour -= 12 ;
return leadingNulls ( twelveHour , 2 ) ;
} ,
"%j" : function ( date ) {
return leadingNulls ( date . tm _mday + _ _arraySum ( _ _isLeapYear ( date . tm _year + 1900 ) ? _ _MONTH _DAYS _LEAP : _ _MONTH _DAYS _REGULAR , date . tm _mon - 1 ) , 3 ) ;
} ,
"%m" : function ( date ) {
return leadingNulls ( date . tm _mon + 1 , 2 ) ;
} ,
"%M" : function ( date ) {
return leadingNulls ( date . tm _min , 2 ) ;
} ,
"%n" : function ( ) {
return "\n" ;
} ,
"%p" : function ( date ) {
if ( date . tm _hour >= 0 && date . tm _hour < 12 ) {
return "AM" ;
} else {
return "PM" ;
}
} ,
"%S" : function ( date ) {
return leadingNulls ( date . tm _sec , 2 ) ;
} ,
"%t" : function ( ) {
return "\t" ;
} ,
"%u" : function ( date ) {
var day = new Date ( date . tm _year + 1900 , date . tm _mon + 1 , date . tm _mday , 0 , 0 , 0 , 0 ) ;
return day . getDay ( ) || 7 ;
} ,
"%U" : function ( date ) {
var janFirst = new Date ( date . tm _year + 1900 , 0 , 1 ) ;
var firstSunday = janFirst . getDay ( ) === 0 ? janFirst : _ _addDays ( janFirst , 7 - janFirst . getDay ( ) ) ;
var endDate = new Date ( date . tm _year + 1900 , date . tm _mon , date . tm _mday ) ;
if ( compareByDay ( firstSunday , endDate ) < 0 ) {
var februaryFirstUntilEndMonth = _ _arraySum ( _ _isLeapYear ( endDate . getFullYear ( ) ) ? _ _MONTH _DAYS _LEAP : _ _MONTH _DAYS _REGULAR , endDate . getMonth ( ) - 1 ) - 31 ;
var firstSundayUntilEndJanuary = 31 - firstSunday . getDate ( ) ;
var days = firstSundayUntilEndJanuary + februaryFirstUntilEndMonth + endDate . getDate ( ) ;
return leadingNulls ( Math . ceil ( days / 7 ) , 2 ) ;
}
return compareByDay ( firstSunday , janFirst ) === 0 ? "01" : "00" ;
} ,
"%V" : function ( date ) {
var janFourthThisYear = new Date ( date . tm _year + 1900 , 0 , 4 ) ;
var janFourthNextYear = new Date ( date . tm _year + 1901 , 0 , 4 ) ;
var firstWeekStartThisYear = getFirstWeekStartDate ( janFourthThisYear ) ;
var firstWeekStartNextYear = getFirstWeekStartDate ( janFourthNextYear ) ;
var endDate = _ _addDays ( new Date ( date . tm _year + 1900 , 0 , 1 ) , date . tm _yday ) ;
if ( compareByDay ( endDate , firstWeekStartThisYear ) < 0 ) {
return "53" ;
}
if ( compareByDay ( firstWeekStartNextYear , endDate ) <= 0 ) {
return "01" ;
}
var daysDifference ;
if ( firstWeekStartThisYear . getFullYear ( ) < date . tm _year + 1900 ) {
daysDifference = date . tm _yday + 32 - firstWeekStartThisYear . getDate ( ) ;
} else {
daysDifference = date . tm _yday + 1 - firstWeekStartThisYear . getDate ( ) ;
}
return leadingNulls ( Math . ceil ( daysDifference / 7 ) , 2 ) ;
} ,
"%w" : function ( date ) {
var day = new Date ( date . tm _year + 1900 , date . tm _mon + 1 , date . tm _mday , 0 , 0 , 0 , 0 ) ;
return day . getDay ( ) ;
} ,
"%W" : function ( date ) {
var janFirst = new Date ( date . tm _year , 0 , 1 ) ;
var firstMonday = janFirst . getDay ( ) === 1 ? janFirst : _ _addDays ( janFirst , janFirst . getDay ( ) === 0 ? 1 : 7 - janFirst . getDay ( ) + 1 ) ;
var endDate = new Date ( date . tm _year + 1900 , date . tm _mon , date . tm _mday ) ;
if ( compareByDay ( firstMonday , endDate ) < 0 ) {
var februaryFirstUntilEndMonth = _ _arraySum ( _ _isLeapYear ( endDate . getFullYear ( ) ) ? _ _MONTH _DAYS _LEAP : _ _MONTH _DAYS _REGULAR , endDate . getMonth ( ) - 1 ) - 31 ;
var firstMondayUntilEndJanuary = 31 - firstMonday . getDate ( ) ;
var days = firstMondayUntilEndJanuary + februaryFirstUntilEndMonth + endDate . getDate ( ) ;
return leadingNulls ( Math . ceil ( days / 7 ) , 2 ) ;
}
return compareByDay ( firstMonday , janFirst ) === 0 ? "01" : "00" ;
} ,
"%y" : function ( date ) {
return ( date . tm _year + 1900 ) . toString ( ) . substring ( 2 ) ;
} ,
"%Y" : function ( date ) {
return date . tm _year + 1900 ;
} ,
"%z" : function ( date ) {
var off = date . tm _gmtoff ;
var ahead = off >= 0 ;
off = Math . abs ( off ) / 60 ;
off = off / 60 * 100 + off % 60 ;
return ( ahead ? "+" : "-" ) + String ( "0000" + off ) . slice ( - 4 ) ;
} ,
"%Z" : function ( date ) {
return date . tm _zone ;
} ,
"%%" : function ( ) {
return "%" ;
}
} ;
for ( var rule in EXPANSION _RULES _2 ) {
if ( pattern . indexOf ( rule ) >= 0 ) {
pattern = pattern . replace ( new RegExp ( rule , "g" ) , EXPANSION _RULES _2 [ rule ] ( date ) ) ;
}
}
var bytes = intArrayFromString ( pattern , false ) ;
if ( bytes . length > maxsize ) {
return 0 ;
}
writeArrayToMemory ( bytes , s ) ;
return bytes . length - 1 ;
}
function _time ( ptr ) {
var ret = Date . now ( ) / 1e3 | 0 ;
if ( ptr ) {
HEAP32 [ ptr >> 2 ] = ret ;
}
return ret ;
}
FS . staticInit ( ) ;
_ _ATINIT _ _ . unshift ( function ( ) {
if ( ! Module [ "noFSInit" ] && ! FS . init . initialized ) FS . init ( ) ;
} ) ;
_ _ATMAIN _ _ . push ( function ( ) {
FS . ignorePermissions = false ;
} ) ;
_ _ATEXIT _ _ . push ( function ( ) {
FS . quit ( ) ;
} ) ;
Module [ "FS_createFolder" ] = FS . createFolder ;
Module [ "FS_createPath" ] = FS . createPath ;
Module [ "FS_createDataFile" ] = FS . createDataFile ;
Module [ "FS_createPreloadedFile" ] = FS . createPreloadedFile ;
Module [ "FS_createLazyFile" ] = FS . createLazyFile ;
Module [ "FS_createLink" ] = FS . createLink ;
Module [ "FS_createDevice" ] = FS . createDevice ;
Module [ "FS_unlink" ] = FS . unlink ;
_ _ATINIT _ _ . unshift ( function ( ) {
TTY . init ( ) ;
} ) ;
_ _ATEXIT _ _ . push ( function ( ) {
TTY . shutdown ( ) ;
} ) ;
if ( ENVIRONMENT _IS _NODE ) {
var fs = require ( "fs" ) ;
var NODEJS _PATH = require ( "path" ) ;
NODEFS . staticInit ( ) ;
}
Module [ "requestFullScreen" ] = function Module _requestFullScreen ( lockPointer , resizeCanvas , vrDevice ) {
err ( "Module.requestFullScreen is deprecated. Please call Module.requestFullscreen instead." ) ;
Module [ "requestFullScreen" ] = Module [ "requestFullscreen" ] ;
Browser . requestFullScreen ( lockPointer , resizeCanvas , vrDevice ) ;
} ;
Module [ "requestFullscreen" ] = function Module _requestFullscreen ( lockPointer , resizeCanvas , vrDevice ) {
Browser . requestFullscreen ( lockPointer , resizeCanvas , vrDevice ) ;
} ;
Module [ "requestAnimationFrame" ] = function Module _requestAnimationFrame ( func ) {
Browser . requestAnimationFrame ( func ) ;
} ;
Module [ "setCanvasSize" ] = function Module _setCanvasSize ( width , height , noUpdates ) {
Browser . setCanvasSize ( width , height , noUpdates ) ;
} ;
Module [ "pauseMainLoop" ] = function Module _pauseMainLoop ( ) {
Browser . mainLoop . pause ( ) ;
} ;
Module [ "resumeMainLoop" ] = function Module _resumeMainLoop ( ) {
Browser . mainLoop . resume ( ) ;
} ;
Module [ "getUserMedia" ] = function Module _getUserMedia ( ) {
Browser . getUserMedia ( ) ;
} ;
Module [ "createContext" ] = function Module _createContext ( canvas , useWebGL , setInModule , webGLContextAttributes ) {
return Browser . createContext ( canvas , useWebGL , setInModule , webGLContextAttributes ) ;
} ;
if ( ENVIRONMENT _IS _NODE ) {
_emscripten _get _now = function _emscripten _get _now _actual ( ) {
var t = process [ "hrtime" ] ( ) ;
return t [ 0 ] * 1e3 + t [ 1 ] / 1e6 ;
} ;
} else if ( typeof dateNow !== "undefined" ) {
_emscripten _get _now = dateNow ;
} else if ( typeof self === "object" && self [ "performance" ] && typeof self [ "performance" ] [ "now" ] === "function" ) {
_emscripten _get _now = function ( ) {
return self [ "performance" ] [ "now" ] ( ) ;
} ;
} else if ( typeof performance === "object" && typeof performance [ "now" ] === "function" ) {
_emscripten _get _now = function ( ) {
return performance [ "now" ] ( ) ;
} ;
} else {
_emscripten _get _now = Date . now ;
}
var GLctx ;
GL . init ( ) ;
var ASSERTIONS = false ;
function intArrayFromString ( stringy , dontAddNull , length ) {
var len = length > 0 ? length : lengthBytesUTF8 ( stringy ) + 1 ;
var u8array = new Array ( len ) ;
var numBytesWritten = stringToUTF8Array ( stringy , u8array , 0 , u8array . length ) ;
if ( dontAddNull ) u8array . length = numBytesWritten ;
return u8array ;
}
function intArrayToString ( array ) {
var ret = [ ] ;
for ( var i = 0 ; i < array . length ; i ++ ) {
var chr = array [ i ] ;
if ( chr > 255 ) {
if ( ASSERTIONS ) {
assert ( false , "Character code " + chr + " (" + String . fromCharCode ( chr ) + ") at offset " + i + " not in 0x00-0xFF." ) ;
}
chr &= 255 ;
}
ret . push ( String . fromCharCode ( chr ) ) ;
}
return ret . join ( "" ) ;
}
var decodeBase64 = typeof atob === "function" ? atob : function ( input ) {
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" ;
var output = "" ;
var chr1 , chr2 , chr3 ;
var enc1 , enc2 , enc3 , enc4 ;
var i = 0 ;
input = input . replace ( /[^A-Za-z0-9\+\/\=]/g , "" ) ;
do {
enc1 = keyStr . indexOf ( input . charAt ( i ++ ) ) ;
enc2 = keyStr . indexOf ( input . charAt ( i ++ ) ) ;
enc3 = keyStr . indexOf ( input . charAt ( i ++ ) ) ;
enc4 = keyStr . indexOf ( input . charAt ( i ++ ) ) ;
chr1 = enc1 << 2 | enc2 >> 4 ;
chr2 = ( enc2 & 15 ) << 4 | enc3 >> 2 ;
chr3 = ( enc3 & 3 ) << 6 | enc4 ;
output = output + String . fromCharCode ( chr1 ) ;
if ( enc3 !== 64 ) {
output = output + String . fromCharCode ( chr2 ) ;
}
if ( enc4 !== 64 ) {
output = output + String . fromCharCode ( chr3 ) ;
}
} while ( i < input . length ) ;
return output ;
} ;
function intArrayFromBase64 ( s ) {
if ( typeof ENVIRONMENT _IS _NODE === "boolean" && ENVIRONMENT _IS _NODE ) {
var buf ;
try {
buf = Buffer . from ( s , "base64" ) ;
} catch ( _ ) {
buf = new Buffer ( s , "base64" ) ;
}
return new Uint8Array ( buf . buffer , buf . byteOffset , buf . byteLength ) ;
}
try {
var decoded = decodeBase64 ( s ) ;
var bytes = new Uint8Array ( decoded . length ) ;
for ( var i = 0 ; i < decoded . length ; ++ i ) {
bytes [ i ] = decoded . charCodeAt ( i ) ;
}
return bytes ;
} catch ( _ ) {
throw new Error ( "Converting base64 string to bytes failed." ) ;
}
}
function tryParseAsDataURI ( filename ) {
if ( ! isDataURI ( filename ) ) {
return ;
}
return intArrayFromBase64 ( filename . slice ( dataURIPrefix . length ) ) ;
}
function invoke _vii ( index , a1 , a2 ) {
var sp = stackSave ( ) ;
try {
dynCall _vii ( index , a1 , a2 ) ;
} catch ( e ) {
stackRestore ( sp ) ;
if ( e !== e + 0 && e !== "longjmp" ) throw e ;
_setThrew ( 1 , 0 ) ;
}
}
var asmGlobalArg = {
"Math" : Math ,
"Int8Array" : Int8Array ,
"Int16Array" : Int16Array ,
"Int32Array" : Int32Array ,
"Uint8Array" : Uint8Array ,
"Uint16Array" : Uint16Array ,
"Float32Array" : Float32Array ,
"Float64Array" : Float64Array ,
"NaN" : NaN ,
Infinity : Infinity
} ;
var asmLibraryArg = {
"a" : abort ,
"b" : setTempRet0 ,
"c" : getTempRet0 ,
"d" : invoke _vii ,
"e" : _SDL _ClearError ,
"f" : _SDL _GetError ,
"g" : _SDL _GetModState ,
"h" : _SDL _GetMouseState ,
"i" : _SDL _GetTicks ,
"j" : _SDL _GetWindowSize ,
"k" : _SDL _Init ,
"l" : _SDL _LockAudio ,
"m" : _SDL _LockSurface ,
"n" : _SDL _PollEvent ,
"o" : _SDL _SetVideoMode ,
"p" : _SDL _UnlockAudio ,
"q" : _SDL _UnlockSurface ,
"r" : _ _ _buildEnvironment ,
"s" : _ _ _lock ,
"t" : _ _ _setErrNo ,
"u" : _ _ _syscall140 ,
"v" : _ _ _syscall145 ,
"w" : _ _ _syscall146 ,
"x" : _ _ _syscall195 ,
"y" : _ _ _syscall220 ,
"z" : _ _ _syscall221 ,
"A" : _ _ _syscall5 ,
"B" : _ _ _syscall54 ,
"C" : _ _ _syscall6 ,
"D" : _ _ _unlock ,
"E" : _ _addDays ,
"F" : _ _arraySum ,
"G" : _ _isLeapYear ,
"H" : _abort ,
"I" : _emscripten _asm _const _i ,
"J" : _emscripten _asm _const _ii ,
"K" : _emscripten _asm _const _iii ,
"L" : _emscripten _asm _const _iiiiiii ,
"M" : _emscripten _async _wget _data ,
"N" : _emscripten _get _heap _size ,
"O" : _emscripten _get _now ,
"P" : _emscripten _memcpy _big ,
"Q" : _emscripten _resize _heap ,
"R" : _emscripten _set _main _loop ,
"S" : _emscripten _set _main _loop _timing ,
"T" : _exit ,
"U" : _gmtime ,
"V" : _gmtime _r ,
"W" : _localtime ,
"X" : _localtime _r ,
"Y" : _longjmp ,
"Z" : _strftime ,
"_" : _time ,
"$" : _tzset ,
"aa" : abortOnCannotGrowMemory ,
"ab" : tempDoublePtr ,
"ac" : DYNAMICTOP _PTR
} ;
// EMSCRIPTEN_START_ASM
var asm = ( /** @suppress {uselessCode} */ function ( global , env , buffer ) {
"use asm" ; var a = new global . Int8Array ( buffer ) , b = new global . Int16Array ( buffer ) , c = new global . Int32Array ( buffer ) , d = new global . Uint8Array ( buffer ) , e = new global . Uint16Array ( buffer ) , f = new global . Float32Array ( buffer ) , g = new global . Float64Array ( buffer ) , h = env . ab | 0 , i = env . ac | 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 , o = 0 , p = 0 , q = 0.0 , r = global . NaN , s = global . Infinity , t = global . Math . floor , u = global . Math . abs , v = global . Math . sqrt , w = global . Math . cos , x = global . Math . sin , y = global . Math . atan , z = global . Math . atan2 , A = global . Math . ceil , B = global . Math . imul , C = global . Math . min , D = global . Math . clz32 , E = env . a , F = env . b , G = env . c , H = env . d , I = env . e , J = env . f , K = env . g , L = env . h , M = env . i , N = env . j , O = env . k , P = env . l , Q = env . m , R = env . n , S = env . o , T = env . p , U = env . q , V = env . r , W = env . s , X = env . t , Y = env . u , Z = env . v , _ = env . w , $ = env . x , aa = env . y , ba = env . z , ca = env . A , da = env . B , ea = env . C , fa = env . D , ga = env . E , ha = env . F , ia = env . G , ja = env . H , ka = env . I , la = env . J , ma = env . K , na = env . L , oa = env . M , pa = env . N , qa = env . O , ra = env . P , sa = env . Q , ta = env . R , ua = env . S , va = env . T , wa = env . U , xa = env . V , ya = env . W , za = env . X , Aa = env . Y , Ba = env . Z , Ca = env . _ , Da = env . $ , Ea = env . aa , Fa = 3042736 , Ga = 8285616 , Ha = 0.0 ;
// EMSCRIPTEN_START_FUNCS
function zf ( a ) { a = a | 0 ; var b = 0 , d = 0 , e = 0 , f = 0 , g = 0 , h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 ; b = Fa ; Fa = Fa + 16 | 0 ; d = b + 8 | 0 ; e = b ; f = a + 16 | 0 ; g = c [ c [ f >> 2 ] >> 2 ] | 0 ; h = g + 16 | 0 ; i = a + 8 | 0 ; j = c [ i >> 2 ] | 0 ; if ( h >>> 0 >= j >>> 0 | ( h | 0 ) == 2099900 ) k = - 1 ; else k = c [ g + 20 >> 2 ] & 15 ; h = g + 8 | 0 ; if ( ! ( h >>> 0 >= j >>> 0 | ( h | 0 ) == 2099900 ) ) { h = c [ g + 12 >> 2 ] & 15 ; if ( ( h | 0 ) != 5 ) { l = h + 1 | 0 ; m = 6 } } else { l = 0 ; m = 6 } if ( ( m | 0 ) == 6 ) { m = c [ 16 + ( l << 2 ) >> 2 ] | 0 ; c [ e >> 2 ] = 45485 ; c [ e + 4 >> 2 ] = m ; jf ( a , 1 , Dd ( a , 47715 , e ) | 0 ) | 0 } switch ( k | 0 ) { case 0 : case 5 : break ; default : jf ( a , 2 , 48006 ) | 0 } if ( rf ( a , 1 , 47994 ) | 0 ) kf ( a , 48028 , d ) | 0 ; d = c [ c [ f >> 2 ] >> 2 ] | 0 ; f = c [ i >> 2 ] | 0 ; k = d + 24 | 0 ; if ( f >>> 0 >= k >>> 0 ) { c [ i >> 2 ] = k ; Ld ( a , 1 ) | 0 ; Fa = b ; return 1 } e = ( d + 20 + ( 3 - f ) | 0 ) >>> 3 ; d = f ; do { c [ d + 4 >> 2 ] = 0 ; d = d + 8 | 0 } while ( d >>> 0 < k >>> 0 ) ; c [ i >> 2 ] = f + ( e + 1 << 3 ) ; c [ i >> 2 ] = k ; Ld ( a , 1 ) | 0 ; Fa = b ; return 1 } function Af ( a ) { a = a | 0 ; var b = 0 , d = 0 , e = 0 , f = 0 , g = 0 , h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 ; b = a + 16 | 0 ; d = c [ c [ b >> 2 ] >> 2 ] | 0 ; e = d + 8 | 0 ; f = a + 8 | 0 ; g = c [ f >> 2 ] | 0 ; if ( e >>> 0 >= g >>> 0 | ( e | 0 ) == 2099900 ) { jf ( a , 1 , 47735 ) | 0 ; h = c [ c [ b >> 2 ] >> 2 ] | 0 ; i = c [ f >> 2 ] | 0 } else { h = d ; i = g } g = h + 16 | 0 ; if ( g >>> 0 >= i >>> 0 | ( g | 0 ) == 2099900 ) { jf ( a , 2 , 47735 ) | 0 ; a = c [ c [ b >> 2 ] >> 2 ] | 0 ; j = a + 16 | 0 ; k = a ; l = c [ f >> 2 ] | 0 } else { j = g ; k = h ; l = i } i = k + 8 | 0 ; k = i >>> 0 < l >>> 0 ? i : 2099900 ; i = j >>> 0 < l >>> 0 ? j : 2099900 ; if ( ( k | 0 ) != 2099900 & ( i | 0 ) != 2099900 ? ( c [ k + 4 >> 2 ] | 0 ) == ( c [ i + 4 >> 2 ] | 0 ) : 0 ) { j = ( Ec ( 0 , k , i ) | 0 ) != 0 & 1 ; m = j ; n = c [ f >> 2 ] | 0 } else { m = 0 ; n = l } c [ n >> 2 ] = m ; c [ n + 4 >> 2 ] = 1 ; c [ f >> 2 ] = ( c [ f >> 2 ] | 0 ) + 8 ; return 1 } function Bf ( a ) { a = a | 0 ; var b = 0 , d = 0 , e = 0 , f = 0 , g = 0 , h = 0 , i = 0 , j = 0 ; b = a + 16 | 0 ; d = c [ c [ b >> 2 ] >> 2 ] | 0 ; e = d + 8 | 0 ; f = a + 8 | 0 ; g = c [ f >> 2 ] | 0 ; if ( ! ( e >>> 0 >= g >>> 0 | ( e | 0 ) == 2099900 ) ? ( c [ d + 12 >> 2 ] & 14 | 1 | 0 ) == 5 : 0 ) { h = e ; i = g } else { jf ( a , 1 , 48064 ) | 0 ; h = ( c [ c [ b >> 2 ] >> 2 ] | 0 ) + 8 | 0 ; i = c [ f >> 2 ] | 0 } b = h >>> 0 < i >>> 0 ? h : 2099900 ; switch ( c [ b + 4 >> 2 ] & 15 ) { case 4 : { j = c [ ( c [ b >> 2 ] | 0 ) + 12 >> 2 ] | 0 ; break } case 7 : { j = c [ ( c [ b >> 2 ] | 0 ) + 16 >> 2 ] | 0 ; break } case 5 : { j = cd ( c [ b >> 2 ] | 0 ) | 0 ; break } default : j = 0 } c [ i >> 2 ] = j << 16 ; c [ i + 4 >> 2 ] = 3 ; c [ f >> 2 ] = ( c [ f >> 2 ] | 0 ) + 8 ; return 1 } function Cf ( a ) { a = a | 0 ; var b = 0 , d = 0 , e = 0 , f = 0 , g = 0 , h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 , o = 0 , p = 0 , q = 0 , r = 0 , s = 0 , t = 0 , u = 0 , v = 0 , w = 0 , x = 0 ; b = Fa ; Fa = Fa + 16 | 0 ; d = b ; e = a + 16 | 0 ; f = c [ c [ e >> 2 ] >> 2 ] | 0 ; g = f + 8 | 0 ; h = a + 8 | 0 ; i = c [ h >> 2 ] | 0 ; if ( ! ( g >>> 0 >= i >>> 0 | ( g | 0 ) == 2099900 ) ) { g = c [ f + 12 >> 2 ] & 15 ; if ( ( g | 0 ) == 5 ) { j = f ; k = i } else { l = g + 1 | 0 ; m = 4 } } else { l = 0 ; m = 4 } if ( ( m | 0 ) == 4 ) { m = c [ 16 + ( l << 2 ) >> 2 ] | 0 ; c [ d >> 2 ] = 45485 ; c [ d + 4 >> 2 ] = m ; jf ( a , 1 , Dd ( a , 47715 , d ) | 0 ) | 0 ; j = c [ c [ e >> 2 ] >> 2 ] | 0 ; k = c [ h >> 2 ] | 0 } d = j + 16 | 0 ; if ( d >>> 0 >= k >>> 0 | ( d | 0 ) == 2099900 ) { jf ( a , 2 , 47735 ) | 0 ; n = c [ c [ e >> 2 ] >> 2 ] | 0 ; o = c [ h >> 2 ] | 0 } else { n = j ; o = k } k = n + 8 | 0 ; j = n + 24 | 0 ; if ( o >>> 0 >= j >>> 0 ) { c [ h >> 2 ] = j ; p = c [ k >> 2 ] | 0 ; q = n + 16 | 0 ; r = xc ( p , q ) | 0 ; s = c [ h >> 2 ] | 0 ; t = s + - 8 | 0 ; u = c [ r >> 2 ] | 0 ; c [ t >> 2 ] = u ; v = r + 4 | 0 ; w = c [ v >> 2 ] | 0 ; x = s + - 4 | 0 ; c [ x >> 2 ] = w ; Fa = b ; return 1 } e = ( n + 20 + ( 3 - o ) | 0 ) >>> 3 ; a = o ; do { c [ a + 4 >> 2 ] = 0 ; a = a + 8 | 0 } while ( a >>> 0 < j >>> 0 ) ; c [ h >> 2 ] = o + ( e + 1 << 3 ) ; c [ h >> 2 ] = j ; p = c [ k >> 2 ] | 0 ; q = n + 16 | 0 ; r = xc ( p , q ) | 0 ; s = c [ h >> 2 ] | 0 ; t = s + - 8 | 0 ; u = c [ r >> 2 ] | 0 ; c [ t >> 2 ] = u ; v = r + 4 | 0 ; w = c [ v >> 2 ] | 0 ; x = s + - 4 | 0 ; c [ x >> 2 ] = w ; Fa = b ; return 1 } function Df ( b ) { b = b | 0 ; var d = 0 , e = 0 , f = 0 , g = 0 , h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 , o = 0 , p = 0 , q = 0 , r = 0 , s = 0 , t = 0 , u = 0 ; d = Fa ; Fa = Fa + 16 | 0 ; e = d ; f = b + 16 | 0 ; g = c [ c [ f >> 2 ] >> 2 ] | 0 ; h = g + 8 | 0 ; i = b + 8 | 0 ; j = c [ i >> 2 ] | 0 ; if ( ! ( h >>> 0 >= j >>> 0 | ( h | 0 ) == 2099900 ) ) { h = c [ g + 12 >> 2 ] & 15 ; if ( ( h | 0 ) == 5 ) { k = g ; l = j } else { m = h + 1 | 0 ; n = 4 } } else { m = 0 ; n = 4 } if ( ( n | 0 ) == 4 ) { n = c [ 16 + ( m << 2 ) >> 2 ] | 0 ; c [ e >> 2 ] = 45485 ; c [ e + 4 >> 2 ] = n ; jf ( b , 1 , Dd ( b , 47715 , e ) | 0 ) | 0 ; k = c [ c [ f >> 2 ] >> 2 ] | 0 ; l = c [ i >> 2 ] | 0 } e = k + 16 | 0 ; if ( e >>> 0 >= l >>> 0 | ( e | 0 ) == 2099900 ) { jf ( b , 2 , 47735 ) | 0 ; o = c [ c [ f >> 2 ] >> 2 ] | 0 ; p = c [ i >> 2 ] | 0 } else { o = k ; p = l } l = o + 24 | 0 ; if ( l >>> 0 >= p >>> 0 | ( l | 0 ) == 2099900 ) { jf ( b , 3 , 47735 ) | 0 ; q = c [ c [ f >> 2 ] >> 2 ] | 0 ; r = c [ i >> 2 ] | 0 } else { q = o ; r = p } p = q + 8 | 0 ; o = q + 32 | 0 ; if ( r >>> 0 < o >>> 0 ) { f = ( q + 28 + ( 3 - r ) | 0 ) >>> 3 ; l = r ; do { c [ l + 4 >> 2 ] = 0 ; l = l + 8 | 0 } while ( l >>> 0 < o >>> 0 ) ; c [ i >> 2 ] = r + ( f + 1 << 3 ) } c [ i >> 2 ] = o ; o = c [ p >> 2 ] | 0 ; f = q + 16 | 0 ; r = xc ( o , f ) | 0 ; if ( ( r | 0 ) == 2099900 ) s = yc ( b , o , f ) | 0 ; else s = r ; c [ s >> 2 ] = c [ q + 24 >> 2 ] ; c [ s + 4 >> 2 ] = c [ q + 28 >> 2 ] ; a [ ( c [ p >> 2 ] | 0 ) + 6 >> 0 ] = 0 ; q = c [ i >> 2 ] | 0 ; if ( ! ( c [ q + - 4 >> 2 ] & 64 ) ) { t = q ; u = t + - 16 | 0 ; c [ i >> 2 ] = u ; Fa = d ; return 1 } if ( ! ( a [ ( c [ q + - 8 >> 2 ] | 0 ) + 5 >> 0 ] & 3 ) ) { t = q ; u = t + - 16 | 0 ; c [ i >> 2 ] = u ; Fa = d ; return 1 } s = c [ p >> 2 ] | 0 ; p = s + 5 | 0 ; r = a [ p >> 0 ] | 0 ; if ( ! ( r & 4 ) ) { t = q ; u = t + - 16 | 0 ; c [ i >> 2 ] = u ; Fa = d ; return 1 } q = c [ b + 12 >> 2 ] | 0 ; a [ p >> 0 ] = r & - 5 ; r = q + 76 | 0 ; c [ s + 24 >> 2 ] = c [ r >> 2 ] ; c [ r >> 2 ] = s ; t = c [ i >> 2 ] | 0 ; u = t + - 16 | 0 ; c [ i >> 2 ] = u ; Fa = d ; return 1 } function Ef ( a ) { a = a | 0 ; var b = 0 , d = 0 , e = 0 , f = 0 , g = 0 , h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 ; b = a + 16 | 0 ; d = c [ c [ b >> 2 ] >> 2 ] | 0 ; e = d + 8 | 0 ; f = a + 8 | 0 ; g = c [ f >> 2 ] | 0 ; if ( e >>> 0 >= g >>> 0 | ( e | 0 ) == 2099900 ) { jf ( a , 1 , 47735 ) | 0 ; h = c [ c [ b >> 2 ] >> 2 ] | 0 ; i = h + 8 | 0 ; j = c [ f >> 2 ] | 0 ; k = h } else { i = e ; j = g ; k = d } if ( i >>> 0 >= j >>> 0 | ( i | 0 ) == 2099900 ) { l = 0 ; m = 16 + ( l << 2 ) | 0 ; n =
function Sa ( a ) { a = a | 0 ; var b = 0 ; b = Fa ; Fa = Fa + a | 0 ; Fa = Fa + 15 & - 16 ; return b | 0 } function Ta ( ) { return Fa | 0 } function Ua ( a ) { a = a | 0 ; Fa = a } function Va ( a , b ) { a = a | 0 ; b = b | 0 ; Fa = a ; Ga = b } function Wa ( ) { return c [ ( c [ ( c [ c [ 704870 ] >> 2 ] | 0 ) + 16 >> 2 ] | 0 ) + 12 >> 2 ] | 0 } function Xa ( a ) { a = a | 0 ; var b = 0 , d = 0 , e = 0 , f = 0 , g = 0 , h = 0 , i = 0 ; c [ 742551 ] = ( c [ 742551 ] | 0 ) - a ; b = 128 - a | 0 ; d = c [ 704852 ] | 0 ; if ( ( b | 0 ) > 0 ) { e = 0 ; f = d ; while ( 1 ) { Oo ( f , f , 0 , e + a | 0 , 0 , e , 128 , 1 ) ; e = e + 1 | 0 ; g = c [ 704852 ] | 0 ; if ( ( e | 0 ) == ( b | 0 ) ) { h = b ; i = g ; break } else f = g } } else { h = 0 ; i = d } $m ( i , 0 , h , 127 , 127 , 0 ) ; Vg ( 65536 ) ; return } function Ya ( ) { var a = 0 , b = 0 ; a = ( c [ 742551 ] | 0 ) + ( c [ 742555 ] | 0 ) | 0 ; c [ 742551 ] = a ; if ( ( a | 0 ) <= 122 ) return ; c [ 742551 ] = a + - 6 ; a = 0 ; b = c [ 704852 ] | 0 ; do { Oo ( b , b , 0 , a + 6 | 0 , 0 , a , 128 , 1 ) ; a = a + 1 | 0 ; b = c [ 704852 ] | 0 } while ( ( a | 0 ) != 122 ) ; $m ( b , 0 , 122 , 127 , 127 , 0 ) ; Vg ( 65536 ) ; return } function Za ( a ) { a = a | 0 ; var b = 0 , d = 0 , e = 0 , f = 0 , g = 0 , h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 , o = 0 , p = 0 , q = 0 , r = 0 , s = 0 , t = 0 , u = 0 , v = 0 , w = 0 , x = 0 , y = 0 ; b = Fa ; Fa = Fa + 224 | 0 ; d = b + 208 | 0 ; e = b + 200 | 0 ; f = b + 192 | 0 ; g = b + 184 | 0 ; h = b + 176 | 0 ; i = b + 168 | 0 ; j = b + 160 | 0 ; k = b + 152 | 0 ; l = b + 144 | 0 ; m = b + 136 | 0 ; n = b + 128 | 0 ; o = b + 120 | 0 ; p = b + 112 | 0 ; q = b + 104 | 0 ; r = b + 96 | 0 ; s = b + 88 | 0 ; t = b + 80 | 0 ; u = b + 72 | 0 ; v = b + 64 | 0 ; w = b + 8 | 0 ; x = b ; y = b + 212 | 0 ; if ( ! ( ts ( a , 35736 , 9 ) | 0 ) ) bo ( a + 10 | 0 , 2960076 ) | 0 ; if ( ! ( ts ( a , 35746 , 10 ) | 0 ) ) bo ( a + 11 | 0 , 2962124 ) | 0 ; if ( ! ( ts ( a , 35757 , 14 ) | 0 ) ) { c [ x >> 2 ] = 1662220 ; Vt ( a + 14 | 0 , 35772 , x ) | 0 } if ( ! ( ts ( a , 35776 , 11 ) | 0 ) ) { c [ w >> 2 ] = 1662256 ; c [ w + 4 >> 2 ] = 1662260 ; c [ w + 8 >> 2 ] = 1662264 ; c [ w + 12 >> 2 ] = 1662268 ; c [ w + 16 >> 2 ] = 1662272 ; c [ w + 20 >> 2 ] = 1662276 ; c [ w + 24 >> 2 ] = 1662280 ; c [ w + 28 >> 2 ] = 1662284 ; c [ w + 32 >> 2 ] = 1662288 ; c [ w + 36 >> 2 ] = 1662292 ; c [ w + 40 >> 2 ] = 1662296 ; c [ w + 44 >> 2 ] = 1662300 ; c [ w + 48 >> 2 ] = 1662304 ; Vt ( a + 11 | 0 , 35788 , w ) | 0 } if ( ! ( ts ( a , 35828 , 10 ) | 0 ) ) { c [ v >> 2 ] = 1662384 ; Vt ( a + 10 | 0 , 35772 , v ) | 0 } if ( ! ( ts ( a , 35839 , 11 ) | 0 ) ) { c [ u >> 2 ] = 1662412 ; Vt ( a + 11 | 0 , 35772 , u ) | 0 } if ( ! ( ts ( a , 49212 , 7 ) | 0 ) ) { c [ t >> 2 ] = 1662416 ; Vt ( a + 7 | 0 , 35772 , t ) | 0 } if ( ( ts ( a , 61771 , 6 ) | 0 ) == 0 ? ( c [ s >> 2 ] = 2062524 , Vt ( a + 6 | 0 , 35772 , s ) | 0 , c [ 525853 ] | 0 ) : 0 ) c [ 525853 ] = c [ 515631 ] ; if ( ! ( ts ( a , 35851 , 9 ) | 0 ) ) { c [ r >> 2 ] = 1662428 ; Vt ( a + 9 | 0 , 35772 , r ) | 0 } if ( ! ( ts ( a , 49599 , 16 ) | 0 ) ) { c [ q >> 2 ] = 1662400 ; Vt ( a + 16 | 0 , 35772 , q ) | 0 } if ( ! ( ts ( a , 49500 , 9 ) | 0 ) ) { c [ p >> 2 ] = 1662404 ; Vt ( a + 9 | 0 , 35772 , p ) | 0 } if ( ! ( ts ( a , 35861 , 12 ) | 0 ) ) { c [ o >> 2 ] = 1662444 ; Vt ( a + 12 | 0 , 35772 , o ) | 0 } if ( ! ( ts ( a , 35874 , 20 ) | 0 ) ) { c [ n >> 2 ] = 2061964 ; Vt ( a + 20 | 0 , 35772 , n ) | 0 } if ( ! ( ts ( a , 35895 , 22 ) | 0 ) ) { c [ m >> 2 ] = 2061968 ; Vt ( a + 22 | 0 , 35772 , m ) | 0 } if ( ! ( ts ( a , 35918 , 14 ) | 0 ) ) { c [ l >> 2 ] = y ; Vt ( a + 14 | 0 , 35772 , l ) | 0 ; c [ 415613 ] = ( c [ y >> 2 ] | 0 ) == 2 & 1 } if ( ! ( ts ( a , 48923 , 13 ) | 0 ) ) { c [ k >> 2 ] = 1662452 ; Vt ( a + 13 | 0 , 35772 , k ) | 0 } if ( ! ( ts ( a , 49705 , 9 ) | 0 ) ) { c [ j >> 2 ] = 1662388 ; Vt ( a + 9 | 0 , 35772 , j ) | 0 } if ( ! ( ts ( a , 35933 , 9 ) | 0 ) ) { c [ i >> 2 ] = 1662392 ; Vt ( a + 9 | 0 , 35772 , i ) | 0 } if ( ! ( ts ( a , 35943 , 19 ) | 0 ) ) { c [ h >> 2 ] = 1662244 ; Vt ( a + 19 | 0 , 35772 , h ) | 0 } if ( ! ( ts ( a , 35963 , 19 ) | 0 ) ) { c [ g >> 2 ] = 1662240 ; Vt ( a + 19 | 0 , 35772 , g ) | 0 } if ( ! ( ts ( a , 35983 , 22 ) | 0 ) ) { c [ f >> 2 ] = 1662248 ; Vt ( a + 22 | 0 , 35772 , f ) | 0 } if ( ! ( ts ( a , 36006 , 11 ) | 0 ) ) { c [ e >> 2 ] = 1662436 ; Vt ( a + 11 | 0 , 35772 , e ) | 0 } if ( ts ( a , 36018 , 14 ) | 0 ) { Fa = b ; return 0 } c [ d >> 2 ] = 1662396 ; Vt ( a + 14 | 0 , 35772 , d ) | 0 ; Fa = b ; return 0 } function _a ( a ) { a = a | 0 ; var b = 0 , d = 0 , e = 0 , f = 0 , g = 0 , h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 , o = 0 , p = 0 , q = 0 , r = 0 , s = 0 , t = 0 , u = 0 , v = 0 , w = 0 , x = 0 , y = 0 , z = 0 , A = 0 , B = 0 , C = 0 , D = 0 , E = 0 , F = 0 , G = 0 , H = 0 , I = 0 , J = 0 ; b = Fa ; Fa = Fa + 256 | 0 ; d = b + 248 | 0 ; e = b + 240 | 0 ; f = b + 232 | 0 ; g = b + 224 | 0 ; h = b + 216 | 0 ; i = b + 208 | 0 ; j = b + 200 | 0 ; k = b + 192 | 0 ; l = b + 184 | 0 ; m = b + 176 | 0 ; n = b + 168 | 0 ; o = b + 160 | 0 ; p = b + 152 | 0 ; q = b + 144 | 0 ; r = b + 136 | 0 ; s = b + 128 | 0 ; t = b + 120 | 0 ; u = b + 112 | 0 ; v = b + 104 | 0 ; w = b + 96 | 0 ; x = b + 88 | 0 ; y = b + 80 | 0 ; z = b + 72 | 0 ; A = b + 64 | 0 ; B = b + 56 | 0 ; C = b + 48 | 0 ; D = b + 40 | 0 ; E = b + 32 | 0 ; F = b + 24 | 0 ; G = b + 16 | 0 ; H = b + 8 | 0 ; I = b ; J = a + 8 | 0 ; a = c [ J >> 2 ] | 0 ; c [ I >> 2 ] = 36046 ; bu ( a , 36033 , I ) | 0 ; ku ( 36053 , 25 , 1 , c [ J >> 2 ] | 0 ) | 0 ; I = c [ J >> 2 ] | 0 ; c [ H >> 2 ] = c [ 515631 ] ; bu ( I , 36079 , H ) | 0 ; ku ( 36091 , 37 , 1 , c [ J >> 2 ] | 0 ) | 0 ; H = c [ J >> 2 ] | 0 ; c [ G >> 2 ] = 2960076 ; bu ( H , 36129 , G ) | 0 ; ku ( 36144 , 36 , 1 , c [ J >> 2 ] | 0 ) | 0 ; G = c [ J >> 2 ] | 0 ; c [ F >> 2 ] = 2962124 ; bu ( G , 36181 , F ) | 0 ; ku ( 36197 , 65 , 1 , c [ J >> 2 ] | 0 ) | 0 ; F = c [ J >> 2 ] | 0 ; c [ E >> 2 ] = c [ 415555 ] ; bu ( F , 36263 , E ) | 0 ; ku ( 36283 , 70 , 1 , c [ J >> 2 ] | 0 ) | 0 ; ku ( 36354 , 12 , 1 , c [ J >> 2 ] | 0 ) | 0 ; E = c [ J >> 2 ] | 0 ; c [ D >> 2 ] = c [ 415564 ] ; bu ( E , 36367 , D ) | 0 ; D = c [ J >> 2 ] | 0 ; c [ C >> 2 ] = c [ 415565 ] ; bu ( D , 36367 , C ) | 0 ; C = c [ J >> 2 ] | 0 ; c [ B >> 2 ] = c [ 415566 ] ; bu ( C , 36367 , B ) | 0 ; B = c [ J >> 2 ] | 0 ; c [ A >> 2 ] = c [ 415567 ] ; bu ( B , 36367 , A ) | 0 ; A = c [ J >> 2 ] | 0 ; c [ z >> 2 ] = c [ 415568 ] ; bu ( A , 36367 , z ) | 0 ; z = c [ J >> 2 ] | 0 ; c [ y >> 2 ] = c [ 415569 ] ; bu ( z , 36367 , y ) | 0 ; y = c [ J >> 2 ] | 0 ; c [ x >> 2 ] = c [ 415570 ] ; bu ( y , 36367 , x ) | 0 ; x = c [ J >> 2 ] | 0 ; c [ w >> 2 ] = c [ 415571 ] ; bu ( x , 36367 , w ) | 0 ; w = c [ J >> 2 ] | 0 ; c [ v >> 2 ] = c [ 415572 ] ; bu ( w , 36367 , v ) | 0 ; v = c [ J >> 2 ] | 0 ; c [ u >> 2 ] = c [ 415573 ] ; bu ( v , 36367 , u ) | 0 ; u = c [ J >> 2 ] | 0 ; c [ t >> 2 ] = c [ 415574 ] ; b
function _d ( a , b ) { a = a | 0 ; b = b | 0 ; var d = 0 , e = 0 , f = 0 , g = 0 , h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 , o = 0 , p = 0 , q = 0 , r = 0 , s = 0 , t = 0 , u = 0 , v = 0 , w = 0 , x = 0 , y = 0 , z = 0 , A = 0 , B = 0 , C = 0 , D = 0 , E = 0 , F = 0 ; d = c [ a >> 2 ] | 0 ; e = a + 28 | 0 ; f = c [ e >> 2 ] | 0 ; g = a + 20 | 0 ; h = c [ g >> 2 ] | 0 ; do if ( ( f | 0 ) != - 1 ) { i = c [ d + 12 >> 2 ] | 0 ; j = f ; while ( 1 ) { k = i + ( j << 2 ) | 0 ; l = c [ k >> 2 ] | 0 ; m = ( l >>> 14 ) + - 131071 | 0 ; n = j ; j = ( m | 0 ) == - 1 ? - 1 : j + 1 + m | 0 ; if ( ( n | 0 ) > 0 ? ( m = k + - 4 | 0 , o = c [ m >> 2 ] | 0 , ( ( o & 63 ) + - 37 | 0 ) >>> 0 < 5 ) : 0 ) { p = m ; q = o } else { p = k ; q = l } if ( ( q & 63 | 0 ) == 41 ) { c [ p >> 2 ] = q & 8372224 | q >>> 23 << 6 | 40 ; o = h + ~ n | 0 ; if ( ( ( ( o | 0 ) > - 1 ? o : 0 - o | 0 ) | 0 ) > 131071 ) { r = 8 ; break } s = c [ k >> 2 ] & 16383 ; t = ( o << 14 ) + 2147467264 | 0 } else { o = h + ~ n | 0 ; if ( ( ( ( o | 0 ) > - 1 ? o : 0 - o | 0 ) | 0 ) > 131071 ) { r = 11 ; break } s = ( o << 14 ) + 2147467264 | 0 ; t = l & 16383 } c [ k >> 2 ] = s | t ; if ( ( j | 0 ) == - 1 ) { r = 14 ; break } } if ( ( r | 0 ) == 8 ) be ( c [ a + 12 >> 2 ] | 0 , 46263 ) ; else if ( ( r | 0 ) == 11 ) be ( c [ a + 12 >> 2 ] | 0 , 46263 ) ; else if ( ( r | 0 ) == 14 ) { u = c [ g >> 2 ] | 0 ; break } } else u = h ; while ( 0 ) ; c [ e >> 2 ] = - 1 ; e = d + 48 | 0 ; if ( ( u | 0 ) < ( c [ e >> 2 ] | 0 ) ) { v = c [ d + 12 >> 2 ] | 0 ; w = u } else { u = d + 12 | 0 ; h = ce ( c [ ( c [ a + 12 >> 2 ] | 0 ) + 32 >> 2 ] | 0 , c [ u >> 2 ] | 0 , e , 4 , 2147483645 , 46611 ) | 0 ; c [ u >> 2 ] = h ; v = h ; w = c [ g >> 2 ] | 0 } c [ v + ( w << 2 ) >> 2 ] = b ; b = c [ g >> 2 ] | 0 ; w = d + 52 | 0 ; v = a + 12 | 0 ; if ( ( b | 0 ) < ( c [ w >> 2 ] | 0 ) ) { x = d + 20 | 0 ; y = b ; z = c [ v >> 2 ] | 0 ; A = z + 8 | 0 ; B = c [ A >> 2 ] | 0 ; C = c [ x >> 2 ] | 0 ; D = C + ( y << 2 ) | 0 ; c [ D >> 2 ] = B ; E = c [ g >> 2 ] | 0 ; F = E + 1 | 0 ; c [ g >> 2 ] = F ; return E | 0 } else { b = d + 20 | 0 ; c [ b >> 2 ] = ce ( c [ ( c [ v >> 2 ] | 0 ) + 32 >> 2 ] | 0 , c [ b >> 2 ] | 0 , w , 4 , 2147483645 , 46611 ) | 0 ; x = b ; y = c [ g >> 2 ] | 0 ; z = c [ v >> 2 ] | 0 ; A = z + 8 | 0 ; B = c [ A >> 2 ] | 0 ; C = c [ x >> 2 ] | 0 ; D = C + ( y << 2 ) | 0 ; c [ D >> 2 ] = B ; E = c [ g >> 2 ] | 0 ; F = E + 1 | 0 ; c [ g >> 2 ] = F ; return E | 0 } return 0 } function $d ( e ) { e = e | 0 ; var f = 0 , g = 0 , h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 , o = 0 , p = 0 , q = 0 , r = 0 , s = 0 , t = 0 , u = 0 , v = 0 , w = 0 , x = 0 , y = 0 , z = 0 , A = 0 , B = 0 , C = 0 , D = 0 , E = 0 , F = 0 ; f = e + 16 | 0 ; g = c [ f >> 2 ] | 0 ; h = e + 12 | 0 ; i = c [ h >> 2 ] | 0 ; do if ( c [ g >> 2 ] | 0 ? a [ g + 9 >> 0 ] | 0 : 0 ) { j = e + 28 | 0 ; k = c [ j >> 2 ] | 0 ; c [ j >> 2 ] = - 1 ; l = _d ( e , 2147450916 ) | 0 ; do if ( ( k | 0 ) != - 1 ) { if ( ( l | 0 ) == - 1 ) { m = k ; n = d [ g + 8 >> 0 ] | 0 ; break } o = c [ ( c [ e >> 2 ] | 0 ) + 12 >> 2 ] | 0 ; p = l ; while ( 1 ) { q = o + ( p << 2 ) | 0 ; r = c [ q >> 2 ] | 0 ; s = ( r >>> 14 ) + - 131071 | 0 ; t = ( s | 0 ) == - 1 ? - 1 : p + 1 + s | 0 ; if ( ( t | 0 ) == - 1 ) break ; else p = t } o = k + ~ p | 0 ; if ( ( ( ( o | 0 ) > - 1 ? o : 0 - o | 0 ) | 0 ) > 131071 ) be ( c [ h >> 2 ] | 0 , 46263 ) ; else { c [ q >> 2 ] = ( o << 14 ) + 2147467264 | r & 16383 ; u = 11 ; break } } else u = 11 ; while ( 0 ) ; if ( ( u | 0 ) == 11 ) { k = d [ g + 8 >> 0 ] | 0 ; if ( ( l | 0 ) == - 1 ) { c [ e + 24 >> 2 ] = c [ e + 20 >> 2 ] ; break } else { m = l ; n = k } } k = c [ ( c [ e >> 2 ] | 0 ) + 12 >> 2 ] | 0 ; o = ( n << 6 ) + 64 & 16320 ; t = m ; do { s = k + ( t << 2 ) | 0 ; v = c [ s >> 2 ] | 0 ; w = ( v >>> 14 ) + - 131071 | 0 ; c [ s >> 2 ] = v & - 16321 | o ; t = ( w | 0 ) == - 1 ? - 1 : t + 1 + w | 0 } while ( ( t | 0 ) != - 1 ) ; c [ e + 24 >> 2 ] = c [ e + 20 >> 2 ] ; t = c [ j >> 2 ] | 0 ; if ( ( t | 0 ) == - 1 ) { c [ j >> 2 ] = m ; break } o = t ; while ( 1 ) { x = k + ( o << 2 ) | 0 ; y = c [ x >> 2 ] | 0 ; t = ( y >>> 14 ) + - 131071 | 0 ; l = ( t | 0 ) == - 1 ? - 1 : o + 1 + t | 0 ; if ( ( l | 0 ) == - 1 ) break ; else o = l } k = m + ~ o | 0 ; if ( ( ( ( k | 0 ) > - 1 ? k : 0 - k | 0 ) | 0 ) > 131071 ) be ( c [ h >> 2 ] | 0 , 46263 ) ; else { c [ x >> 2 ] = ( k << 14 ) + 2147467264 | y & 16383 ; break } } while ( 0 ) ; if ( a [ g + 10 >> 0 ] | 0 ) { y = i + 32 | 0 ; x = Oc ( c [ y >> 2 ] | 0 , 56767 , 5 ) | 0 ; m = i + 44 | 0 ; n = c [ m >> 2 ] | 0 ; r = n + 24 | 0 ; q = i + 28 | 0 ; k = c [ q >> 2 ] | 0 ; j = c [ k + 20 >> 2 ] | 0 ; l = n + 28 | 0 ; t = c [ l >> 2 ] | 0 ; w = n + 32 | 0 ; if ( ( t | 0 ) < ( c [ w >> 2 ] | 0 ) ) { z = k ; A = t ; B = n ; C = c [ r >> 2 ] | 0 } else { n = ce ( c [ y >> 2 ] | 0 , c [ r >> 2 ] | 0 , w , 16 , 32767 , 46290 ) | 0 ; c [ r >> 2 ] = n ; z = c [ q >> 2 ] | 0 ; A = c [ l >> 2 ] | 0 ; B = c [ m >> 2 ] | 0 ; C = n } c [ C + ( t << 4 ) >> 2 ] = x ; c [ C + ( t << 4 ) + 8 >> 2 ] = 0 ; a [ C + ( t << 4 ) + 12 >> 0 ] = a [ z + 46 >> 0 ] | 0 ; c [ C + ( t << 4 ) + 4 >> 2 ] = j ; c [ l >> 2 ] = A + 1 ; A = ( c [ B + 24 >> 2 ] | 0 ) + ( t << 4 ) | 0 ; t = b [ ( c [ z + 16 >> 2 ] | 0 ) + 6 >> 1 ] | 0 ; z = B + 16 | 0 ; l = c [ z >> 2 ] | 0 ; if ( ( l | 0 ) > ( t | 0 ) ) { j = B + 12 | 0 ; B = t ; t = l ; while ( 1 ) { l = c [ ( c [ j >> 2 ] | 0 ) + ( B << 4 ) >> 2 ] | 0 ; C = c [ A >> 2 ] | 0 ; x = a [ l + 4 >> 0 ] | 0 ; do if ( x << 24 >> 24 == ( a [ C + 4 >> 0 ] | 0 ) ) { if ( x << 24 >> 24 == 4 ) { if ( ( l | 0 ) != ( C | 0 ) ) { u = 35 ; break } } else { n = c [ l + 12 >> 2 ] | 0 ; if ( ( l | 0 ) != ( C | 0 ) ) { if ( ( n | 0 ) != ( c [ C + 12 >> 2 ] | 0 ) ) { u = 35 ; break } if ( ss ( l + 16 | 0 , C + 16 | 0 , n ) | 0 ) { u = 35 ; break } } } de ( i , B , A ) ; D = B ; E = c [ z >> 2 ] | 0 } else u = 35 ; while ( 0 ) ; if ( ( u | 0 ) == 35 ) { u = 0 ; D = B + 1 | 0 ; E = t } if ( ( D | 0 ) < ( E | 0 ) ) { B = D ; t = E } else break } } } E = c [ g >> 2 ] | 0 ; c [ f >> 2 ] = E ; f = g + 8 | 0 ; t = a [ f >> 0 ] | 0 ; D = e + 46 | 0 ; B = a [ D >> 0 ] | 0 ; u = B & 255 ; z = c [ ( c [ h >> 2 ] | 0 ) + 44 >> 2 ] | 0 ; A = z + 4 | 0 ; c [ A >> 2 ] = ( t & 255 ) - u + ( c [ A >> 2 ] | 0 ) ; if ( ( t & 255 ) < ( B & 255 ) ) { A = c [ e + 20 >> 2 ] | 0 ; j = c [ e + 40 >> 2 ] | 0 ; C = c [ ( c [ e >> 2 ] | 0 ) + 24 >> 2 ] | 0 ; l = c [ z >> 2 ] | 0 ; x = u ; while ( 1 ) { u = ( x & 255 ) + - 1 << 24 >> 24 ; c [ C + ( ( b [ l + ( j + ( u & 255 ) << 1 ) >> 1 ] | 0 ) * 12 | 0 ) + 8 >> 2 ] = A ; if ( ( u & 255 ) > ( t & 255 ) ) x = x + - 1 | 0 ; else break } a [ D >> 0 ] = t ; F = t } else F = B ; a [ e + 48 >> 0 ] = F ; F = c [ i + 44 >> 2 ] | 0 ; c [ F + 28 >> 2 ] = b [ g + 4 >> 1 ] ; B = b [ g + 6 >> 1 ] | 0 ; if ( ! E ) if ( ( c [ F + 16 >> 2 ] | 0 ) > ( B | 0 ) ) fe ( i , ( c [ F + 12 >> 2 ] | 0 ) + ( B << 4 ) | 0 ) ; else return ; F = z + 16 | 0 ; if ( ( c [ F >> 2 ] | 0 ) <= ( B | 0 ) ) return ; i = z + 12 | 0 ; z = g + 9 | 0 ; g = B ; B = t ; while ( 1 ) { t = c [ i >> 2 ] | 0 ; E = t + ( g << 4 ) + 12 | 0 ; D = B & 255 ; if ( ( d [ E >> 0 ] | 0 ) > ( B & 255 ) ) { if ( a [ z >> 0 ] | 0 ? ( x = c [ t + ( g << 4 ) + 4 >> 2 ] | 0 , ( x | 0 ) != - 1 ) : 0 ) { t = c [ ( c [ e >> 2 ] | 0 ) + 12 >> 2 ] | 0 ; A = ( D << 6 ) + 64 & 16320 ; D = x ; do { x = t + ( D << 2 ) | 0 ; j
function bl ( b , e , f ) { b = b | 0 ; e = e | 0 ; f = f | 0 ; var g = 0 , h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 , o = 0 , p = 0 , q = 0 , r = 0 , s = 0 , t = 0 , u = 0 , v = 0 , w = 0 , x = 0 , y = 0 , z = 0 , A = 0 , B = 0 , C = 0 , D = 0 , E = 0 , F = 0 , G = 0 , H = 0 , I = 0 , J = 0 , K = 0 , L = 0 , M = 0 , N = 0 , O = 0 , P = 0 , Q = 0 , R = 0 , S = 0 , T = 0 , U = 0 , V = 0 , W = 0 , X = 0 , Y = 0 , Z = 0 , _ = 0 , $ = 0 , aa = 0 , ba = 0 , ca = 0 , da = 0 , ea = 0 , fa = 0 , ga = 0 , ha = 0 , ia = 0 , ja = 0 , ka = 0 , la = 0 , ma = 0 , na = 0 , oa = 0 , pa = 0 , qa = 0 , ra = 0 , sa = 0 , ta = 0 , ua = 0 , va = 0 , wa = 0 , xa = 0 , ya = 0 , za = 0 , Aa = 0 , Ba = 0 , Ca = 0 , Da = 0 , Ea = 0 , Ga = 0 , Ha = 0 , Ia = 0 , Ja = 0 , Ka = 0 , La = 0 , Ma = 0 , Na = 0 , Oa = 0 , Pa = 0 , Qa = 0 , Ra = 0 , Sa = 0 , Ta = 0 , Ua = 0 , Va = 0 , Wa = 0 , Xa = 0 , Ya = 0 , Za = 0 , _a = 0 , $a = 0 , ab = 0 , bb = 0 , cb = 0 , db = 0 , eb = 0 , fb = 0 , gb = 0 , hb = 0 , ib = 0 , jb = 0 , kb = 0 , lb = 0 , mb = 0 , nb = 0 , ob = 0 , pb = 0 , qb = 0 , rb = 0 , sb = 0 , tb = 0 , ub = 0 , vb = 0 , wb = 0 , xb = 0 , yb = 0 , zb = 0 , Ab = 0 , Bb = 0 , Cb = 0 , Db = 0 , Eb = 0 , Fb = 0 , Gb = 0 , Hb = 0 , Ib = 0 , Jb = 0 , Kb = 0 , Lb = 0 , Mb = 0 , Nb = 0 , Ob = 0 , Pb = 0 , Qb = 0 , Rb = 0 , Sb = 0 , Tb = 0 , Ub = 0 , Vb = 0 , Wb = 0 , Xb = 0 , Yb = 0 , Zb = 0 , _b = 0 , $b = 0 , ac = 0 , bc = 0 , cc = 0 , dc = 0 , ec = 0 , fc = 0 , gc = 0 , hc = 0 , ic = 0 , jc = 0 , kc = 0 , lc = 0 , mc = 0 , nc = 0 , oc = 0 , pc = 0 , qc = 0 , rc = 0 , sc = 0 , tc = 0 , uc = 0 , vc = 0 , wc = 0 , xc = 0 , yc = 0 , zc = 0 , Ac = 0 , Bc = 0 , Cc = 0 , Dc = 0 , Ec = 0 , Fc = 0 , Gc = 0 , Hc = 0 , Ic = 0 , Jc = 0 , Kc = 0 , Lc = 0 , Mc = 0 , Nc = 0 , Oc = 0 , Pc = 0 , Qc = 0 , Rc = 0 , Sc = 0 , Tc = 0 , Uc = 0 , Vc = 0 , Wc = 0 , Xc = 0 , Yc = 0 , Zc = 0 , _c = 0 , $c = 0 , ad = 0 , bd = 0 , cd = 0 , dd = 0 , ed = 0 , fd = 0 , gd = 0 , hd = 0 , id = 0 , jd = 0 , kd = 0 , ld = 0 , md = 0 , nd = 0 , od = 0 , pd = 0 , qd = 0 , rd = 0 , sd = 0 , td = 0 , ud = 0 , vd = 0 , wd = 0 , xd = 0 , yd = 0 , zd = 0 , Ad = 0 , Bd = 0 , Cd = 0 , Dd = 0 , Ed = 0 , Fd = 0 , Gd = 0 , Hd = 0 , Id = 0 , Jd = 0 , Kd = 0 , Ld = 0 , Md = 0 , Nd = 0 , Od = 0 , Pd = 0 , Qd = 0 , Rd = 0 , Sd = 0 , Td = 0 , Ud = 0 , Vd = 0 , Wd = 0 , Xd = 0 , Yd = 0 , Zd = 0 , _d = 0 , $d = 0 , ae = 0 , be = 0 , ce = 0 , de = 0 , ee = 0 , fe = 0 , ge = 0 , he = 0 , ie = 0 , je = 0 , ke = 0 , le = 0 , me = 0 , ne = 0 , oe = 0 , pe = 0 , qe = 0 , re = 0 , se = 0 , te = 0 , ue = 0 , ve = 0 , we = 0 , xe = 0 , ye = 0 , ze = 0 , Ae = 0 , Be = 0 , Ce = 0 , De = 0 , Ee = 0 , Fe = 0 , Ge = 0 , He = 0 , Ie = 0 , Je = 0 , Ke = 0 , Le = 0 , Me = 0 , Ne = 0 , Oe = 0 , Pe = 0 , Qe = 0 , Re = 0 , Se = 0 , Te = 0 , Ue = 0 , Ve = 0 , We = 0 , Xe = 0 , Ye = 0 , Ze = 0 , _e = 0 , $e = 0 , af = 0 , bf = 0 , cf = 0 , df = 0 , ef = 0 , ff = 0 , gf = 0 , hf = 0 , jf = 0 , kf = 0 , lf = 0 , mf = 0 , nf = 0 , of = 0 , pf = 0 , qf = 0 , rf = 0 , sf = 0 , tf = 0 , uf = 0 , vf = 0 , wf = 0 , xf = 0 , yf = 0 , zf = 0 , Af = 0 , Bf = 0 , Cf = 0 , Df = 0 , Ef = 0 , Ff = 0 , Gf = 0 , Hf = 0 , If = 0 , Jf = 0 , Kf = 0 , Lf = 0 , Mf = 0 , Nf = 0 , Of = 0 , Pf = 0 , Qf = 0 , Rf = 0 , Sf = 0 , Tf = 0 , Uf = 0 , Vf = 0 , Wf = 0 , Xf = 0 , Yf = 0 , Zf = 0 , _f = 0 , $f = 0 , ag = 0 , bg = 0 , cg = 0 , dg = 0 , eg = 0 , fg = 0 , gg = 0 , hg = 0 , ig = 0 , jg = 0 , kg = 0 , lg = 0 , mg = 0 , ng = 0 , og = 0 , pg = 0 , qg = 0 , rg = 0 , sg = 0 , tg = 0 , ug = 0 , vg = 0 , wg = 0 , xg = 0 , yg = 0 , zg = 0 , Ag = 0 , Bg = 0 , Cg = 0 , Dg = 0 , Eg = 0 , Fg = 0 , Gg = 0 , Hg = 0 , Ig = 0 , Jg = 0 , Kg = 0 , Lg = 0 , Mg = 0 , Ng = 0 , Og = 0 , Pg = 0 , Qg = 0 , Rg = 0 , Sg = 0 , Tg = 0 , Ug = 0 , Vg = 0 , Wg = 0 , Xg = 0 , Yg = 0 , Zg = 0 , _g = 0 , $g = 0 , ah = 0 , bh = 0 , ch = 0 , dh = 0 , eh = 0 , fh = 0 , gh = 0 , hh = 0 , ih = 0 , jh = 0 , kh = 0 , lh = 0 , mh = 0 , nh = 0 , oh = 0 , ph = 0 , qh = 0 , rh = 0 , sh = 0 , th = 0 , uh = 0 , vh = 0 , wh = 0 , xh = 0 , yh = 0 , zh = 0 , Ah = 0 , Bh = 0 , Ch = 0 , Dh = 0 , Eh = 0 , Fh = 0 , Gh = 0 , Hh = 0 , Ih = 0 , Jh = 0 , Kh = 0 , Lh = 0 , Mh = 0 , Nh = 0 , Oh = 0 , Ph = 0 , Qh = 0 , Rh = 0 , Sh = 0 ; g = Fa ; Fa = Fa + 4112 | 0 ; h = g + 4108 | 0 ; i = g + 4104 | 0 ; j = g + 3072 | 0 ; k = g + 2048 | 0 ; l = g + 1024 | 0 ; m = g ; n = g + 4100 | 0 ; o = g + 4096 | 0 ; p = 0 ; do { c [ j + ( p << 2 ) >> 2 ] = p ; p = p + 1 | 0 } while ( ( p | 0 ) != 256 ) ; p = 0 ; do { c [ k + ( c [ j + ( p << 2 ) >> 2 ] << 2 ) >> 2 ] = p ; p = p + 1 | 0 } while ( ( p | 0 ) != 256 ) ; al ( b , f ) ; c [ 8783 ] = 1 ; c [ 525045 ] = 0 ; c [ 525043 ] = e ; c [ 525044 ] = 0 ; if ( ! f ) { q = 0 ; Fa = g ; return q | 0 } p = Fp ( f ) | 0 ; Xu ( p | 0 , b | 0 , f | 0 ) | 0 ; r = c [ 525043 ] | 0 ; s = c [ 8783 ] | 0 ; t = c [ 525044 ] | 0 ; u = r + t | 0 ; v = ( s ^ 255 ) & ( d [ u >> 0 ] | 0 ) ; a [ u >> 0 ] = v ; w = s << 1 ; x = t + 1 | 0 ; if ( ( w | 0 ) != 256 ) { y = ( w ^ 255 ) & v ; a [ u >> 0 ] = y ; v = s << 2 ; if ( ( v | 0 ) == 256 ) { s = r + x | 0 ; c [ 525044 ] = x ; w = d [ s >> 0 ] | 0 ; c [ 525045 ] = w ; z = w & 254 ; a [ s >> 0 ] = z ; A = 2 ; B = s ; C = x ; D = z ; E = 314 } else { F = x ; G = u ; H = y ; I = v ; J = t ; E = 312 } } else { v = r + x | 0 ; c [ 525044 ] = x ; y = d [ v >> 0 ] | 0 ; c [ 525045 ] = y ; u = y & 254 ; a [ v >> 0 ] = u ; F = t + 2 | 0 ; G = v ; H = u ; I = 2 ; J = x ; E = 312 } do if ( ( E | 0 ) == 312 ) { x = ( I ^ 255 ) & ( H & 255 ) ; a [ G >> 0 ] = x ; u = I << 1 ; if ( ( u | 0 ) == 256 ) { v = r + F | 0 ; c [ 525044 ] = F ; t = d [ v >> 0 ] | 0 ; c [ 525045 ] = t ; A = 1 ; B = v ; C = F ; D = t ; E = 314 ; break } t = ( u ^ 255 ) & x ; a [ G >> 0 ] = t ; x = I << 2 ; if ( ( x | 0 ) == 256 ) { u = r + F | 0 ; c [ 525044 ] = F ; v = d [ u >> 0 ] | 0 ; c [ 525045 ] = v ; y = v & 254 ; a [ u >> 0 ] = y ; K = 2 ; L = u ; M = F ; N = y ; E = 319 } else { O = G ; P = F ; Q = t ; R = x ; S = J ; E = 317 } } while ( 0 ) ; if ( ( E | 0 ) == 314 ) { J = ( A ^ 255 ) & D ; a [ B >> 0 ] = J ; O = B ; P = C + 1 | 0 ; Q = J ; R = A << 1 ; S = C ; E = 317 } do if ( ( E | 0 ) == 317 ) { C = ( R ^ 255 ) & ( Q & 255 ) ; a [ O >> 0 ] = C ; A = R << 1 ; if ( ( A | 0 ) == 256 ) { J = r + P | 0 ; c [ 525044 ] = P ; B = d [ J >> 0 ] | 0 ; c [ 525045 ] = B ; K = 1 ; L = J ; M = P ; N = B ; E = 319 ; break } B = ( A ^ 255 ) & C ; a [ O >> 0 ] = B ; C = R << 2 ; if ( ( C | 0 ) == 256 ) { A = r + P | 0 ; c [ 525044 ] = P ; J = d [ A >> 0 ] | 0 ; c [ 525045 ] = J ; D = J & 254 ; a [ A >> 0 ] = D ; T = 2 ; U = A ; V = P ; W = D ; E = 324 } else { X = O ; Y = P ; Z = B ; _ = C ; $ = S ; E = 322 } } while ( 0 ) ; if ( ( E | 0 ) == 319 ) { S = ( K ^ 255 ) & N ; a [ L >> 0 ] = S ; X = L ; Y = M + 1 | 0 ; Z = S ; _ = K << 1 ; $ = M ; E = 322 } do if ( ( E | 0 ) == 322 ) { M = ( _ ^ 255 ) & ( Z & 255 ) ; a [ X >> 0 ] = M ; K = _ << 1 ; if ( ( K | 0 ) == 256 ) { S = r + Y | 0 ; c [ 525044 ] = Y ; L = d [ S >> 0 ] | 0 ; c [ 525045 ] = L ; T = 1 ; U = S ; V = Y ; W = L ; E = 324 ; break } L = ( K ^ 255 ) & M ; a [ X >> 0 ] = L ; M = _ << 2 ; if ( ( M | 0 ) == 256 ) { K = r + Y | 0 ; c [ 525044 ] = Y ; S = d [ K >> 0 ] | 0 ; c [ 525045 ] = S ; aa = Y ; ba = K ; ca = Y + 1 | 0 ; da = S ; ea = 1 } else { fa = X ; ga = Y ; ha = L ; ia = M ; ja = $ ; E = 326 } } while ( 0 ) ; if ( ( E | 0 )
function Dc ( b , e ) { b = b | 0 ; e = e | 0 ; var f = 0 , g = 0 , h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 , o = 0 , p = 0 , q = 0 , r = 0 , s = 0 , t = 0 ; f = b + 12 | 0 ; g = c [ f >> 2 ] | 0 ; h = b + 56 | 0 ; b = c [ h >> 2 ] | 0 ; if ( ! b ) return ; i = g + 48 | 0 ; j = g + 56 | 0 ; k = g + 50 | 0 ; l = g + 49 | 0 ; m = b ; while ( 1 ) { b = m + 8 | 0 ; n = c [ b >> 2 ] | 0 ; if ( n >>> 0 < e >>> 0 ) { o = 16 ; break } c [ h >> 2 ] = c [ m >> 2 ] ; p = m + 12 | 0 ; do if ( ( ( a [ i >> 0 ] ^ 3 ) & ( a [ m + 5 >> 0 ] ^ 3 ) ) << 24 >> 24 ) { q = m + 16 | 0 ; c [ ( c [ q >> 2 ] | 0 ) + 12 >> 2 ] = c [ p >> 2 ] ; c [ ( c [ p >> 2 ] | 0 ) + 16 >> 2 ] = c [ q >> 2 ] ; r = c [ b >> 2 ] | 0 ; c [ p >> 2 ] = c [ r >> 2 ] ; s = c [ r + 4 >> 2 ] | 0 ; c [ q >> 2 ] = s ; c [ b >> 2 ] = p ; c [ m >> 2 ] = c [ j >> 2 ] ; c [ j >> 2 ] = m ; q = m + 5 | 0 ; r = a [ q >> 0 ] | 0 ; t = r & 255 ; if ( ! ( t & 7 ) ) { if ( ( a [ k >> 0 ] | 0 ) != 2 ? ( d [ l >> 0 ] | 0 ) >= 2 : 0 ) { a [ q >> 0 ] = t & 184 | a [ i >> 0 ] & 3 ; break } a [ q >> 0 ] = r & - 69 | 4 ; if ( s & 64 | 0 ? ( s = c [ p >> 2 ] | 0 , a [ s + 5 >> 0 ] & 3 ) : 0 ) uc ( g , s ) } } else { if ( ( n | 0 ) != ( p | 0 ) ) { s = m + 16 | 0 ; c [ ( c [ s >> 2 ] | 0 ) + 12 >> 2 ] = c [ p >> 2 ] ; c [ ( c [ p >> 2 ] | 0 ) + 16 >> 2 ] = c [ s >> 2 ] } s = c [ f >> 2 ] | 0 ; Ma [ c [ s >> 2 ] & 1 ] ( c [ s + 4 >> 2 ] | 0 , m , 20 , 0 ) | 0 ; r = s + 12 | 0 ; c [ r >> 2 ] = ( c [ r >> 2 ] | 0 ) + - 20 } while ( 0 ) ; m = c [ h >> 2 ] | 0 ; if ( ! m ) { o = 16 ; break } } if ( ( o | 0 ) == 16 ) return } function Ec ( e , f , g ) { e = e | 0 ; f = f | 0 ; g = g | 0 ; var h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 , o = 0 , p = 0 , q = 0 , r = 0 , s = 0 , t = 0 , u = 0 , v = 0 , w = 0 , x = 0 , y = 0 , z = 0 , A = 0 , B = 0 , C = 0 , D = 0 , E = 0 ; h = Fa ; Fa = Fa + 16 | 0 ; i = h ; j = f + 4 | 0 ; a : do switch ( c [ j >> 2 ] & 63 ) { case 0 : { k = 1 ; break } case 3 : { k = ( c [ f >> 2 ] | 0 ) == ( c [ g >> 2 ] | 0 ) ; break } case 1 : { k = ( c [ f >> 2 ] | 0 ) == ( c [ g >> 2 ] | 0 ) ; break } case 2 : { k = ( c [ f >> 2 ] | 0 ) == ( c [ g >> 2 ] | 0 ) ; break } case 54 : case 22 : { k = ( c [ f >> 2 ] | 0 ) == ( c [ g >> 2 ] | 0 ) ; break } case 4 : { k = ( c [ f >> 2 ] | 0 ) == ( c [ g >> 2 ] | 0 ) ; break } case 20 : { l = c [ f >> 2 ] | 0 ; m = c [ g >> 2 ] | 0 ; n = c [ l + 12 >> 2 ] | 0 ; if ( ( l | 0 ) != ( m | 0 ) ) if ( ( n | 0 ) == ( c [ m + 12 >> 2 ] | 0 ) ) k = ( ss ( l + 16 | 0 , m + 16 | 0 , n ) | 0 ) == 0 ; else k = 0 ; else k = 1 ; break } case 7 : { n = c [ f >> 2 ] | 0 ; m = c [ g >> 2 ] | 0 ; if ( ( n | 0 ) != ( m | 0 ) ) if ( ( ( e | 0 ) != 0 ? ( l = c [ n + 8 >> 2 ] | 0 , n = c [ m + 8 >> 2 ] | 0 , ( l | 0 ) != 0 ) : 0 ) ? ( m = l + 6 | 0 , o = a [ m >> 0 ] | 0 , ( o & 32 ) == 0 ) : 0 ) { p = c [ ( c [ e + 12 >> 2 ] | 0 ) + 176 >> 2 ] | 0 ; q = c [ p + 8 >> 2 ] | 0 ; r = ( c [ l + 16 >> 2 ] | 0 ) + ( ( ( 1 << ( d [ l + 7 >> 0 ] | 0 ) ) + - 1 & q ) * 20 | 0 ) | 0 ; while ( 1 ) { if ( ( c [ r + 12 >> 2 ] | 0 ) == 68 ? ( c [ r + 8 >> 2 ] | 0 ) == ( p | 0 ) : 0 ) { s = 17 ; break } t = c [ r + 16 >> 2 ] | 0 ; if ( ! t ) { u = 2099900 ; break } else r = t } if ( ( s | 0 ) == 17 ) u = r ; t = u + 4 | 0 ; v = c [ t >> 2 ] | 0 ; if ( ! v ) { a [ m >> 0 ] = o | 32 ; k = 0 ; break a } if ( u ) if ( ( l | 0 ) != ( n | 0 ) ) if ( ( n | 0 ) != 0 ? ( w = n + 6 | 0 , x = a [ w >> 0 ] | 0 , ( x & 32 ) == 0 ) : 0 ) { y = ( c [ n + 16 >> 2 ] | 0 ) + ( ( ( 1 << ( d [ n + 7 >> 0 ] | 0 ) ) + - 1 & q ) * 20 | 0 ) | 0 ; while ( 1 ) { if ( ( c [ y + 12 >> 2 ] | 0 ) == 68 ? ( c [ y + 8 >> 2 ] | 0 ) == ( p | 0 ) : 0 ) { s = 28 ; break } z = c [ y + 16 >> 2 ] | 0 ; if ( ! z ) { A = 2099900 ; break } else y = z } if ( ( s | 0 ) == 28 ) A = y ; p = c [ A + 4 >> 2 ] | 0 ; if ( ! p ) { a [ w >> 0 ] = x | 32 ; k = 0 ; break a } if ( ( A | 0 ) != 0 & ( v | 0 ) == ( p | 0 ) ? ( Ec ( 0 , u , A ) | 0 ) != 0 : 0 ) { B = u ; C = t ; s = 59 } else k = 0 } else k = 0 ; else { B = u ; C = t ; s = 59 } else k = 0 } else k = 0 ; else k = 1 ; break } case 5 : { p = c [ f >> 2 ] | 0 ; q = c [ g >> 2 ] | 0 ; if ( ( p | 0 ) != ( q | 0 ) ) if ( ( ( e | 0 ) != 0 ? ( n = c [ p + 8 >> 2 ] | 0 , p = c [ q + 8 >> 2 ] | 0 , ( n | 0 ) != 0 ) : 0 ) ? ( q = n + 6 | 0 , l = a [ q >> 0 ] | 0 , ( l & 32 ) == 0 ) : 0 ) { o = c [ ( c [ e + 12 >> 2 ] | 0 ) + 176 >> 2 ] | 0 ; m = c [ o + 8 >> 2 ] | 0 ; r = ( c [ n + 16 >> 2 ] | 0 ) + ( ( ( 1 << ( d [ n + 7 >> 0 ] | 0 ) ) + - 1 & m ) * 20 | 0 ) | 0 ; while ( 1 ) { if ( ( c [ r + 12 >> 2 ] | 0 ) == 68 ? ( c [ r + 8 >> 2 ] | 0 ) == ( o | 0 ) : 0 ) { s = 41 ; break } z = c [ r + 16 >> 2 ] | 0 ; if ( ! z ) { D = 2099900 ; break } else r = z } if ( ( s | 0 ) == 41 ) D = r ; t = D + 4 | 0 ; v = c [ t >> 2 ] | 0 ; if ( ! v ) { a [ q >> 0 ] = l | 32 ; k = 0 ; break a } if ( D ) if ( ( n | 0 ) != ( p | 0 ) ) if ( ( p | 0 ) != 0 ? ( x = p + 6 | 0 , w = a [ x >> 0 ] | 0 , ( w & 32 ) == 0 ) : 0 ) { y = ( c [ p + 16 >> 2 ] | 0 ) + ( ( ( 1 << ( d [ p + 7 >> 0 ] | 0 ) ) + - 1 & m ) * 20 | 0 ) | 0 ; while ( 1 ) { if ( ( c [ y + 12 >> 2 ] | 0 ) == 68 ? ( c [ y + 8 >> 2 ] | 0 ) == ( o | 0 ) : 0 ) { s = 52 ; break } z = c [ y + 16 >> 2 ] | 0 ; if ( ! z ) { E = 2099900 ; break } else y = z } if ( ( s | 0 ) == 52 ) E = y ; o = c [ E + 4 >> 2 ] | 0 ; if ( ! o ) { a [ x >> 0 ] = w | 32 ; k = 0 ; break a } if ( ( E | 0 ) != 0 & ( v | 0 ) == ( o | 0 ) ? ( Ec ( 0 , D , E ) | 0 ) != 0 : 0 ) { B = D ; C = t ; s = 59 } else k = 0 } else k = 0 ; else { B = D ; C = t ; s = 59 } else k = 0 } else k = 0 ; else k = 1 ; break } default : k = ( c [ f >> 2 ] | 0 ) == ( c [ g >> 2 ] | 0 ) } while ( 0 ) ; b : do if ( ( s | 0 ) == 59 ) { D = e + 8 | 0 ; E = c [ D >> 2 ] | 0 ; u = e + 28 | 0 ; A = E - ( c [ u >> 2 ] | 0 ) | 0 ; c [ D >> 2 ] = E + 8 ; c [ E >> 2 ] = c [ B >> 2 ] ; c [ E + 4 >> 2 ] = c [ C >> 2 ] ; E = c [ D >> 2 ] | 0 ; c [ D >> 2 ] = E + 8 ; c [ E >> 2 ] = c [ f >> 2 ] ; c [ E + 4 >> 2 ] = c [ j >> 2 ] ; E = c [ D >> 2 ] | 0 ; c [ D >> 2 ] = E + 8 ; c [ E >> 2 ] = c [ g >> 2 ] ; c [ E + 4 >> 2 ] = c [ g + 4 >> 2 ] ; E = ( c [ D >> 2 ] | 0 ) + - 24 | 0 ; o = a [ ( c [ e + 16 >> 2 ] | 0 ) + 18 >> 0 ] & 1 ; m = e + 38 | 0 ; p = ( b [ m >> 1 ] | 0 ) + 1 << 16 >> 16 ; b [ m >> 1 ] = p ; if ( ( p & 65535 ) > 199 ) { if ( p << 16 >> 16 == 200 ) lc ( e , 45525 , i ) ; if ( ( p & 65535 ) > 224 ) jc ( e , 6 ) } p = o << 24 >> 24 != 0 ; if ( ! p ) { o = e + 36 | 0 ; b [ o >> 1 ] = ( b [ o >> 1 ] | 0 ) + 1 << 16 >> 16 } if ( ! ( pc ( e , E , 1 ) | 0 ) ) qc ( e ) ; if ( ! p ) { p = e + 36 | 0 ; b [ p >> 1 ] = ( b [ p >> 1 ] | 0 ) + - 1 << 16 >> 16 } b [ m >> 1 ] = ( b [ m >> 1 ] | 0 ) + - 1 << 16 >> 16 ; m = ( c [ u >> 2 ] | 0 ) + A | 0 ; A = c [ D >> 2 ] | 0 ; u = A + - 8 | 0 ; c [ D >> 2 ] = u ; c [ m >> 2 ] = c [ u >> 2 ] ; c [ m + 4 >> 2 ] = c [ A + - 4 >> 2 ] ; A = c [ D >> 2 ] | 0 ; switch ( c [ A + 4 >> 2 ] | 0 ) { case 0 : { k = 0 ; break b ; break } case 1 : { k = ( c [ A >> 2 ] | 0 ) != 0 ; break b ; break } default : { k = 1 ; break b } } } while ( 0 ) ; Fa = h ; return k & 1 | 0 } function Fc ( a , b , d ) { a = a | 0 ; b = b | 0 ; d = d | 0 ; var e = 0 , f = 0 , g = 0 , h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 , o = 0 , p = 0 , q = 0 ; e = c [ b + 4 >> 2 ] | 0 ; if ( ( e | 0 ) == 3 ) { if ( ( c [ d + 4 >> 2 ] | 0 ) == 3 ) { f = ( c [ b >> 2 ] | 0 ) <
function Bp ( b , e , f , g , h , i ) { b = b | 0 ; e = e | 0 ; f = f | 0 ; g = g | 0 ; h = h | 0 ; i = i | 0 ; var j = 0 , k = 0 , l = 0 , m = 0 , n = 0 , o = 0 , p = 0 , q = 0 , r = 0 , s = 0 , t = 0 , u = 0 , v = 0 , w = 0 , x = 0 , y = 0 , z = 0 , A = 0 , C = 0 , D = 0 , E = 0 , F = 0 , G = 0 , H = 0 , I = 0 , J = 0 , K = 0 , L = 0 , M = 0 , N = 0 , O = 0 , P = 0 , Q = 0 , R = 0 , S = 0 , T = 0 , U = 0 , V = 0 , W = 0 , X = 0 , Y = 0 , Z = 0 ; j = Fa ; Fa = Fa + 64 | 0 ; k = j ; switch ( h | 0 ) { case 3 : case 0 : { l = 1 ; break } case 2 : { l = 3 ; break } case 4 : { l = 2 ; break } case 6 : { l = 4 ; break } default : l = 0 } m = B ( l , i ) | 0 ; l = ( ( B ( m , f ) | 0 ) + 7 | 0 ) >>> 3 ; f = ( m + 7 | 0 ) >>> 3 ; if ( ! m ) { n = 31 ; Fa = j ; return n | 0 } if ( ( h | 0 ) == 3 | i >>> 0 < 8 ) { if ( ! g ) { n = 0 ; Fa = j ; return n | 0 } i = l + 1 | 0 ; if ( ! l ) { h = 0 ; do { a [ b + ( B ( h , i ) | 0 ) >> 0 ] = 0 ; h = h + 1 | 0 } while ( ( h | 0 ) != ( g | 0 ) ) ; n = 0 ; Fa = j ; return n | 0 } h = 0 ; do { m = B ( h , i ) | 0 ; o = B ( h , l ) | 0 ; a [ b + m >> 0 ] = 0 ; p = b + ( m + 1 ) | 0 ; m = e + o | 0 ; o = 0 ; do { a [ p + o >> 0 ] = a [ m + o >> 0 ] | 0 ; o = o + 1 | 0 } while ( ( o | 0 ) != ( l | 0 ) ) ; h = h + 1 | 0 } while ( ( h | 0 ) != ( g | 0 ) ) ; n = 0 ; Fa = j ; return n | 0 } h = k ; i = h + 60 | 0 ; do { c [ h >> 2 ] = 0 ; h = h + 4 | 0 } while ( ( h | 0 ) < ( i | 0 ) ) ; h = l << 1 ; i = k + 8 | 0 ; do if ( ! l ) { c [ k + 4 >> 2 ] = l ; c [ k + 16 >> 2 ] = l ; c [ k + 28 >> 2 ] = l ; c [ k + 40 >> 2 ] = l ; q = k + 56 | 0 ; r = k + 44 | 0 ; s = k + 32 | 0 ; t = k + 20 | 0 ; u = 0 ; v = 0 ; w = 0 ; x = 0 ; y = 0 ; z = 89 } else { o = Gp ( 0 , h ) | 0 ; if ( o ) { c [ i >> 2 ] = h ; c [ k >> 2 ] = o ; c [ k + 4 >> 2 ] = l ; m = k + 20 | 0 ; p = Gp ( 0 , h ) | 0 ; if ( p ) { c [ m >> 2 ] = h ; c [ k + 12 >> 2 ] = p ; c [ k + 16 >> 2 ] = l ; A = k + 32 | 0 ; C = Gp ( 0 , h ) | 0 ; if ( C ) { c [ A >> 2 ] = h ; c [ k + 24 >> 2 ] = C ; c [ k + 28 >> 2 ] = l ; D = k + 44 | 0 ; E = Gp ( 0 , h ) | 0 ; if ( E ) { c [ D >> 2 ] = h ; c [ k + 36 >> 2 ] = E ; c [ k + 40 >> 2 ] = l ; F = k + 56 | 0 ; G = Gp ( 0 , h ) | 0 ; if ( ! G ) { H = m ; I = E ; J = C ; K = p ; L = o } else { c [ F >> 2 ] = h ; c [ k + 48 >> 2 ] = G ; q = F ; r = D ; s = A ; t = m ; u = E ; v = p ; w = o ; x = C ; y = G ; z = 89 ; break } } else { H = m ; I = 0 ; J = C ; K = p ; L = o } } else { H = m ; I = 0 ; J = 0 ; K = p ; L = o } } else { H = m ; I = 0 ; J = 0 ; K = 0 ; L = o } } else { H = k + 20 | 0 ; I = 0 ; J = 0 ; K = 0 ; L = 0 } M = 9949 ; N = k + 32 | 0 ; O = k + 44 | 0 ; P = k + 56 | 0 ; Q = H ; R = L ; S = K ; T = J ; U = I ; V = 0 } while ( 0 ) ; if ( ( z | 0 ) == 89 ) { c [ k + 52 >> 2 ] = l ; if ( ! g ) { M = 0 ; N = s ; O = r ; P = q ; Q = t ; R = w ; S = v ; T = x ; U = u ; V = y } else { y = ( l | 0 ) == 0 ; u = ( f | 0 ) != 0 ; x = ( l | 0 ) != 0 ; v = f >>> 0 < l >>> 0 ; w = l + 1 | 0 ; z = 0 ; I = 0 ; J = 0 ; K = 0 ; while ( 1 ) { L = J ; J = e + ( B ( K , l ) | 0 ) | 0 ; H = ( L | 0 ) == 0 ; h = z ; i = I ; o = 0 ; do { m = c [ k + ( o * 12 | 0 ) >> 2 ] | 0 ; a : do switch ( ( o & 255 ) << 24 >> 24 ) { case 0 : { if ( ! y ) { p = 0 ; do { a [ m + p >> 0 ] = a [ J + p >> 0 ] | 0 ; p = p + 1 | 0 } while ( ( p | 0 ) != ( l | 0 ) ) } break } case 1 : { if ( H ) { if ( u ) { p = 0 ; do { a [ m + p >> 0 ] = a [ J + p >> 0 ] | 0 ; p = p + 1 | 0 } while ( ( p | 0 ) != ( f | 0 ) ) } if ( ! v ) break a ; p = f ; do { a [ m + p >> 0 ] = ( d [ J + p >> 0 ] | 0 ) - ( d [ J + ( p - f ) >> 0 ] | 0 ) ; p = p + 1 | 0 } while ( ( p | 0 ) != ( l | 0 ) ) } else { if ( u ) { p = 0 ; do { a [ m + p >> 0 ] = a [ J + p >> 0 ] | 0 ; p = p + 1 | 0 } while ( ( p | 0 ) != ( f | 0 ) ) } if ( ! v ) break a ; p = f ; do { a [ m + p >> 0 ] = ( d [ J + p >> 0 ] | 0 ) - ( d [ J + ( p - f ) >> 0 ] | 0 ) ; p = p + 1 | 0 } while ( ( p | 0 ) != ( l | 0 ) ) } break } case 2 : { if ( H ) { if ( ! x ) break a ; p = 0 ; do { a [ m + p >> 0 ] = a [ J + p >> 0 ] | 0 ; p = p + 1 | 0 } while ( ( p | 0 ) != ( l | 0 ) ) } else { if ( ! x ) break a ; p = 0 ; do { a [ m + p >> 0 ] = ( d [ J + p >> 0 ] | 0 ) - ( d [ L + p >> 0 ] | 0 ) ; p = p + 1 | 0 } while ( ( p | 0 ) != ( l | 0 ) ) } break } case 3 : { if ( H ) { if ( u ) { p = 0 ; do { a [ m + p >> 0 ] = a [ J + p >> 0 ] | 0 ; p = p + 1 | 0 } while ( ( p | 0 ) != ( f | 0 ) ) } if ( ! v ) break a ; p = f ; do { a [ m + p >> 0 ] = ( d [ J + p >> 0 ] | 0 ) - ( ( d [ J + ( p - f ) >> 0 ] | 0 ) >>> 1 & 255 ) ; p = p + 1 | 0 } while ( ( p | 0 ) != ( l | 0 ) ) } else { if ( u ) { p = 0 ; do { a [ m + p >> 0 ] = ( d [ J + p >> 0 ] | 0 ) - ( ( d [ L + p >> 0 ] | 0 ) >>> 1 & 255 ) ; p = p + 1 | 0 } while ( ( p | 0 ) != ( f | 0 ) ) } if ( ! v ) break a ; p = f ; do { a [ m + p >> 0 ] = ( d [ J + p >> 0 ] | 0 ) - ( ( ( d [ L + p >> 0 ] | 0 ) + ( d [ J + ( p - f ) >> 0 ] | 0 ) | 0 ) >>> 1 ) ; p = p + 1 | 0 } while ( ( p | 0 ) != ( l | 0 ) ) } break } case 4 : { if ( H ) { if ( u ) { p = 0 ; do { a [ m + p >> 0 ] = a [ J + p >> 0 ] | 0 ; p = p + 1 | 0 } while ( ( p | 0 ) != ( f | 0 ) ) } if ( ! v ) break a ; p = f ; do { a [ m + p >> 0 ] = ( d [ J + p >> 0 ] | 0 ) - ( d [ J + ( p - f ) >> 0 ] | 0 ) ; p = p + 1 | 0 } while ( ( p | 0 ) != ( l | 0 ) ) } else { if ( u ) { p = 0 ; do { a [ m + p >> 0 ] = ( d [ J + p >> 0 ] | 0 ) - ( d [ L + p >> 0 ] | 0 ) ; p = p + 1 | 0 } while ( ( p | 0 ) != ( f | 0 ) ) } if ( ! v ) break a ; p = f ; do { C = p - f | 0 ; G = a [ J + C >> 0 ] | 0 ; E = a [ L + p >> 0 ] | 0 ; A = a [ L + C >> 0 ] | 0 ; C = E & 255 ; D = A & 255 ; F = C - D | 0 ; W = ( F | 0 ) > - 1 ? F : 0 - F | 0 ; F = G & 255 ; X = F - D | 0 ; Y = ( X | 0 ) > - 1 ? X : 0 - X | 0 ; X = C + F + ( B ( D , - 2 ) | 0 ) | 0 ; D = ( X | 0 ) > - 1 ? X : 0 - X | 0 ; a [ m + p >> 0 ] = ( d [ J + p >> 0 ] | 0 ) - ( ( ( W | 0 ) > ( Y | 0 ) | ( W | 0 ) > ( D | 0 ) ? ( ( Y | 0 ) > ( D | 0 ) ? A : E ) : G ) & 255 ) ; p = p + 1 | 0 } while ( ( p | 0 ) != ( l | 0 ) ) } break } default : { } } while ( 0 ) ; p = c [ k + ( o * 12 | 0 ) + 4 >> 2 ] | 0 ; if ( ! p ) Z = 0 ; else { G = 0 ; E = 0 ; while ( 1 ) { A = E + ( d [ m + G >> 0 ] | 0 ) | 0 ; G = G + 3 | 0 ; if ( G >>> 0 >= p >>> 0 ) { Z = A ; break } else E = A } } E = ( o | 0 ) == 0 | Z >>> 0 < h >>> 0 ; h = E ? Z : h ; i = E ? o : i ; o = o + 1 | 0 } while ( ( o | 0 ) != 5 ) ; o = B ( K , w ) | 0 ; a [ b + o >> 0 ] = i ; if ( ! y ) { L = c [ k + ( i * 12 | 0 ) >> 2 ] | 0 ; H = 0 ; do { E = H ; H = H + 1 | 0 ; a [ b + ( H + o ) >> 0 ] = a [ L + E >> 0 ] | 0 } while ( ( H | 0 ) != ( l | 0 ) ) } K = K + 1 | 0 ; if ( ( K | 0 ) == ( g | 0 ) ) break ; else { z = h ; I = i } } M = 0 ; N = s ; O = r ; P = q ; Q = t ; R = c [ k >> 2 ] | 0 ; S = c [ k + 12 >> 2 ] | 0 ; T = c [ k + 24 >> 2 ] | 0 ; U = c [ k + 36 >> 2 ] | 0 ; V = c [ k + 48 >> 2 ] | 0 } } Hp ( R ) ; c [ Q >> 2 ] = 0 ; Hp ( S ) ; c [ N >> 2 ] = 0 ; Hp ( T ) ; c [ O >> 2 ] = 0 ; Hp ( U ) ; c [ P >> 2 ] = 0 ; Hp ( V ) ; n = M ; Fa = j ; return n | 0 } function Cp ( b , d , e , f , g , h ) { b = b | 0 ; d = d | 0 ; e = e | 0 ; f = f | 0 ; g = g | 0 ; h = h | 0 ; var i = 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 , o = 0 ; i = Fa ; Fa = Fa + 240 | 0 ; j = i + 8 | 0 ; k = i + 4 | 0 ; l = i ; c [ j >> 2 ] = 2 ; c [ j + 4 >> 2 ] = 1 ; c [ j + 8 >> 2 ] = 2048 ; c [ j + 12 >> 2 ] = 1 ; c [ j + 16 >> 2 ] = 0 ; c [ j + 20 >> 2 ] = 1 ; c [ j + 24 >> 2 ] = 0 ; c [ j + 32 >> 2 ] = 0 ; c [ j + 28 >> 2 ] = 0 ; m = j + 64 | 0 ; c [ m >> 2 ] = 0 ; c [ m + 4 >> 2 ] = 0 ; c [ m + 8 >> 2 ] =
function bp ( b , e , f , g ) { b = b | 0 ; e = e | 0 ; f = f | 0 ; g = g | 0 ; var h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 , o = 0 , p = 0 , q = 0 , r = 0 , s = 0 , t = 0 , u = 0 , v = 0 , w = 0 , x = 0 , y = 0 , z = 0 , A = 0 , B = 0 , C = 0 , D = 0 , E = 0 , F = 0 , G = 0 , H = 0 , I = 0 , J = 0 , K = 0 , L = 0 , M = 0 , N = 0 , O = 0 , P = 0 , Q = 0 , R = 0 , S = 0 , T = 0 , U = 0 , V = 0 , W = 0 , X = 0 , Y = 0 , Z = 0 , _ = 0 , $ = 0 , aa = 0 , ba = 0 , ca = 0 , da = 0 , ea = 0 , fa = 0 , ga = 0 , ha = 0 , ia = 0 , ja = 0 , ka = 0 , la = 0 , ma = 0 , na = 0 , oa = 0 , pa = 0 , qa = 0 , ra = 0 , sa = 0 , ta = 0 , ua = 0 , va = 0 , wa = 0 , xa = 0 , ya = 0 , za = 0 , Aa = 0 , Ba = 0 , Ca = 0 , Da = 0 , Ea = 0 , Ga = 0 , Ha = 0 , Ia = 0 , Ja = 0 , Ka = 0 , La = 0 , Ma = 0 , Na = 0 , Oa = 0 , Pa = 0 , Qa = 0 , Ra = 0 , Sa = 0 , Ta = 0 , Ua = 0 , Va = 0 , Wa = 0 , Xa = 0 , Ya = 0 , Za = 0 , _a = 0 , $a = 0 , ab = 0 , bb = 0 , cb = 0 , db = 0 , eb = 0 , fb = 0 , gb = 0 , hb = 0 , ib = 0 , jb = 0 , kb = 0 , lb = 0 , mb = 0 , nb = 0 , ob = 0 , pb = 0 , qb = 0 , rb = 0 , sb = 0 , tb = 0 , ub = 0 , vb = 0 , wb = 0 , xb = 0 , yb = 0 , zb = 0 , Ab = 0 , Bb = 0 , Cb = 0 , Db = 0 , Eb = 0 , Fb = 0 , Gb = 0 , Hb = 0 , Ib = 0 , Jb = 0 , Kb = 0 , Lb = 0 , Mb = 0 , Nb = 0 , Ob = 0 , Pb = 0 , Qb = 0 , Rb = 0 , Sb = 0 , Tb = 0 , Ub = 0 , Vb = 0 , Wb = 0 , Xb = 0 , Yb = 0 , Zb = 0 , _b = 0 , $b = 0 , ac = 0 , bc = 0 , cc = 0 , dc = 0 , ec = 0 , fc = 0 , gc = 0 , hc = 0 , ic = 0 , jc = 0 , kc = 0 , lc = 0 , mc = 0 , nc = 0 , oc = 0 , pc = 0 , qc = 0 , rc = 0 , sc = 0 , tc = 0 , uc = 0 , vc = 0 , wc = 0 , xc = 0 , yc = 0 , zc = 0 , Ac = 0 , Bc = 0 , Cc = 0 , Dc = 0 , Ec = 0 , Fc = 0 , Gc = 0 , Hc = 0 , Ic = 0 , Jc = 0 , Kc = 0 , Lc = 0 , Mc = 0 , Nc = 0 , Oc = 0 , Pc = 0 , Qc = 0 , Rc = 0 , Sc = 0 , Tc = 0 , Uc = 0 , Vc = 0 , Wc = 0 , Xc = 0 , Yc = 0 , Zc = 0 , _c = 0 , $c = 0 , ad = 0 , bd = 0 , cd = 0 , dd = 0 , ed = 0 , fd = 0 , gd = 0 , hd = 0 , id = 0 , jd = 0 , kd = 0 , ld = 0 , md = 0 , nd = 0 , od = 0 , pd = 0 , qd = 0 , rd = 0 , sd = 0 , td = 0 , ud = 0 , vd = 0 , wd = 0 , xd = 0 , yd = 0 , zd = 0 , Ad = 0 , Bd = 0 , Cd = 0 , Dd = 0 , Ed = 0 , Fd = 0 , Gd = 0 , Hd = 0 , Id = 0 , Jd = 0 , Kd = 0 , Ld = 0 , Md = 0 , Nd = 0 , Od = 0 , Pd = 0 , Qd = 0 , Rd = 0 , Sd = 0 , Td = 0 , Ud = 0 , Vd = 0 , Wd = 0 , Xd = 0 , Yd = 0 , Zd = 0 , _d = 0 , $d = 0 , ae = 0 , be = 0 , ce = 0 , de = 0 , ee = 0 , fe = 0 , ge = 0 , he = 0 , ie = 0 , je = 0 , ke = 0 , le = 0 , me = 0 , ne = 0 , oe = 0 , pe = 0 , qe = 0 , re = 0 , se = 0 , te = 0 , ue = 0 , ve = 0 , we = 0 , xe = 0 , ye = 0 , ze = 0 , Ae = 0 , Be = 0 , Ce = 0 , De = 0 , Ee = 0 , Fe = 0 , Ge = 0 , He = 0 , Ie = 0 , Je = 0 , Ke = 0 , Le = 0 , Me = 0 , Ne = 0 , Oe = 0 , Pe = 0 , Qe = 0 , Re = 0 , Se = 0 , Te = 0 , Ue = 0 , Ve = 0 , We = 0 , Xe = 0 , Ye = 0 , Ze = 0 , _e = 0 , $e = 0 , af = 0 , bf = 0 , cf = 0 , df = 0 , ef = 0 , ff = 0 , gf = 0 , hf = 0 , jf = 0 , kf = 0 , lf = 0 , mf = 0 , nf = 0 , of = 0 , pf = 0 , qf = 0 , rf = 0 , sf = 0 , tf = 0 , uf = 0 , vf = 0 , wf = 0 , xf = 0 , yf = 0 , zf = 0 , Af = 0 , Bf = 0 , Cf = 0 , Df = 0 , Ef = 0 , Ff = 0 , Gf = 0 , Hf = 0 , If = 0 , Jf = 0 , Kf = 0 , Lf = 0 , Mf = 0 , Nf = 0 , Of = 0 , Pf = 0 , Qf = 0 , Rf = 0 , Sf = 0 , Tf = 0 , Uf = 0 , Vf = 0 , Wf = 0 , Xf = 0 , Yf = 0 , Zf = 0 , _f = 0 , $f = 0 , ag = 0 , bg = 0 , cg = 0 , dg = 0 , eg = 0 , fg = 0 , gg = 0 , hg = 0 , ig = 0 , jg = 0 , kg = 0 , lg = 0 , mg = 0 , ng = 0 , og = 0 , pg = 0 , qg = 0 , rg = 0 , sg = 0 , tg = 0 , ug = 0 , vg = 0 , wg = 0 , xg = 0 , yg = 0 , zg = 0 , Ag = 0 , Bg = 0 , Cg = 0 , Dg = 0 , Eg = 0 , Fg = 0 , Gg = 0 , Hg = 0 , Ig = 0 , Jg = 0 , Kg = 0 , Lg = 0 , Mg = 0 , Ng = 0 , Og = 0 , Pg = 0 , Qg = 0 , Rg = 0 , Sg = 0 , Tg = 0 , Ug = 0 , Vg = 0 , Wg = 0 , Xg = 0 , Yg = 0 , Zg = 0 , _g = 0 , $g = 0 , ah = 0 , bh = 0 , ch = 0 , dh = 0 , eh = 0 , fh = 0 , gh = 0 , hh = 0 , ih = 0 , jh = 0 , kh = 0 , lh = 0 , mh = 0 , nh = 0 , oh = 0 , ph = 0 , qh = 0 , rh = 0 , sh = 0 , th = 0 , uh = 0 , vh = 0 , wh = 0 , xh = 0 , yh = 0 , zh = 0 , Ah = 0 , Bh = 0 , Ch = 0 , Dh = 0 , Eh = 0 , Fh = 0 , Gh = 0 , Hh = 0 , Ih = 0 , Jh = 0 ; h = Fa ; Fa = Fa + 192 | 0 ; i = h + 136 | 0 ; j = h + 92 | 0 ; k = h + 48 | 0 ; l = h + 4 | 0 ; m = h ; switch ( c [ g >> 2 ] | 0 ) { case 0 : { n = f >>> 16 ; o = b + 4 | 0 ; p = b + 8 | 0 ; q = 0 ; r = 0 ; while ( 1 ) { s = ( q | 0 ) == ( n | 0 ) ; t = s & 1 ; u = c [ o >> 2 ] | 0 ; v = u + 1 | 0 ; if ( ( c [ p >> 2 ] | 0 ) >>> 0 < v >>> 0 ) { w = v << 1 ; x = Gp ( c [ b >> 2 ] | 0 , w ) | 0 ; if ( x | 0 ) { c [ p >> 2 ] = w ; c [ b >> 2 ] = x ; y = x ; z = 7 } } else { y = c [ b >> 2 ] | 0 ; z = 7 } if ( ( z | 0 ) == 7 ) { z = 0 ; c [ o >> 2 ] = v ; a [ y + u >> 0 ] = t } t = f - r | 0 ; u = t >>> 0 < 65535 ? t : 65535 ; t = u ^ 65535 ; v = u & 255 ; x = c [ o >> 2 ] | 0 ; w = x + 1 | 0 ; if ( ( c [ p >> 2 ] | 0 ) >>> 0 < w >>> 0 ) { A = w << 1 ; B = Gp ( c [ b >> 2 ] | 0 , A ) | 0 ; if ( B | 0 ) { c [ p >> 2 ] = A ; c [ b >> 2 ] = B ; C = B ; z = 12 } } else { C = c [ b >> 2 ] | 0 ; z = 12 } if ( ( z | 0 ) == 12 ) { z = 0 ; c [ o >> 2 ] = w ; a [ C + x >> 0 ] = v } v = u >>> 8 & 255 ; u = c [ o >> 2 ] | 0 ; x = u + 1 | 0 ; if ( ( c [ p >> 2 ] | 0 ) >>> 0 < x >>> 0 ) { w = x << 1 ; B = Gp ( c [ b >> 2 ] | 0 , w ) | 0 ; if ( B | 0 ) { c [ p >> 2 ] = w ; c [ b >> 2 ] = B ; D = B ; z = 17 } } else { D = c [ b >> 2 ] | 0 ; z = 17 } if ( ( z | 0 ) == 17 ) { z = 0 ; c [ o >> 2 ] = x ; a [ D + u >> 0 ] = v } v = t & 255 ; u = c [ o >> 2 ] | 0 ; x = u + 1 | 0 ; if ( ( c [ p >> 2 ] | 0 ) >>> 0 < x >>> 0 ) { B = x << 1 ; w = Gp ( c [ b >> 2 ] | 0 , B ) | 0 ; if ( w | 0 ) { c [ p >> 2 ] = B ; c [ b >> 2 ] = w ; E = w ; z = 22 } } else { E = c [ b >> 2 ] | 0 ; z = 22 } if ( ( z | 0 ) == 22 ) { z = 0 ; c [ o >> 2 ] = x ; a [ E + u >> 0 ] = v } v = t >>> 8 & 255 ; t = c [ o >> 2 ] | 0 ; u = t + 1 | 0 ; if ( ( c [ p >> 2 ] | 0 ) >>> 0 < u >>> 0 ) { x = u << 1 ; w = Gp ( c [ b >> 2 ] | 0 , x ) | 0 ; if ( w | 0 ) { c [ p >> 2 ] = x ; c [ b >> 2 ] = w ; F = w ; z = 27 } } else { F = c [ b >> 2 ] | 0 ; z = 27 } if ( ( z | 0 ) == 27 ) { z = 0 ; c [ o >> 2 ] = u ; a [ F + t >> 0 ] = v } if ( r >>> 0 < f >>> 0 ) { v = 0 ; t = r ; while ( 1 ) { u = t + 1 | 0 ; w = a [ e + t >> 0 ] | 0 ; x = c [ o >> 2 ] | 0 ; B = x + 1 | 0 ; if ( ( c [ p >> 2 ] | 0 ) >>> 0 < B >>> 0 ) { A = B << 1 ; G = Gp ( c [ b >> 2 ] | 0 , A ) | 0 ; if ( G | 0 ) { c [ p >> 2 ] = A ; c [ b >> 2 ] = G ; H = G ; z = 34 } } else { H = c [ b >> 2 ] | 0 ; z = 34 } if ( ( z | 0 ) == 34 ) { z = 0 ; c [ o >> 2 ] = B ; a [ H + x >> 0 ] = w } v = v + 1 | 0 ; if ( ! ( v >>> 0 < 65535 & u >>> 0 < f >>> 0 ) ) { I = u ; break } else t = u } } else I = r ; if ( s ) { J = 0 ; break } else { q = q + 1 | 0 ; r = I } } Fa = h ; return J | 0 } case 1 : { c [ k >> 2 ] = 0 ; K = i ; L = K + 36 | 0 ; do { c [ K >> 2 ] = 0 ; K = K + 4 | 0 } while ( ( K | 0 ) < ( L | 0 ) ) ; K = j ; L = K + 36 | 0 ; do { c [ K >> 2 ] = 0 ; K = K + 4 | 0 } while ( ( K | 0 ) < ( L | 0 ) ) ; Zo ( i ) ; _o ( j ) ; I = b + 4 | 0 ; r = c [ I >> 2 ] | 0 ; q = r + 1 | 0 ; H = b + 8 | 0 ; if ( ( c [ H >> 2 ] | 0 ) >>> 0 < q >>> 0 ) { o = q << 1 ; p = Gp ( c [ b >> 2 ] | 0 , o ) | 0 ; if ( ! p ) M = b ; else { c [ H >> 2 ] = o ; c [ b >> 2 ] = p ; N = b ; O = p ; z = 41 } } else { N = b ; O = c [ b >> 2 ] | 0 ; z = 41 } if ( ( z | 0 ) == 41 ) { c [ I >> 2 ] = q ; a [ O + r >> 0 ] = 0 ; M = N } N = ( c [ M >> 2 ] | 0 ) + ( ( c [ I >> 2 ] |
function tj ( b ) { b = b | 0 ; var d = 0 , e = 0 , f = 0 , g = 0 , h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 ; d = b + 112 | 0 ; e = c [ d >> 2 ] | 0 ; if ( ( e | 0 ) > 0 ) { f = c [ b + 8 >> 2 ] | 0 ; g = 0 - e | 0 ; h = f + ( g << 3 ) | 0 ; if ( ( c [ f + ( g << 3 ) + 4 >> 2 ] | 0 ) == 3 ) { i = c [ h >> 2 ] | 0 ; j = e } else { g = qd ( h ) | 0 ; i = g ; j = c [ d >> 2 ] | 0 } g = i >> 16 ; if ( ( j | 0 ) > 1 ) { c [ 524978 ] = ( c [ 524978 ] | 0 ) + - 2 ; k = g ; l = j } else { k = g ; l = j } } else { k = 0 ; l = e } e = b + 8 | 0 ; b = 0 ; j = l ; do { l = b ; b = b + 1 | 0 ; do if ( ( j | 0 ) > ( b | 0 ) ) { g = ( c [ e >> 2 ] | 0 ) + ( 0 - j << 3 ) + ( b << 3 ) | 0 ; if ( ( c [ g + 4 >> 2 ] | 0 ) == 3 ) { m = c [ g >> 2 ] | 0 ; break } else { m = qd ( g ) | 0 ; break } } else m = 0 ; while ( 0 ) ; g = ( l << 2 ) + k | 0 ; if ( ( g + - 24576 | 0 ) >>> 0 < 8189 ) { i = ( c [ ( c [ 704852 ] | 0 ) + 12 >> 2 ] | 0 ) + ( ( g << 1 ) + - 49152 ) | 0 ; a [ i >> 0 ] = m & 15 ; h = i + 1 | 0 ; a [ h >> 0 ] = m >>> 4 & 15 ; i = h + 1 | 0 ; a [ i >> 0 ] = m >>> 8 & 15 ; h = i + 1 | 0 ; a [ h >> 0 ] = m >>> 12 & 15 ; i = h + 1 | 0 ; a [ i >> 0 ] = m >>> 16 & 15 ; h = i + 1 | 0 ; a [ h >> 0 ] = m >>> 20 & 15 ; i = h + 1 | 0 ; a [ i >> 0 ] = m >>> 24 & 15 ; a [ i + 1 >> 0 ] = m >>> 28 } else { uk ( 2819376 , c [ 743521 ] | 0 , g , m & 255 ) ; uk ( 2819376 , c [ 743521 ] | 0 , g + 1 | 0 , m >>> 8 & 255 ) ; uk ( 2819376 , c [ 743521 ] | 0 , g + 2 | 0 , m >>> 16 & 255 ) ; uk ( 2819376 , c [ 743521 ] | 0 , g + 3 | 0 , m >>> 24 ) } j = c [ d >> 2 ] | 0 ; g = ( j | 0 ) < 8193 ? j + - 1 | 0 : 8192 } while ( b >>> 0 < ( ( g | 0 ) > 1 ? g : 1 ) >>> 0 ) ; return 0 } function uj ( a ) { a = a | 0 ; var b = 0 , d = 0 ; b = c [ 704845 ] | 0 ; d = Su ( b | 0 , ( ( b | 0 ) < 0 ) << 31 >> 31 | 0 , 16 ) | 0 ; b = Nu ( d | 0 , G ( ) | 0 , 60 , 0 ) | 0 ; G ( ) | 0 ; yd ( a , b ) ; return 1 } function vj ( a ) { a = a | 0 ; xd ( a ) ; return 1 } function wj ( a ) { a = a | 0 ; if ( ! ( c [ 525002 ] | 0 ) ) cb ( 60104 , 2e3 ) ; c [ 525002 ] = 1 ; xd ( a ) ; return 1 } function xj ( a ) { a = a | 0 ; if ( ! ( c [ 525001 ] | 0 ) ) cb ( 60073 , 2e3 ) ; c [ 525001 ] = 1 ; xd ( a ) ; yd ( a , 0 ) ; return 2 } function yj ( a ) { a = a | 0 ; xd ( a ) ; yd ( a , 0 ) ; return 2 } function zj ( a ) { a = a | 0 ; return 0 } function Aj ( a ) { a = a | 0 ; c [ 759980 ] = 1 ; Uj ( a , 0 ) ; return 1 } function Bj ( a ) { a = a | 0 ; c [ 759980 ] = 1 ; Uj ( a , 1 ) ; return 1 } function Cj ( b ) { b = b | 0 ; var c = 0 , d = 0 , e = 0 ; c = pd ( b , 1 , 0 ) | 0 ; d = c >> 16 ; e = td ( b , 2 , 0 ) | 0 ; if ( ! e ) { a [ 2973694 + ( d << 6 ) >> 0 ] = 0 ; return 0 } if ( ( c + - 65536 | 0 ) >>> 0 > 327679 ) return 0 ; nu ( 2973694 + ( d << 6 ) | 0 , e , 16 ) | 0 ; return 0 } function Dj ( a ) { a = a | 0 ; var b = 0 , d = 0 , e = 0 , f = 0 ; b = Fa ; Fa = Fa + 16 | 0 ; d = b ; c [ d >> 2 ] = 255 ; if ( ( jd ( a ) | 0 ) > 0 ? ( e = td ( a , 1 , d ) | 0 , ( e | 0 ) != 0 ) : 0 ) { Fd ( a , ( vl ( e ) | 0 ) == 0 & 1 ) ; f = 1 } else f = 0 ; Fa = b ; return f | 0 } function Ej ( b ) { b = b | 0 ; var d = 0 , e = 0 ; d = pd ( b , 1 , 0 ) | 0 ; if ( ! ( a [ 2964308 ] | 0 ) ) { yb ( 60043 ) | 0 ; e = 0 ; return e | 0 } if ( d >>> 0 > 4194303 ) { yd ( b , 0 ) ; e = 1 ; return e | 0 } else { yd ( b , c [ 2965332 + ( d >> 16 << 2 ) >> 2 ] | 0 ) ; e = 1 ; return e | 0 } return 0 } function Fj ( b ) { b = b | 0 ; var d = 0 , e = 0 ; d = pd ( b , 1 , 0 ) | 0 ; e = pd ( b , 2 , 0 ) | 0 ; if ( ! ( a [ 2964308 ] | 0 ) ) { yb ( 60013 ) | 0 ; return 0 } if ( d >>> 0 > 4194303 ) return 0 ; b = 2965332 + ( d >> 16 << 2 ) | 0 ; if ( ( c [ b >> 2 ] | 0 ) != ( e | 0 ) ) c [ 759981 ] = 1 ; c [ b >> 2 ] = e ; return 0 } function Gj ( b ) { b = b | 0 ; var d = 0 , e = 0 , f = 0 , g = 0 , h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 , o = 0 , p = 0 , q = 0 , r = 0 , s = 0 , t = 0 , u = 0 , v = 0 , w = 0 , x = 0 , y = 0 , z = 0 , A = 0 , B = 0 , C = 0 , D = 0 , E = 0 ; d = Fa ; Fa = Fa + 112 | 0 ; e = d + 64 | 0 ; f = d + 108 | 0 ; g = d + 104 | 0 ; h = d + 100 | 0 ; i = d + 72 | 0 ; j = d ; Vg ( 16 ) ; a : do if ( ( jd ( b ) | 0 ) > 0 ) { k = ( pd ( b , 1 , 0 ) | 0 ) >> 16 ; switch ( k | 0 ) { case 1 : { l = 4 ; break a ; break } case 0 : { $e ( c [ 524986 ] | 0 , 2 , 0 ) | 0 ; m = ( c [ 759908 ] | 0 ) + ( c [ 742570 ] | 0 ) | 0 ; n = ( ( m | 0 ) < 2097152 ? m : 2097152 ) << 6 ; o = 0 ; p = ( n | 0 ) > 0 ? n : 0 ; l = 15 ; break a ; break } case 2 : { q = 2 ; r = Hg ( Bg ( 1 ) | 0 ) | 0 ; l = 93 ; break a ; break } default : { n = ( k | 0 ) == 3 ? c [ 760447 ] << 16 : 0 ; switch ( k | 0 ) { case 5 : { q = k ; r = 2097152 ; l = 93 ; break a ; break } case 4 : { tr ( ) ; m = c [ 416461 ] | 0 ; if ( ! m ) { zd ( b , 3042456 , 0 ) | 0 ; Fa = d ; return 1 } else { s = Fp ( ( ft ( m ) | 0 ) + 16 | 0 ) | 0 ; Hr ( c [ 416461 ] | 0 , s ) | 0 ; zd ( b , s , ft ( s ) | 0 ) | 0 ; Hp ( s ) ; Fa = d ; return 1 } break } case 6 : { s = ft ( 2971644 ) | 0 ; zd ( b , 2971644 , s >>> 0 < 1024 ? s : 1024 ) | 0 ; Fa = d ; return 1 } case 7 : { q = 7 ; r = c [ 759972 ] << 16 ; l = 93 ; break a ; break } case 9 : { q = 9 ; r = ( Gq ( ) | 0 ) << 16 ; l = 93 ; break a ; break } case 11 : { q = 11 ; r = ( jk ( ) | 0 ) << 16 ; l = 93 ; break a ; break } case 13 : { rb ( ) ; q = 13 ; r = 4128768 - ( ( ( ( c [ 416457 ] << 3 ) + 8 | 0 ) / 2 | 0 ) << 16 ) | 0 ; l = 93 ; break a ; break } default : { o = k ; p = n ; l = 15 ; break a } } } } } else l = 4 ; while ( 0 ) ; if ( ( l | 0 ) == 4 ) { o = 1 ; p = Hg ( Bg ( 0 ) | 0 ) | 0 ; l = 15 } b : do if ( ( l | 0 ) == 15 ) switch ( o | 0 ) { case 12 : { q = o ; r = 1507328 ; l = 93 ; break b ; break } case 14 : { q = o ; r = 6815744 ; l = 93 ; break b ; break } case 15 : { rb ( ) ; t = ( ( ( ( c [ 416457 ] << 3 ) + 8 | 0 ) / 2 | 0 ) << 16 ) + 4194304 | 0 ; break b ; break } default : { n = ( o | 0 ) == 10 ? c [ 759910 ] << 16 : ( o | 0 ) == 8 ? c [ 759973 ] << 16 : p ; k = o & - 4 ; if ( ( k | 0 ) == 16 ) { s = kq ( o + - 16 | 0 ) | 0 ; m = c [ 743521 ] | 0 ; u = 0 ; v = - 65536 ; do { v = ( s | 0 ) == ( m + 12 + ( u * 660 | 0 ) | 0 ) ? u << 16 : v ; u = u + 1 | 0 } while ( ( u | 0 ) != 64 ) ; if ( ( v | 0 ) == - 65536 ) { u = kq ( o + - 12 | 0 ) | 0 ; m = c [ 743521 ] | 0 ; s = 0 ; w = - 65536 ; while ( 1 ) { x = ( u | 0 ) == ( m + 12 + ( s * 660 | 0 ) | 0 ) ? s << 16 : w ; s = s + 1 | 0 ; if ( ( s | 0 ) == 64 ) { y = x ; break } else w = x } } else y = v } else y = n ; do if ( ( k | 0 ) == 20 ) { w = kq ( o + - 20 | 0 ) | 0 ; if ( ! w ) { s = kq ( o + - 16 | 0 ) | 0 ; if ( ! s ) { z = - 65536 ; break } else A = s } else A = w ; z = ( jq ( A ) | 0 ) << 16 } else z = y ; while ( 0 ) ; switch ( o | 0 ) { case 24 : { k = c [ 525578 ] << 16 ; n = ( vq ( ) | 0 ) == 0 ; t = n ? - 65536 : k ; break b ; break } case 25 : { k = c [ 525577 ] << 16 ; n = ( vq ( )
function Fn ( ) { var a = 0 , b = 0 , d = 0 , e = 0 , f = 0 , g = 0 , h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 , o = 0 , p = 0 , q = 0 , r = 0 , s = 0 , t = 0 , u = 0 , v = 0 , w = 0 , x = 0 , y = 0 , z = 0 , A = 0 , C = 0 , D = 0 , E = 0 , F = 0 , G = 0 , H = 0 ; a = Fa ; Fa = Fa + 16 | 0 ; b = a + 8 | 0 ; d = a + 4 | 0 ; e = a ; f = c [ 526415 ] | 0 ; if ( ! f ) { Fa = a ; return } if ( ! ( c [ f + 16 >> 2 ] | 0 ) ) { Fa = a ; return } fr ( b , d , e ) ; f = ( c [ b >> 2 ] | 0 ) - ( c [ 526416 ] | 0 ) | 0 ; g = B ( f , f ) | 0 ; f = ( c [ d >> 2 ] | 0 ) - ( c [ 526417 ] | 0 ) | 0 ; h = ( B ( f , f ) | 0 ) + g | 0 ; Zp ( ) ; g = c [ 526415 ] | 0 ; f = c [ g + 16 >> 2 ] | 0 ; i = ( f | 0 ) > 0 ; a : do if ( i ) { j = c [ b >> 2 ] | 0 ; k = c [ d >> 2 ] | 0 ; l = c [ g >> 2 ] | 0 ; m = c [ g + 8 >> 2 ] | 0 ; n = c [ l + ( c [ m >> 2 ] << 2 ) >> 2 ] | 0 ; o = c [ n + 4 >> 2 ] | 0 ; if ( ( ( j | 0 ) >= ( o | 0 ) ? ( j | 0 ) < ( ( c [ n + 12 >> 2 ] | 0 ) + o | 0 ) : 0 ) ? ( o = c [ n + 8 >> 2 ] | 0 , ( k | 0 ) >= ( o | 0 ) ) : 0 ) p = ( k | 0 ) < ( ( c [ n + 16 >> 2 ] | 0 ) + o | 0 ) ? n : 0 ; else p = 0 ; if ( ( f | 0 ) > 1 ) { n = 1 ; o = p ; while ( 1 ) { q = c [ l + ( c [ m + ( n << 2 ) >> 2 ] << 2 ) >> 2 ] | 0 ; r = c [ q + 4 >> 2 ] | 0 ; do if ( ( ( ( j | 0 ) >= ( r | 0 ) ? ( j | 0 ) < ( ( c [ q + 12 >> 2 ] | 0 ) + r | 0 ) : 0 ) ? ( s = c [ q + 8 >> 2 ] | 0 , ( k | 0 ) >= ( s | 0 ) ) : 0 ) ? ( k | 0 ) < ( ( c [ q + 16 >> 2 ] | 0 ) + s | 0 ) : 0 ) { if ( o | 0 ? c [ o + 20 >> 2 ] & 32 | 0 : 0 ) { t = o ; break } t = q } else t = o ; while ( 0 ) ; n = n + 1 | 0 ; if ( ( n | 0 ) >= ( f | 0 ) ) break ; else o = t } if ( i ) u = t ; else break } else u = p ; o = u + 20 | 0 ; n = u + 28 | 0 ; k = u + 28 | 0 ; j = u + 28 | 0 ; m = u + 28 | 0 ; l = u + 24 | 0 ; q = u + 24 | 0 ; r = h ; s = f ; v = g ; while ( 1 ) { w = s + - 1 | 0 ; x = c [ ( c [ v >> 2 ] | 0 ) + ( c [ ( c [ v + 8 >> 2 ] | 0 ) + ( w << 2 ) >> 2 ] << 2 ) >> 2 ] | 0 ; if ( ( x | 0 ) == ( u | 0 ) ) { y = c [ e >> 2 ] | 0 ; z = c [ o >> 2 ] | 0 ; A = z & 2 ; if ( ! y ) { if ( ! A ) Ra [ c [ n >> 2 ] & 0 ] ( u , c [ b >> 2 ] | 0 , c [ d >> 2 ] | 0 , 0 , 3 ) } else if ( ! ( c [ 526418 ] | A ) ) { c [ o >> 2 ] = z | 2 ; Ra [ c [ j >> 2 ] & 0 ] ( u , c [ b >> 2 ] | 0 , c [ d >> 2 ] | 0 , y , 4 ) ; y = _q ( ) | 0 ; if ( ( y - ( c [ 526419 ] | 0 ) | 0 ) < 400 ? ( y = ( c [ c [ l >> 2 ] >> 2 ] | 0 ) / 64 | 0 , ( r | 0 ) < ( B ( y , y ) | 0 ) ) : 0 ) Ra [ c [ j >> 2 ] & 0 ] ( u , c [ b >> 2 ] | 0 , c [ d >> 2 ] | 0 , c [ e >> 2 ] | 0 , 18 ) ; y = _q ( ) | 0 ; if ( ( y - ( c [ 526420 ] | 0 ) | 0 ) < 400 ? ( y = ( c [ c [ q >> 2 ] >> 2 ] | 0 ) / 64 | 0 , ( r | 0 ) < ( B ( y , y ) | 0 ) ) : 0 ) { Ra [ c [ j >> 2 ] & 0 ] ( u , c [ b >> 2 ] | 0 , c [ d >> 2 ] | 0 , c [ e >> 2 ] | 0 , 11 ) ; c [ 526419 ] = _q ( ) | 0 } c [ 526420 ] = _q ( ) | 0 ; c [ 526416 ] = c [ b >> 2 ] ; c [ 526417 ] = c [ d >> 2 ] } y = c [ o >> 2 ] | 0 ; if ( ! ( y & 1 ) ) { c [ o >> 2 ] = y | 1 ; Ra [ c [ k >> 2 ] & 0 ] ( u , c [ b >> 2 ] | 0 , c [ d >> 2 ] | 0 , c [ e >> 2 ] | 0 , 1 ) } y = c [ 525558 ] | 0 ; z = c [ 525559 ] | 0 ; if ( z | y | 0 ) { Ra [ c [ m >> 2 ] & 0 ] ( u , y , z , c [ e >> 2 ] | 0 , 16 ) ; c [ 525558 ] = 0 ; c [ 525559 ] = 0 } } else { z = x + 20 | 0 ; y = c [ z >> 2 ] | 0 ; if ( ! ( y & 1 ) ) C = y ; else { c [ z >> 2 ] = y & - 2 ; Ra [ c [ x + 28 >> 2 ] & 0 ] ( x , c [ b >> 2 ] | 0 , c [ d >> 2 ] | 0 , c [ e >> 2 ] | 0 , 2 ) ; C = c [ z >> 2 ] | 0 } c [ z >> 2 ] = C & - 33 } z = x + 20 | 0 ; y = c [ z >> 2 ] | 0 ; if ( ( y & 2 | 0 ) == 0 | ( c [ e >> 2 ] | 0 ) != 0 ) if ( ( y & 1 | 0 ) != 0 & ( c [ 525566 ] | 0 ) != 0 ? ( A = _q ( ) | 0 , ( A | 0 ) < ( ( c [ 525567 ] | 0 ) + 500 | 0 ) ) : 0 ) { A = c [ 525566 ] | 0 ; c [ 526418 ] = A ; D = x + 28 | 0 ; Ra [ c [ D >> 2 ] & 0 ] ( x , c [ b >> 2 ] | 0 , c [ d >> 2 ] | 0 , A , 12 ) ; A = ( c [ b >> 2 ] | 0 ) - ( c [ 526421 ] | 0 ) | 0 ; E = B ( A , A ) | 0 ; A = ( c [ d >> 2 ] | 0 ) - ( c [ 526422 ] | 0 ) | 0 ; F = ( B ( A , A ) | 0 ) + E | 0 ; E = _q ( ) | 0 ; if ( ( E - ( c [ 526423 ] | 0 ) | 0 ) < 400 & F >>> 0 < 400 ) Ra [ c [ D >> 2 ] & 0 ] ( x , c [ b >> 2 ] | 0 , c [ d >> 2 ] | 0 , c [ 526418 ] | 0 , 15 ) ; c [ 526423 ] = _q ( ) | 0 ; c [ 526421 ] = c [ b >> 2 ] ; c [ 526422 ] = c [ d >> 2 ] ; G = F } else G = r ; else { c [ z >> 2 ] = y & - 3 ; y = x + 28 | 0 ; Ra [ c [ y >> 2 ] & 0 ] ( x , c [ b >> 2 ] | 0 , c [ d >> 2 ] | 0 , 0 , 6 ) ; F = _q ( ) | 0 ; if ( ( r | 0 ) < 400 & ( F - ( c [ 526420 ] | 0 ) | 0 ) < 400 ) Ra [ c [ y >> 2 ] & 0 ] ( x , c [ b >> 2 ] | 0 , c [ d >> 2 ] | 0 , c [ 526418 ] | 0 , 12 ) ; F = ( c [ b >> 2 ] | 0 ) - ( c [ 526421 ] | 0 ) | 0 ; D = B ( F , F ) | 0 ; F = ( c [ d >> 2 ] | 0 ) - ( c [ 526422 ] | 0 ) | 0 ; E = ( B ( F , F ) | 0 ) + D | 0 ; D = _q ( ) | 0 ; if ( ( D - ( c [ 526423 ] | 0 ) | 0 ) < 400 & E >>> 0 < 400 ) Ra [ c [ y >> 2 ] & 0 ] ( x , c [ b >> 2 ] | 0 , c [ d >> 2 ] | 0 , c [ 526418 ] | 0 , 15 ) ; c [ 526423 ] = _q ( ) | 0 ; c [ 526421 ] = c [ b >> 2 ] ; c [ 526422 ] = c [ d >> 2 ] ; G = E } E = c [ z >> 2 ] | 0 ; y = c [ e >> 2 ] | 0 ; if ( ( E & 2 | 0 ) != 0 & ( y | 0 ) != 0 ) { Ra [ c [ x + 28 >> 2 ] & 0 ] ( x , c [ b >> 2 ] | 0 , c [ d >> 2 ] | 0 , y , 5 ) ; H = c [ z >> 2 ] | 0 } else H = E ; if ( H & 1 | 0 ? ! ( ( c [ 526424 ] | 0 ) == 0 | ( c [ e >> 2 ] | 0 ) != 0 ) : 0 ) Ra [ c [ x + 28 >> 2 ] & 0 ] ( x , c [ b >> 2 ] | 0 , c [ d >> 2 ] | 0 , 0 , 17 ) ; if ( ( s | 0 ) <= 1 ) break a ; r = G ; s = w ; v = c [ 526415 ] | 0 } } while ( 0 ) ; c [ 525566 ] = 0 ; G = c [ e >> 2 ] | 0 ; c [ 526418 ] = G ; c [ 526424 ] = G ; _p ( ) ; Fa = a ; return } function Gn ( a , b ) { a = a | 0 ; b = b | 0 ; var d = 0 , e = 0 , f = 0 , g = 0 , h = 0 , i = 0 , j = 0 , k = 0 , l = 0 ; d = Fa ; Fa = Fa + 16 | 0 ; e = d + 8 | 0 ; f = d + 4 | 0 ; g = d ; if ( ! ( c [ 526415 ] | 0 ) ) { Fa = d ; return } fr ( e , f , g ) ; h = c [ 526415 ] | 0 ; if ( ( c [ h + 16 >> 2 ] | 0 ) <= 0 ) { Fa = d ; return } if ( ! b ) { i = 0 ; j = h ; do { k = c [ ( c [ j >> 2 ] | 0 ) + ( c [ ( c [ j + 8 >> 2 ] | 0 ) + ( i << 2 ) >> 2 ] << 2 ) >> 2 ] | 0 ; Ra [ c [ k + 28 >> 2 ] & 0 ] ( k , c [ e >> 2 ] | 0 , c [ f >> 2 ] | 0 , c [ g >> 2 ] | 0 , a ) ; i = i + 1 | 0 ; j = c [ 526415 ] | 0 } while ( ( i | 0 ) < ( c [ j + 16 >> 2 ] | 0 ) ) ; Fa = d ; return } j = 0 ; i = h ; while ( 1 ) { h = c [ ( c [ i >> 2 ] | 0 ) + ( c [ ( c [ i + 8 >> 2 ] | 0 ) + ( j << 2 ) >> 2 ] << 2 ) >> 2 ] | 0 ; if ( ( c [ h >> 2 ] | 0 ) == ( b | 0 ) ) { Ra [ c [ h + 28 >> 2 ] & 0 ] ( h , c [ e >> 2 ] | 0 , c [ f >> 2 ] | 0 , c [ g >> 2 ] | 0 , a ) ; l = c [ 526415 ] | 0 } else l = i ; j = j + 1 | 0 ; if ( ( j | 0 ) >= ( c [ l + 16 >> 2 ] | 0 ) ) break ; else i = l } Fa = d ; return } function Hn ( a ) { a = a | 0 ; var b = 0 , d = 0 ; b = c [ 526415 ] | 0 ; if ( ( a | 0 ) < 0 | ( b | 0 ) == 0 ) { d = 0 ; return d | 0 } if ( ( c [ b + 20 >> 2 ] | 0 ) <= ( a | 0 ) ) { d = 0 ; return d | 0 } d = c [ ( c [ b >> 2 ] | 0 ) + ( a << 2 ) >> 2 ] | 0 ; return d | 0 } function In ( ) { var a = 0 , b = 0 , d = 0 , e = 0 , f = 0 ; a = c [ 526415 ] | 0 ; b = c [ a + 16 >> 2 ] | 0 ; if ( ( b | 0 ) <= 0 ) { d = - 1 ; return d | 0 } e = c [ a >> 2 ] | 0 ; a = b ; while ( 1 ) { b = a ; a = a + - 1 | 0 ; if ( c [ ( c [ e + ( a << 2 ) >> 2 ] | 0 ) + 20 >> 2 ] & 1 | 0 ) { d = a ; f = 5 ; break } if ( ( b | 0 ) <= 1 ) { d = - 1 ; f = 5 ; break } } if ( ( f | 0 ) == 5 ) return d | 0 ; retu
function $r ( a , b ) { a = a | 0 ; b = b | 0 ; var d = 0 , e = 0 , f = 0 , g = 0 , h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 , n = 0 , o = 0 , p = 0 , q = 0 , r = 0 , s = 0 , t = 0 , u = 0 , v = 0 , w = 0 , x = 0 , y = 0 , z = 0 , A = 0 , B = 0 , C = 0 , D = 0 , E = 0 , F = 0 , G = 0 ; d = a + b | 0 ; e = c [ a + 4 >> 2 ] | 0 ; do if ( ! ( e & 1 ) ) { f = c [ a >> 2 ] | 0 ; if ( ! ( e & 3 ) ) return ; g = a + ( 0 - f ) | 0 ; h = f + b | 0 ; if ( ( c [ 760469 ] | 0 ) == ( g | 0 ) ) { i = d + 4 | 0 ; j = c [ i >> 2 ] | 0 ; if ( ( j & 3 | 0 ) != 3 ) { k = g ; l = h ; break } c [ 760466 ] = h ; c [ i >> 2 ] = j & - 2 ; c [ g + 4 >> 2 ] = h | 1 ; c [ d >> 2 ] = h ; return } j = f >>> 3 ; if ( f >>> 0 < 256 ) { f = c [ g + 8 >> 2 ] | 0 ; i = c [ g + 12 >> 2 ] | 0 ; if ( ( i | 0 ) == ( f | 0 ) ) { c [ 760464 ] = c [ 760464 ] & ~ ( 1 << j ) ; k = g ; l = h ; break } else { c [ f + 12 >> 2 ] = i ; c [ i + 8 >> 2 ] = f ; k = g ; l = h ; break } } f = c [ g + 24 >> 2 ] | 0 ; i = c [ g + 12 >> 2 ] | 0 ; do if ( ( i | 0 ) == ( g | 0 ) ) { j = g + 16 | 0 ; m = j + 4 | 0 ; n = c [ m >> 2 ] | 0 ; if ( ! n ) { o = c [ j >> 2 ] | 0 ; if ( ! o ) { p = 0 ; break } else { q = o ; r = j } } else { q = n ; r = m } m = q ; n = r ; while ( 1 ) { j = m + 20 | 0 ; o = c [ j >> 2 ] | 0 ; if ( ! o ) { s = m + 16 | 0 ; t = c [ s >> 2 ] | 0 ; if ( ! t ) break ; else { u = t ; v = s } } else { u = o ; v = j } m = u ; n = v } c [ n >> 2 ] = 0 ; p = m } else { j = c [ g + 8 >> 2 ] | 0 ; c [ j + 12 >> 2 ] = i ; c [ i + 8 >> 2 ] = j ; p = i } while ( 0 ) ; if ( f ) { i = c [ g + 28 >> 2 ] | 0 ; j = 3042160 + ( i << 2 ) | 0 ; if ( ( c [ j >> 2 ] | 0 ) == ( g | 0 ) ) { c [ j >> 2 ] = p ; if ( ! p ) { c [ 760465 ] = c [ 760465 ] & ~ ( 1 << i ) ; k = g ; l = h ; break } } else { i = f + 16 | 0 ; c [ ( ( c [ i >> 2 ] | 0 ) == ( g | 0 ) ? i : f + 20 | 0 ) >> 2 ] = p ; if ( ! p ) { k = g ; l = h ; break } } c [ p + 24 >> 2 ] = f ; i = g + 16 | 0 ; j = c [ i >> 2 ] | 0 ; if ( j | 0 ) { c [ p + 16 >> 2 ] = j ; c [ j + 24 >> 2 ] = p } j = c [ i + 4 >> 2 ] | 0 ; if ( j ) { c [ p + 20 >> 2 ] = j ; c [ j + 24 >> 2 ] = p ; k = g ; l = h } else { k = g ; l = h } } else { k = g ; l = h } } else { k = a ; l = b } while ( 0 ) ; b = d + 4 | 0 ; a = c [ b >> 2 ] | 0 ; if ( ! ( a & 2 ) ) { if ( ( c [ 760470 ] | 0 ) == ( d | 0 ) ) { p = ( c [ 760467 ] | 0 ) + l | 0 ; c [ 760467 ] = p ; c [ 760470 ] = k ; c [ k + 4 >> 2 ] = p | 1 ; if ( ( k | 0 ) != ( c [ 760469 ] | 0 ) ) return ; c [ 760469 ] = 0 ; c [ 760466 ] = 0 ; return } if ( ( c [ 760469 ] | 0 ) == ( d | 0 ) ) { p = ( c [ 760466 ] | 0 ) + l | 0 ; c [ 760466 ] = p ; c [ 760469 ] = k ; c [ k + 4 >> 2 ] = p | 1 ; c [ k + p >> 2 ] = p ; return } p = ( a & - 8 ) + l | 0 ; v = a >>> 3 ; do if ( a >>> 0 < 256 ) { u = c [ d + 8 >> 2 ] | 0 ; r = c [ d + 12 >> 2 ] | 0 ; if ( ( r | 0 ) == ( u | 0 ) ) { c [ 760464 ] = c [ 760464 ] & ~ ( 1 << v ) ; break } else { c [ u + 12 >> 2 ] = r ; c [ r + 8 >> 2 ] = u ; break } } else { u = c [ d + 24 >> 2 ] | 0 ; r = c [ d + 12 >> 2 ] | 0 ; do if ( ( r | 0 ) == ( d | 0 ) ) { q = d + 16 | 0 ; e = q + 4 | 0 ; j = c [ e >> 2 ] | 0 ; if ( ! j ) { i = c [ q >> 2 ] | 0 ; if ( ! i ) { w = 0 ; break } else { x = i ; y = q } } else { x = j ; y = e } e = x ; j = y ; while ( 1 ) { q = e + 20 | 0 ; i = c [ q >> 2 ] | 0 ; if ( ! i ) { o = e + 16 | 0 ; s = c [ o >> 2 ] | 0 ; if ( ! s ) break ; else { z = s ; A = o } } else { z = i ; A = q } e = z ; j = A } c [ j >> 2 ] = 0 ; w = e } else { m = c [ d + 8 >> 2 ] | 0 ; c [ m + 12 >> 2 ] = r ; c [ r + 8 >> 2 ] = m ; w = r } while ( 0 ) ; if ( u | 0 ) { r = c [ d + 28 >> 2 ] | 0 ; h = 3042160 + ( r << 2 ) | 0 ; if ( ( c [ h >> 2 ] | 0 ) == ( d | 0 ) ) { c [ h >> 2 ] = w ; if ( ! w ) { c [ 760465 ] = c [ 760465 ] & ~ ( 1 << r ) ; break } } else { r = u + 16 | 0 ; c [ ( ( c [ r >> 2 ] | 0 ) == ( d | 0 ) ? r : u + 20 | 0 ) >> 2 ] = w ; if ( ! w ) break } c [ w + 24 >> 2 ] = u ; r = d + 16 | 0 ; h = c [ r >> 2 ] | 0 ; if ( h | 0 ) { c [ w + 16 >> 2 ] = h ; c [ h + 24 >> 2 ] = w } h = c [ r + 4 >> 2 ] | 0 ; if ( h | 0 ) { c [ w + 20 >> 2 ] = h ; c [ h + 24 >> 2 ] = w } } } while ( 0 ) ; c [ k + 4 >> 2 ] = p | 1 ; c [ k + p >> 2 ] = p ; if ( ( k | 0 ) == ( c [ 760469 ] | 0 ) ) { c [ 760466 ] = p ; return } else B = p } else { c [ b >> 2 ] = a & - 2 ; c [ k + 4 >> 2 ] = l | 1 ; c [ k + l >> 2 ] = l ; B = l } l = B >>> 3 ; if ( B >>> 0 < 256 ) { a = 3041896 + ( l << 1 << 2 ) | 0 ; b = c [ 760464 ] | 0 ; p = 1 << l ; if ( ! ( b & p ) ) { c [ 760464 ] = b | p ; C = a ; D = a + 8 | 0 } else { p = a + 8 | 0 ; C = c [ p >> 2 ] | 0 ; D = p } c [ D >> 2 ] = k ; c [ C + 12 >> 2 ] = k ; c [ k + 8 >> 2 ] = C ; c [ k + 12 >> 2 ] = a ; return } a = B >>> 8 ; if ( a ) if ( B >>> 0 > 16777215 ) E = 31 ; else { C = ( a + 1048320 | 0 ) >>> 16 & 8 ; D = a << C ; a = ( D + 520192 | 0 ) >>> 16 & 4 ; p = D << a ; D = ( p + 245760 | 0 ) >>> 16 & 2 ; b = 14 - ( a | C | D ) + ( p << D >>> 15 ) | 0 ; E = B >>> ( b + 7 | 0 ) & 1 | b << 1 } else E = 0 ; b = 3042160 + ( E << 2 ) | 0 ; c [ k + 28 >> 2 ] = E ; c [ k + 20 >> 2 ] = 0 ; c [ k + 16 >> 2 ] = 0 ; D = c [ 760465 ] | 0 ; p = 1 << E ; if ( ! ( D & p ) ) { c [ 760465 ] = D | p ; c [ b >> 2 ] = k ; c [ k + 24 >> 2 ] = b ; c [ k + 12 >> 2 ] = k ; c [ k + 8 >> 2 ] = k ; return } p = c [ b >> 2 ] | 0 ; a : do if ( ( c [ p + 4 >> 2 ] & - 8 | 0 ) == ( B | 0 ) ) F = p ; else { b = B << ( ( E | 0 ) == 31 ? 0 : 25 - ( E >>> 1 ) | 0 ) ; D = p ; while ( 1 ) { G = D + 16 + ( b >>> 31 << 2 ) | 0 ; C = c [ G >> 2 ] | 0 ; if ( ! C ) break ; if ( ( c [ C + 4 >> 2 ] & - 8 | 0 ) == ( B | 0 ) ) { F = C ; break a } else { b = b << 1 ; D = C } } c [ G >> 2 ] = k ; c [ k + 24 >> 2 ] = D ; c [ k + 12 >> 2 ] = k ; c [ k + 8 >> 2 ] = k ; return } while ( 0 ) ; G = F + 8 | 0 ; B = c [ G >> 2 ] | 0 ; c [ B + 12 >> 2 ] = k ; c [ G >> 2 ] = k ; c [ k + 8 >> 2 ] = B ; c [ k + 12 >> 2 ] = F ; c [ k + 24 >> 2 ] = 0 ; return } function as ( a ) { a = a | 0 ; var b = 0 , d = 0 ; b = Fa ; Fa = Fa + 16 | 0 ; d = b ; c [ d >> 2 ] = fs ( c [ a + 60 >> 2 ] | 0 ) | 0 ; a = ds ( ea ( 6 , d | 0 ) | 0 ) | 0 ; Fa = b ; return a | 0 } function bs ( b , d , e ) { b = b | 0 ; d = d | 0 ; e = e | 0 ; var f = 0 , g = 0 , h = 0 , i = 0 , j = 0 , k = 0 , l = 0 , m = 0 ; f = Fa ; Fa = Fa + 32 | 0 ; g = f + 16 | 0 ; h = f ; c [ h >> 2 ] = d ; i = h + 4 | 0 ; j = b + 48 | 0 ; k = c [ j >> 2 ] | 0 ; c [ i >> 2 ] = e - ( ( k | 0 ) != 0 & 1 ) ; l = b + 44 | 0 ; c [ h + 8 >> 2 ] = c [ l >> 2 ] ; c [ h + 12 >> 2 ] = k ; c [ g >> 2 ] = c [ b + 60 >> 2 ] ; c [ g + 4 >> 2 ] = h ; c [ g + 8 >> 2 ] = 2 ; h = ds ( Z ( 145 , g | 0 ) | 0 ) | 0 ; if ( ( h | 0 ) >= 1 ) { g = c [ i >> 2 ] | 0 ; if ( h >>> 0 > g >>> 0 ) { i = c [ l >> 2 ] | 0 ; l = b + 4 | 0 ; c [ l >> 2 ] = i ; k = i ; c [ b + 8 >> 2 ] = k + ( h - g ) ; if ( ! ( c [ j >> 2 ] | 0 ) ) m = e ; else { c [ l >> 2 ] = k + 1 ; a [ d + ( e + - 1 ) >> 0 ] = a [ k >> 0 ] | 0 ; m = e } } else m = h } else { c [ b >> 2 ] = c [ b >> 2 ] | h & 48 ^ 16 ; m = h } Fa = f ; return m | 0 } function cs ( a , b , d ) { a = a | 0 ; b = b | 0 ; d = d | 0 ; var e = 0 , f = 0 , g = 0 , h = 0 ; e = Fa ; Fa = Fa + 32 | 0 ; f = e ; g = e + 20 | 0 ; c [ f >> 2 ] = c [ a + 60 >> 2 ] ; c [ f + 4 >> 2 ] = 0 ; c [ f + 8 >> 2 ] = b ; c [ f + 12 >> 2 ] = g ; c [ f + 16 >> 2 ] = d ; if ( ( ds ( Y ( 140 , f | 0 ) | 0 ) | 0 ) < 0 ) { c [ g >> 2 ] = - 1 ; h = - 1 } el
// EMSCRIPTEN_END_FUNCS
var Ia = [ iv , ei ] ; var Ja = [ jv , as , Za , _a , Ff , Jf , Jh , Gf , If , Kh , Gh , Lh , Mh , Nh , Oh , Mf , Ef , Lf , Ph , Qh , Rh , Sh , Th , Uh , Vh , Wh , Xh , Yh , Zh , _h , $h , ai , bi , $f , _f , ag , bg , di , fi , gi , hi , ii , ji , ki , li , mi , ni , oi , pi , qi , ri , si , ti , ui , vi , wi , xi , yi , zi , Ai , Bi , Ci , Di , Ei , Fi , Gi , Hi , Ii , Ji , Ki , Li , Mi , Ni , Oi , Pi , Qi , Ri , Si , Ti , Ui , Vi , Wi , Xi , Yi , Zi , _i , $i , aj , bj , cj , dj , ej , fj , gj , hj , ij , jj , kj , lj , mj , nj , oj , pj , qj , rj , sj , tj , uj , vj , wj , xj , yj , zj , Aj , Bj , Cj , Dj , Ej , Fj , Gj , Zf , Hj , Ij , Jj , Kj , zf , yf , Af , Bf , Cf , Df , Kf , Uf , Lj , Wf , dg , cg , Xf , Mj , Nj , Oj , Pj , Qj , Rj , Sj , Tj , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv , jv ] ; var Ka = [ kv , uf , _l , kv ] ; var La = [ lv , gs , cs , _s , pf , hs , bs , Xt ] ; var Ma = [ mv , sk ] ; var Na = [ nv , Tm ] ; var Oa = [ ov , bb , Ul , Vl , or , ov , ov , ov ] ; var Pa = [ pv , zm , hc , Od , Sd , vf , Qf , Rf ] ; var Qa = [ qv , $a , nr , qv ] ; var Ra = [ rv ] ; return { _ _ _divdi3 : Nu , _ _ _emscripten _environ _constructor : Eu , _ _ _errno _location : es , _ _ _muldi3 : Pu , _ _ _udivdi3 : Qu , _ _get _daylight : Gu , _ _get _environ : Iu , _ _get _timezone : Hu , _ _get _tzname : Fu , _bitshift64Lshr : Ru , _bitshift64Shl : Su , _codo _mixer _callback : Qp , _free : Xr , _i64Add : Ju , _i64Subtract : Ku , _llvm _bswap _i32 : Tu , _main : Db , _malloc : Wr , _memcpy : Xu , _memset : Yu , _mix _0 : Mq , _realloc : Zr , _saveSetjmp : Uu , _sbrk : Zu , _setThrew : Wu , _testSetjmp : Vu , dynCall _i : _u , dynCall _ii : $u , dynCall _iii : av , dynCall _iiii : bv , dynCall _iiiii : cv , dynCall _v : dv , dynCall _vi : ev , dynCall _vii : fv , dynCall _viii : gv , dynCall _viiiii : hv , establishStackSpace : Va , stackAlloc : Sa , stackRestore : Ua , stackSave : Ta } } )
// EMSCRIPTEN_END_ASM
( asmGlobalArg , asmLibraryArg , buffer ) ;
var _ _ _divdi3 = Module [ "___divdi3" ] = asm [ "___divdi3" ] ;
var _ _ _emscripten _environ _constructor = Module [ "___emscripten_environ_constructor" ] = asm [ "___emscripten_environ_constructor" ] ;
var _ _ _errno _location = Module [ "___errno_location" ] = asm [ "___errno_location" ] ;
var _ _ _muldi3 = Module [ "___muldi3" ] = asm [ "___muldi3" ] ;
var _ _ _udivdi3 = Module [ "___udivdi3" ] = asm [ "___udivdi3" ] ;
var _ _get _daylight = Module [ "__get_daylight" ] = asm [ "__get_daylight" ] ;
var _ _get _environ = Module [ "__get_environ" ] = asm [ "__get_environ" ] ;
var _ _get _timezone = Module [ "__get_timezone" ] = asm [ "__get_timezone" ] ;
var _ _get _tzname = Module [ "__get_tzname" ] = asm [ "__get_tzname" ] ;
var _bitshift64Lshr = Module [ "_bitshift64Lshr" ] = asm [ "_bitshift64Lshr" ] ;
var _bitshift64Shl = Module [ "_bitshift64Shl" ] = asm [ "_bitshift64Shl" ] ;
var _codo _mixer _callback = Module [ "_codo_mixer_callback" ] = asm [ "_codo_mixer_callback" ] ;
var _free = Module [ "_free" ] = asm [ "_free" ] ;
var _i64Add = Module [ "_i64Add" ] = asm [ "_i64Add" ] ;
var _i64Subtract = Module [ "_i64Subtract" ] = asm [ "_i64Subtract" ] ;
var _llvm _bswap _i32 = Module [ "_llvm_bswap_i32" ] = asm [ "_llvm_bswap_i32" ] ;
var _main = Module [ "_main" ] = asm [ "_main" ] ;
var _malloc = Module [ "_malloc" ] = asm [ "_malloc" ] ;
var _memcpy = Module [ "_memcpy" ] = asm [ "_memcpy" ] ;
var _memset = Module [ "_memset" ] = asm [ "_memset" ] ;
var _mix _0 = Module [ "_mix_0" ] = asm [ "_mix_0" ] ;
var _realloc = Module [ "_realloc" ] = asm [ "_realloc" ] ;
var _saveSetjmp = Module [ "_saveSetjmp" ] = asm [ "_saveSetjmp" ] ;
var _sbrk = Module [ "_sbrk" ] = asm [ "_sbrk" ] ;
var _setThrew = Module [ "_setThrew" ] = asm [ "_setThrew" ] ;
var _testSetjmp = Module [ "_testSetjmp" ] = asm [ "_testSetjmp" ] ;
var establishStackSpace = Module [ "establishStackSpace" ] = asm [ "establishStackSpace" ] ;
var stackAlloc = Module [ "stackAlloc" ] = asm [ "stackAlloc" ] ;
var stackRestore = Module [ "stackRestore" ] = asm [ "stackRestore" ] ;
var stackSave = Module [ "stackSave" ] = asm [ "stackSave" ] ;
var dynCall _i = Module [ "dynCall_i" ] = asm [ "dynCall_i" ] ;
var dynCall _ii = Module [ "dynCall_ii" ] = asm [ "dynCall_ii" ] ;
var dynCall _iii = Module [ "dynCall_iii" ] = asm [ "dynCall_iii" ] ;
var dynCall _iiii = Module [ "dynCall_iiii" ] = asm [ "dynCall_iiii" ] ;
var dynCall _iiiii = Module [ "dynCall_iiiii" ] = asm [ "dynCall_iiiii" ] ;
var dynCall _v = Module [ "dynCall_v" ] = asm [ "dynCall_v" ] ;
var dynCall _vi = Module [ "dynCall_vi" ] = asm [ "dynCall_vi" ] ;
var dynCall _vii = Module [ "dynCall_vii" ] = asm [ "dynCall_vii" ] ;
var dynCall _viii = Module [ "dynCall_viii" ] = asm [ "dynCall_viii" ] ;
var dynCall _viiiii = Module [ "dynCall_viiiii" ] = asm [ "dynCall_viiiii" ] ;
Module [ "asm" ] = asm ;
Module [ "ccall" ] = ccall ;
Module [ "getValue" ] = getValue ;
Module [ "getMemory" ] = getMemory ;
Module [ "addRunDependency" ] = addRunDependency ;
Module [ "removeRunDependency" ] = removeRunDependency ;
Module [ "FS_createFolder" ] = FS . createFolder ;
Module [ "FS_createPath" ] = FS . createPath ;
Module [ "FS_createDataFile" ] = FS . createDataFile ;
Module [ "FS_createPreloadedFile" ] = FS . createPreloadedFile ;
Module [ "FS_createLazyFile" ] = FS . createLazyFile ;
Module [ "FS_createLink" ] = FS . createLink ;
Module [ "FS_createDevice" ] = FS . createDevice ;
Module [ "FS_unlink" ] = FS . unlink ;
if ( memoryInitializer ) {
if ( ! isDataURI ( memoryInitializer ) ) {
memoryInitializer = locateFile ( memoryInitializer ) ;
}
if ( ENVIRONMENT _IS _NODE || ENVIRONMENT _IS _SHELL ) {
var data = Module [ "readBinary" ] ( memoryInitializer ) ;
HEAPU8 . set ( data , GLOBAL _BASE ) ;
} else {
addRunDependency ( "memory initializer" ) ;
var applyMemoryInitializer = function ( data ) {
if ( data . byteLength ) data = new Uint8Array ( data ) ;
HEAPU8 . set ( data , GLOBAL _BASE ) ;
if ( Module [ "memoryInitializerRequest" ] ) delete Module [ "memoryInitializerRequest" ] . response ;
removeRunDependency ( "memory initializer" ) ;
} ;
var doBrowserLoad = function ( ) {
Module [ "readAsync" ] ( memoryInitializer , applyMemoryInitializer , function ( ) {
throw "could not load memory initializer " + memoryInitializer ;
} ) ;
} ;
var memoryInitializerBytes = tryParseAsDataURI ( memoryInitializer ) ;
if ( memoryInitializerBytes ) {
applyMemoryInitializer ( memoryInitializerBytes . buffer ) ;
} else if ( Module [ "memoryInitializerRequest" ] ) {
var useRequest = function ( ) {
var request = Module [ "memoryInitializerRequest" ] ;
var response = request . response ;
if ( request . status !== 200 && request . status !== 0 ) {
var data = tryParseAsDataURI ( Module [ "memoryInitializerRequestURL" ] ) ;
if ( data ) {
response = data . buffer ;
} else {
console . warn ( "a problem seems to have happened with Module.memoryInitializerRequest, status: " + request . status + ", retrying " + memoryInitializer ) ;
doBrowserLoad ( ) ;
return ;
}
}
applyMemoryInitializer ( response ) ;
} ;
if ( Module [ "memoryInitializerRequest" ] . response ) {
setTimeout ( useRequest , 0 ) ;
} else {
Module [ "memoryInitializerRequest" ] . addEventListener ( "load" , useRequest ) ;
}
} else {
doBrowserLoad ( ) ;
}
}
}
function ExitStatus ( status ) {
this . name = "ExitStatus" ;
this . message = "Program terminated with exit(" + status + ")" ;
this . status = status ;
}
ExitStatus . prototype = new Error ( ) ;
ExitStatus . prototype . constructor = ExitStatus ;
var calledMain = false ;
dependenciesFulfilled = function runCaller ( ) {
if ( ! Module [ "calledRun" ] ) run ( ) ;
if ( ! Module [ "calledRun" ] ) dependenciesFulfilled = runCaller ;
} ;
Module [ "callMain" ] = function callMain ( args ) {
args = args || [ ] ;
ensureInitRuntime ( ) ;
var argc = args . length + 1 ;
var argv = stackAlloc ( ( argc + 1 ) * 4 ) ;
HEAP32 [ argv >> 2 ] = allocateUTF8OnStack ( Module [ "thisProgram" ] ) ;
for ( var i = 1 ; i < argc ; i ++ ) {
HEAP32 [ ( argv >> 2 ) + i ] = allocateUTF8OnStack ( args [ i - 1 ] ) ;
}
HEAP32 [ ( argv >> 2 ) + argc ] = 0 ;
try {
var ret = Module [ "_main" ] ( argc , argv , 0 ) ;
exit ( ret , true ) ;
} catch ( e ) {
if ( e instanceof ExitStatus ) {
return ;
} else if ( e == "SimulateInfiniteLoop" ) {
Module [ "noExitRuntime" ] = true ;
return ;
} else {
var toLog = e ;
if ( e && typeof e === "object" && e . stack ) {
toLog = [ e , e . stack ] ;
}
err ( "exception thrown: " + toLog ) ;
Module [ "quit" ] ( 1 , e ) ;
}
} finally {
calledMain = true ;
}
} ;
function run ( args ) {
args = args || Module [ "arguments" ] ;
if ( runDependencies > 0 ) {
return ;
}
preRun ( ) ;
if ( runDependencies > 0 ) return ;
if ( Module [ "calledRun" ] ) return ;
function doRun ( ) {
if ( Module [ "calledRun" ] ) return ;
Module [ "calledRun" ] = true ;
if ( ABORT ) return ;
ensureInitRuntime ( ) ;
preMain ( ) ;
if ( Module [ "onRuntimeInitialized" ] ) Module [ "onRuntimeInitialized" ] ( ) ;
if ( Module [ "_main" ] && shouldRunNow ) Module [ "callMain" ] ( args ) ;
postRun ( ) ;
}
if ( Module [ "setStatus" ] ) {
Module [ "setStatus" ] ( "Running..." ) ;
setTimeout ( function ( ) {
setTimeout ( function ( ) {
Module [ "setStatus" ] ( "" ) ;
} , 1 ) ;
doRun ( ) ;
} , 1 ) ;
} else {
doRun ( ) ;
}
}
Module [ "run" ] = run ;
function exit ( status , implicit ) {
if ( implicit && Module [ "noExitRuntime" ] && status === 0 ) {
return ;
}
if ( Module [ "noExitRuntime" ] ) { } else {
ABORT = true ;
EXITSTATUS = status ;
exitRuntime ( ) ;
if ( Module [ "onExit" ] ) Module [ "onExit" ] ( status ) ;
}
Module [ "quit" ] ( status , new ExitStatus ( status ) ) ;
}
function abort ( what ) {
if ( Module [ "onAbort" ] ) {
Module [ "onAbort" ] ( what ) ;
}
if ( what !== undefined ) {
out ( what ) ;
err ( what ) ;
what = JSON . stringify ( what ) ;
} else {
what = "" ;
}
ABORT = true ;
EXITSTATUS = 1 ;
throw "abort(" + what + "). Build with -s ASSERTIONS=1 for more info." ;
}
Module [ "abort" ] = abort ;
if ( Module [ "preInit" ] ) {
if ( typeof Module [ "preInit" ] == "function" ) Module [ "preInit" ] = [ Module [ "preInit" ] ] ;
while ( Module [ "preInit" ] . length > 0 ) {
Module [ "preInit" ] . pop ( ) ( ) ;
}
}
var shouldRunNow = true ;
if ( Module [ "noInitialRun" ] ) {
shouldRunNow = false ;
}
Module [ "noExitRuntime" ] = true ;
run ( ) ;