PREHOOK: query: EXPLAIN SELECT src1.c1, src2.c4 FROM (SELECT src.key as c1, src.value as c2 from src where src.key > '1' ) src1 JOIN (SELECT src.key as c3, src.value as c4 from src where src.key > '2' ) src2 ON src1.c1 = src2.c3 AND src1.c1 < '400' WHERE src1.c1 > '20' and (src1.c2 < 'val_50' or src1.c1 > '2') and (src2.c3 > '50' or src1.c1 < '50') and (src2.c3 <> '4') PREHOOK: type: QUERY POSTHOOK: query: EXPLAIN SELECT src1.c1, src2.c4 FROM (SELECT src.key as c1, src.value as c2 from src where src.key > '1' ) src1 JOIN (SELECT src.key as c3, src.value as c4 from src where src.key > '2' ) src2 ON src1.c1 = src2.c3 AND src1.c1 < '400' WHERE src1.c1 > '20' and (src1.c2 < 'val_50' or src1.c1 > '2') and (src2.c3 > '50' or src1.c1 < '50') and (src2.c3 <> '4') POSTHOOK: type: QUERY ABSTRACT SYNTAX TREE: (TOK_QUERY (TOK_FROM (TOK_JOIN (TOK_SUBQUERY (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME src))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (. (TOK_TABLE_OR_COL src) key) c1) (TOK_SELEXPR (. (TOK_TABLE_OR_COL src) value) c2)) (TOK_WHERE (> (. (TOK_TABLE_OR_COL src) key) '1')))) src1) (TOK_SUBQUERY (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME src))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (. (TOK_TABLE_OR_COL src) key) c3) (TOK_SELEXPR (. (TOK_TABLE_OR_COL src) value) c4)) (TOK_WHERE (> (. (TOK_TABLE_OR_COL src) key) '2')))) src2) (AND (= (. (TOK_TABLE_OR_COL src1) c1) (. (TOK_TABLE_OR_COL src2) c3)) (< (. (TOK_TABLE_OR_COL src1) c1) '400')))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (. (TOK_TABLE_OR_COL src1) c1)) (TOK_SELEXPR (. (TOK_TABLE_OR_COL src2) c4))) (TOK_WHERE (and (and (and (> (. (TOK_TABLE_OR_COL src1) c1) '20') (or (< (. (TOK_TABLE_OR_COL src1) c2) 'val_50') (> (. (TOK_TABLE_OR_COL src1) c1) '2'))) (or (> (. (TOK_TABLE_OR_COL src2) c3) '50') (< (. (TOK_TABLE_OR_COL src1) c1) '50'))) (<> (. (TOK_TABLE_OR_COL src2) c3) '4'))))) STAGE DEPENDENCIES: Stage-1 is a root stage Stage-0 is a root stage STAGE PLANS: Stage: Stage-1 Map Reduce Alias -> Map Operator Tree: src1:src TableScan alias: src Filter Operator predicate: expr: (((((key > '1') and (key < '400')) and (key > '20')) and ((value < 'val_50') or (key > '2'))) and (key <> '4')) type: boolean Select Operator expressions: expr: key type: string expr: value type: string outputColumnNames: _col0, _col1 Filter Operator predicate: expr: (_col0 < '400') type: boolean Reduce Output Operator key expressions: expr: _col0 type: string sort order: + Map-reduce partition columns: expr: _col0 type: string tag: 0 value expressions: expr: _col0 type: string expr: _col1 type: string src2:src TableScan alias: src Filter Operator predicate: expr: ((((key > '2') and (key < '400')) and (key <> '4')) and (key > '20')) type: boolean Select Operator expressions: expr: key type: string expr: value type: string outputColumnNames: _col0, _col1 Filter Operator predicate: expr: (_col0 < '400') type: boolean Reduce Output Operator key expressions: expr: _col0 type: string sort order: + Map-reduce partition columns: expr: _col0 type: string tag: 1 value expressions: expr: _col0 type: string expr: _col1 type: string Reduce Operator Tree: Join Operator condition map: Inner Join 0 to 1 condition expressions: 0 {VALUE._col0} {VALUE._col1} 1 {VALUE._col0} {VALUE._col1} handleSkewJoin: false outputColumnNames: _col0, _col1, _col2, _col3 Filter Operator predicate: expr: ((((_col0 > '20') and ((_col1 < 'val_50') or (_col0 > '2'))) and ((_col2 > '50') or (_col0 < '50'))) and (_col2 <> '4')) type: boolean Select Operator expressions: expr: _col0 type: string expr: _col3 type: string outputColumnNames: _col0, _col1 File Output Operator compressed: false GlobalTableId: 0 table: input format: org.apache.hadoop.mapred.TextInputFormat output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Stage: Stage-0 Fetch Operator limit: -1 PREHOOK: query: SELECT src1.c1, src2.c4 FROM (SELECT src.key as c1, src.value as c2 from src where src.key > '1' ) src1 JOIN (SELECT src.key as c3, src.value as c4 from src where src.key > '2' ) src2 ON src1.c1 = src2.c3 AND src1.c1 < '400' WHERE src1.c1 > '20' and (src1.c2 < 'val_50' or src1.c1 > '2') and (src2.c3 > '50' or src1.c1 < '50') and (src2.c3 <> '4') PREHOOK: type: QUERY PREHOOK: Input: default@src #### A masked pattern was here #### POSTHOOK: query: SELECT src1.c1, src2.c4 FROM (SELECT src.key as c1, src.value as c2 from src where src.key > '1' ) src1 JOIN (SELECT src.key as c3, src.value as c4 from src where src.key > '2' ) src2 ON src1.c1 = src2.c3 AND src1.c1 < '400' WHERE src1.c1 > '20' and (src1.c2 < 'val_50' or src1.c1 > '2') and (src2.c3 > '50' or src1.c1 < '50') and (src2.c3 <> '4') POSTHOOK: type: QUERY POSTHOOK: Input: default@src #### A masked pattern was here #### 200 val_200 200 val_200 200 val_200 200 val_200 201 val_201 202 val_202 203 val_203 203 val_203 203 val_203 203 val_203 205 val_205 205 val_205 205 val_205 205 val_205 207 val_207 207 val_207 207 val_207 207 val_207 208 val_208 208 val_208 208 val_208 208 val_208 208 val_208 208 val_208 208 val_208 208 val_208 208 val_208 209 val_209 209 val_209 209 val_209 209 val_209 213 val_213 213 val_213 213 val_213 213 val_213 214 val_214 216 val_216 216 val_216 216 val_216 216 val_216 217 val_217 217 val_217 217 val_217 217 val_217 218 val_218 219 val_219 219 val_219 219 val_219 219 val_219 221 val_221 221 val_221 221 val_221 221 val_221 222 val_222 223 val_223 223 val_223 223 val_223 223 val_223 224 val_224 224 val_224 224 val_224 224 val_224 226 val_226 228 val_228 229 val_229 229 val_229 229 val_229 229 val_229 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 233 val_233 233 val_233 233 val_233 233 val_233 235 val_235 237 val_237 237 val_237 237 val_237 237 val_237 238 val_238 238 val_238 238 val_238 238 val_238 239 val_239 239 val_239 239 val_239 239 val_239 24 val_24 24 val_24 24 val_24 24 val_24 241 val_241 242 val_242 242 val_242 242 val_242 242 val_242 244 val_244 247 val_247 248 val_248 249 val_249 252 val_252 255 val_255 255 val_255 255 val_255 255 val_255 256 val_256 256 val_256 256 val_256 256 val_256 257 val_257 258 val_258 26 val_26 26 val_26 26 val_26 26 val_26 260 val_260 262 val_262 263 val_263 265 val_265 265 val_265 265 val_265 265 val_265 266 val_266 27 val_27 272 val_272 272 val_272 272 val_272 272 val_272 273 val_273 273 val_273 273 val_273 273 val_273 273 val_273 273 val_273 273 val_273 273 val_273 273 val_273 274 val_274 275 val_275 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 278 val_278 278 val_278 278 val_278 278 val_278 28 val_28 280 val_280 280 val_280 280 val_280 280 val_280 281 val_281 281 val_281 281 val_281 281 val_281 282 val_282 282 val_282 282 val_282 282 val_282 283 val_283 284 val_284 285 val_285 286 val_286 287 val_287 288 val_288 288 val_288 288 val_288 288 val_288 289 val_289 291 val_291 292 val_292 296 val_296 298 val_298 298 val_298 298 val_298 298 val_298 298 val_298 298 val_298 298 val_298 298 val_298 298 val_298 30 val_30 302 val_302 305 val_305 306 val_306 307 val_307 307 val_307 307 val_307 307 val_307 308 val_308 309 val_309 309 val_309 309 val_309 309 val_309 310 val_310 311 val_311 311 val_311 311 val_311 311 val_311 311 val_311 311 val_311 311 val_311 311 val_311 311 val_311 315 val_315 316 val_316 316 val_316 316 val_316 316 val_316 316 val_316 316 val_316 316 val_316 316 val_316 316 val_316 317 val_317 317 val_317 317 val_317 317 val_317 318 val_318 318 val_318 318 val_318 318 val_318 318 val_318 318 val_318 318 val_318 318 val_318 318 val_318 321 val_321 321 val_321 321 val_321 321 val_321 322 val_322 322 val_322 322 val_322 322 val_322 323 val_323 325 val_325 325 val_325 325 val_325 325 val_325 327 val_327 327 val_327 327 val_327 327 val_327 327 val_327 327 val_327 327 val_327 327 val_327 327 val_327 33 val_33 331 val_331 331 val_331 331 val_331 331 val_331 332 val_332 333 val_333 333 val_333 333 val_333 333 val_333 335 val_335 336 val_336 338 val_338 339 val_339 34 val_34 341 val_341 342 val_342 342 val_342 342 val_342 342 val_342 344 val_344 344 val_344 344 val_344 344 val_344 345 val_345 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 35 val_35 35 val_35 35 val_35 35 val_35 35 val_35 35 val_35 35 val_35 35 val_35 35 val_35 351 val_351 353 val_353 353 val_353 353 val_353 353 val_353 356 val_356 360 val_360 362 val_362 364 val_364 365 val_365 366 val_366 367 val_367 367 val_367 367 val_367 367 val_367 368 val_368 369 val_369 369 val_369 369 val_369 369 val_369 369 val_369 369 val_369 369 val_369 369 val_369 369 val_369 37 val_37 37 val_37 37 val_37 37 val_37 373 val_373 374 val_374 375 val_375 377 val_377 378 val_378 379 val_379 382 val_382 382 val_382 382 val_382 382 val_382 384 val_384 384 val_384 384 val_384 384 val_384 384 val_384 384 val_384 384 val_384 384 val_384 384 val_384 386 val_386 389 val_389 392 val_392 393 val_393 394 val_394 395 val_395 395 val_395 395 val_395 395 val_395 396 val_396 396 val_396 396 val_396 396 val_396 396 val_396 396 val_396 396 val_396 396 val_396 396 val_396 397 val_397 397 val_397 397 val_397 397 val_397 399 val_399 399 val_399 399 val_399 399 val_399 PREHOOK: query: EXPLAIN SELECT src1.c1, src2.c4 FROM (SELECT src.key as c1, src.value as c2 from src where src.key > '1' ) src1 JOIN (SELECT src.key as c3, src.value as c4 from src where src.key > '2' ) src2 ON src1.c1 = src2.c3 AND src1.c1 < '400' WHERE src1.c1 > '20' and (src1.c2 < 'val_50' or src1.c1 > '2') and (src2.c3 > '50' or src1.c1 < '50') and (src2.c3 <> '4') PREHOOK: type: QUERY POSTHOOK: query: EXPLAIN SELECT src1.c1, src2.c4 FROM (SELECT src.key as c1, src.value as c2 from src where src.key > '1' ) src1 JOIN (SELECT src.key as c3, src.value as c4 from src where src.key > '2' ) src2 ON src1.c1 = src2.c3 AND src1.c1 < '400' WHERE src1.c1 > '20' and (src1.c2 < 'val_50' or src1.c1 > '2') and (src2.c3 > '50' or src1.c1 < '50') and (src2.c3 <> '4') POSTHOOK: type: QUERY ABSTRACT SYNTAX TREE: (TOK_QUERY (TOK_FROM (TOK_JOIN (TOK_SUBQUERY (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME src))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (. (TOK_TABLE_OR_COL src) key) c1) (TOK_SELEXPR (. (TOK_TABLE_OR_COL src) value) c2)) (TOK_WHERE (> (. (TOK_TABLE_OR_COL src) key) '1')))) src1) (TOK_SUBQUERY (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME src))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (. (TOK_TABLE_OR_COL src) key) c3) (TOK_SELEXPR (. (TOK_TABLE_OR_COL src) value) c4)) (TOK_WHERE (> (. (TOK_TABLE_OR_COL src) key) '2')))) src2) (AND (= (. (TOK_TABLE_OR_COL src1) c1) (. (TOK_TABLE_OR_COL src2) c3)) (< (. (TOK_TABLE_OR_COL src1) c1) '400')))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (. (TOK_TABLE_OR_COL src1) c1)) (TOK_SELEXPR (. (TOK_TABLE_OR_COL src2) c4))) (TOK_WHERE (and (and (and (> (. (TOK_TABLE_OR_COL src1) c1) '20') (or (< (. (TOK_TABLE_OR_COL src1) c2) 'val_50') (> (. (TOK_TABLE_OR_COL src1) c1) '2'))) (or (> (. (TOK_TABLE_OR_COL src2) c3) '50') (< (. (TOK_TABLE_OR_COL src1) c1) '50'))) (<> (. (TOK_TABLE_OR_COL src2) c3) '4'))))) STAGE DEPENDENCIES: Stage-1 is a root stage Stage-0 is a root stage STAGE PLANS: Stage: Stage-1 Map Reduce Alias -> Map Operator Tree: src1:src TableScan alias: src Filter Operator predicate: expr: (((((key > '1') and (key < '400')) and (key > '20')) and ((value < 'val_50') or (key > '2'))) and (key <> '4')) type: boolean Select Operator expressions: expr: key type: string expr: value type: string outputColumnNames: _col0, _col1 Reduce Output Operator key expressions: expr: _col0 type: string sort order: + Map-reduce partition columns: expr: _col0 type: string tag: 0 value expressions: expr: _col0 type: string expr: _col1 type: string src2:src TableScan alias: src Filter Operator predicate: expr: ((((key > '2') and (key < '400')) and (key <> '4')) and (key > '20')) type: boolean Select Operator expressions: expr: key type: string expr: value type: string outputColumnNames: _col0, _col1 Reduce Output Operator key expressions: expr: _col0 type: string sort order: + Map-reduce partition columns: expr: _col0 type: string tag: 1 value expressions: expr: _col0 type: string expr: _col1 type: string Reduce Operator Tree: Join Operator condition map: Inner Join 0 to 1 condition expressions: 0 {VALUE._col0} {VALUE._col1} 1 {VALUE._col0} {VALUE._col1} handleSkewJoin: false outputColumnNames: _col0, _col1, _col2, _col3 Filter Operator predicate: expr: ((((_col0 > '20') and ((_col1 < 'val_50') or (_col0 > '2'))) and ((_col2 > '50') or (_col0 < '50'))) and (_col2 <> '4')) type: boolean Select Operator expressions: expr: _col0 type: string expr: _col3 type: string outputColumnNames: _col0, _col1 File Output Operator compressed: false GlobalTableId: 0 table: input format: org.apache.hadoop.mapred.TextInputFormat output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Stage: Stage-0 Fetch Operator limit: -1 PREHOOK: query: SELECT src1.c1, src2.c4 FROM (SELECT src.key as c1, src.value as c2 from src where src.key > '1' ) src1 JOIN (SELECT src.key as c3, src.value as c4 from src where src.key > '2' ) src2 ON src1.c1 = src2.c3 AND src1.c1 < '400' WHERE src1.c1 > '20' and (src1.c2 < 'val_50' or src1.c1 > '2') and (src2.c3 > '50' or src1.c1 < '50') and (src2.c3 <> '4') PREHOOK: type: QUERY PREHOOK: Input: default@src #### A masked pattern was here #### POSTHOOK: query: SELECT src1.c1, src2.c4 FROM (SELECT src.key as c1, src.value as c2 from src where src.key > '1' ) src1 JOIN (SELECT src.key as c3, src.value as c4 from src where src.key > '2' ) src2 ON src1.c1 = src2.c3 AND src1.c1 < '400' WHERE src1.c1 > '20' and (src1.c2 < 'val_50' or src1.c1 > '2') and (src2.c3 > '50' or src1.c1 < '50') and (src2.c3 <> '4') POSTHOOK: type: QUERY POSTHOOK: Input: default@src #### A masked pattern was here #### 200 val_200 200 val_200 200 val_200 200 val_200 201 val_201 202 val_202 203 val_203 203 val_203 203 val_203 203 val_203 205 val_205 205 val_205 205 val_205 205 val_205 207 val_207 207 val_207 207 val_207 207 val_207 208 val_208 208 val_208 208 val_208 208 val_208 208 val_208 208 val_208 208 val_208 208 val_208 208 val_208 209 val_209 209 val_209 209 val_209 209 val_209 213 val_213 213 val_213 213 val_213 213 val_213 214 val_214 216 val_216 216 val_216 216 val_216 216 val_216 217 val_217 217 val_217 217 val_217 217 val_217 218 val_218 219 val_219 219 val_219 219 val_219 219 val_219 221 val_221 221 val_221 221 val_221 221 val_221 222 val_222 223 val_223 223 val_223 223 val_223 223 val_223 224 val_224 224 val_224 224 val_224 224 val_224 226 val_226 228 val_228 229 val_229 229 val_229 229 val_229 229 val_229 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 230 val_230 233 val_233 233 val_233 233 val_233 233 val_233 235 val_235 237 val_237 237 val_237 237 val_237 237 val_237 238 val_238 238 val_238 238 val_238 238 val_238 239 val_239 239 val_239 239 val_239 239 val_239 24 val_24 24 val_24 24 val_24 24 val_24 241 val_241 242 val_242 242 val_242 242 val_242 242 val_242 244 val_244 247 val_247 248 val_248 249 val_249 252 val_252 255 val_255 255 val_255 255 val_255 255 val_255 256 val_256 256 val_256 256 val_256 256 val_256 257 val_257 258 val_258 26 val_26 26 val_26 26 val_26 26 val_26 260 val_260 262 val_262 263 val_263 265 val_265 265 val_265 265 val_265 265 val_265 266 val_266 27 val_27 272 val_272 272 val_272 272 val_272 272 val_272 273 val_273 273 val_273 273 val_273 273 val_273 273 val_273 273 val_273 273 val_273 273 val_273 273 val_273 274 val_274 275 val_275 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 277 val_277 278 val_278 278 val_278 278 val_278 278 val_278 28 val_28 280 val_280 280 val_280 280 val_280 280 val_280 281 val_281 281 val_281 281 val_281 281 val_281 282 val_282 282 val_282 282 val_282 282 val_282 283 val_283 284 val_284 285 val_285 286 val_286 287 val_287 288 val_288 288 val_288 288 val_288 288 val_288 289 val_289 291 val_291 292 val_292 296 val_296 298 val_298 298 val_298 298 val_298 298 val_298 298 val_298 298 val_298 298 val_298 298 val_298 298 val_298 30 val_30 302 val_302 305 val_305 306 val_306 307 val_307 307 val_307 307 val_307 307 val_307 308 val_308 309 val_309 309 val_309 309 val_309 309 val_309 310 val_310 311 val_311 311 val_311 311 val_311 311 val_311 311 val_311 311 val_311 311 val_311 311 val_311 311 val_311 315 val_315 316 val_316 316 val_316 316 val_316 316 val_316 316 val_316 316 val_316 316 val_316 316 val_316 316 val_316 317 val_317 317 val_317 317 val_317 317 val_317 318 val_318 318 val_318 318 val_318 318 val_318 318 val_318 318 val_318 318 val_318 318 val_318 318 val_318 321 val_321 321 val_321 321 val_321 321 val_321 322 val_322 322 val_322 322 val_322 322 val_322 323 val_323 325 val_325 325 val_325 325 val_325 325 val_325 327 val_327 327 val_327 327 val_327 327 val_327 327 val_327 327 val_327 327 val_327 327 val_327 327 val_327 33 val_33 331 val_331 331 val_331 331 val_331 331 val_331 332 val_332 333 val_333 333 val_333 333 val_333 333 val_333 335 val_335 336 val_336 338 val_338 339 val_339 34 val_34 341 val_341 342 val_342 342 val_342 342 val_342 342 val_342 344 val_344 344 val_344 344 val_344 344 val_344 345 val_345 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 348 val_348 35 val_35 35 val_35 35 val_35 35 val_35 35 val_35 35 val_35 35 val_35 35 val_35 35 val_35 351 val_351 353 val_353 353 val_353 353 val_353 353 val_353 356 val_356 360 val_360 362 val_362 364 val_364 365 val_365 366 val_366 367 val_367 367 val_367 367 val_367 367 val_367 368 val_368 369 val_369 369 val_369 369 val_369 369 val_369 369 val_369 369 val_369 369 val_369 369 val_369 369 val_369 37 val_37 37 val_37 37 val_37 37 val_37 373 val_373 374 val_374 375 val_375 377 val_377 378 val_378 379 val_379 382 val_382 382 val_382 382 val_382 382 val_382 384 val_384 384 val_384 384 val_384 384 val_384 384 val_384 384 val_384 384 val_384 384 val_384 384 val_384 386 val_386 389 val_389 392 val_392 393 val_393 394 val_394 395 val_395 395 val_395 395 val_395 395 val_395 396 val_396 396 val_396 396 val_396 396 val_396 396 val_396 396 val_396 396 val_396 396 val_396 396 val_396 397 val_397 397 val_397 397 val_397 397 val_397 399 val_399 399 val_399 399 val_399 399 val_399