(List (= scope= flags=2 words=[] bindings=[('ALL_DIRS', {[DQ [LIT_CHARS "\n"][LIT_CHARS "ash/resources\n"][LIT_CHARS "chrome/android/java/res\n"][LIT_CHARS "chrome/app/theme\n"][LIT_CHARS "chrome/browser/resources\n"][LIT_CHARS "chrome/renderer/resources\n"][LIT_CHARS "component/resources\n"][LIT_CHARS "content/public/android/java/res\n"][LIT_CHARS "content/app/resources\n"][LIT_CHARS "content/renderer/resources\n"][LIT_CHARS "content/shell/resources\n"][LIT_CHARS "remoting/resources\n"][LIT_CHARS "ui/resources\n"][LIT_CHARS "ui/chromeos/resources\n"][LIT_CHARS "ui/webui/resources/images\n"][LIT_CHARS "win8/metro_driver/resources\n"]]})]) (= scope= flags=0 words=[] bindings=[('LARGE_FILE_THRESHOLD', {[LIT_CHARS 3000]})]) (= scope= flags=2 words=[] bindings=[('DEFAULT_MIN_BLOCK_SIZE', {[LIT_CHARS 128]})]) (= scope= flags=2 words=[] bindings=[('DEFAULT_LIMIT_BLOCKS', {[LIT_CHARS 256]})]) (= scope= flags=2 words=[] bindings=[('DEFAULT_RANDOM_TRIALS', {[LIT_CHARS 100]})]) (= scope= flags=2 words=[] bindings=[('LARGE_MIN_BLOCK_SIZE', {[LIT_CHARS 1]})]) (= scope= flags=2 words=[] bindings=[('LARGE_LIMIT_BLOCKS', {[LIT_CHARS 2]})]) (= scope= flags=2 words=[] bindings=[('LARGE_RANDOM_TRIALS', {[LIT_CHARS 1]})]) (= scope= flags=0 words=[] bindings=[('TOTAL_OLD_BYTES', {[LIT_CHARS 0]})]) (= scope= flags=0 words=[] bindings=[('TOTAL_NEW_BYTES', {[LIT_CHARS 0]})]) (= scope= flags=0 words=[] bindings=[('TOTAL_FILE', {[LIT_CHARS 0]})]) (= scope= flags=0 words=[] bindings=[('CORRUPTED_FILE', {[LIT_CHARS 0]})]) (= scope= flags=0 words=[] bindings=[('PROCESSED_FILE', {[LIT_CHARS 0]})]) (= scope= flags=0 words=[{[LIT_CHARS -a]}] bindings=[('THROBBER_STR', {[Array {[SQ ]} {[SQ ]} {[SQ ]} {[SQ ]}]})]) (= scope= flags=0 words=[] bindings=[('THROBBER_COUNT', {[LIT_CHARS 0]})]) (= scope= flags=0 words=[] bindings=[('VERBOSE', {[LIT_CHARS false]})]) (FunctionDef info [] (If (Com {[VarSub VERBOSE]}) (Com {[LIT_CHARS echo]} {[VarSub @]}) ) ) (FunctionDef throbber [] (List (Com {[LIT_CHARS info]} {[LIT_CHARS -ne]} {[DQ [VarSub THROBBER_STR bracket_op=(Index {A Atom NODE_ARITH_WORD {[VarSub THROBBER_COUNT]}})][\ LIT_ESCAPED_CHAR "\\b"]]}) (Com {[LIT_CHARS let]} {[LIT_VAR_LIKE "THROBBER_COUNT="] [VarSub THROBBER_COUNT] [LIT_OTHER "+"] [LIT_CHARS 1] =}) (Com {[LIT_CHARS let]} {[LIT_VAR_LIKE "THROBBER_COUNT="] [VarSub THROBBER_COUNT] [LIT_OTHER "%"] [LIT_CHARS 4] =}) ) ) (FunctionDef pngout_loop [] (List (= scope= flags=0 words=[] bindings=[('file', {[VarSub 1]})]) (Com {[LIT_CHARS shift]}) (= scope= flags=0 words=[] bindings=[('opts', {[VarSub *]})]) (If (Com {[LIT_OTHER "["]} {[VarSub OPTIMIZE_LEVEL]} {[LIT_OTHER "="] [LIT_OTHER "="]} {[LIT_CHARS 1]} {[LIT_OTHER "]"]}) (For j [{[ComSub (Com {[LIT_CHARS eval]} {[LIT_CHARS echo]} {[LIT_LBRACE "{"] [LIT_CHARS 0..5] [LIT_RBRACE "}"]})]}]) (List (Com {[LIT_CHARS throbber]}) (Com {[LIT_CHARS pngout]} {[LIT_CHARS -q]} {[LIT_CHARS -k1]} {[LIT_CHARS -s1]} {[LIT_CHARS -f] [VarSub j]} {[VarSub opts]} {[VarSub file]}) ) ) (ElseTrue) (For i [{[LIT_CHARS 0]}, {[LIT_CHARS 128]}, {[LIT_CHARS 256]}, {[LIT_CHARS 512]}]) (For j [{[ComSub (Com {[LIT_CHARS eval]} {[LIT_CHARS echo]} {[LIT_LBRACE "{"] [LIT_CHARS 0..5] [LIT_RBRACE "}"]})]}]) (List (Com {[LIT_CHARS throbber]}) (Com {[LIT_CHARS pngout]} {[LIT_CHARS -q]} {[LIT_CHARS -k1]} {[LIT_CHARS -s1]} {[LIT_CHARS -b] [VarSub i]} {[LIT_CHARS -f] [VarSub j]} {[VarSub opts]} {[VarSub file]}) ) ) ) ) ) ) (FunctionDef get_color_depth_list [] (If (Com {[LIT_OTHER "["]} {[VarSub OPTIMIZE_LEVEL]} {[LIT_OTHER "="] [LIT_OTHER "="]} {[LIT_CHARS 1]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS -d0]]}) (ElseTrue) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "-d1 -d2 -d4 -d8"]]}) ) ) (FunctionDef process_grayscale [] (List (Com {[LIT_CHARS info]} {[LIT_CHARS -ne]} {[DQ [\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][LIT_CHARS gray....]]}) (For opt [{[ComSub (Com {[LIT_CHARS get_color_depth_list]})]}]) (Com {[LIT_CHARS pngout_loop]} {[VarSub file]} {[LIT_CHARS -c0]} {[VarSub opt]}) ) ) ) (FunctionDef process_grayscale_alpha [] (List (Com {[LIT_CHARS info]} {[LIT_CHARS -ne]} {[DQ [\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][LIT_CHARS gray-a..]]}) (Com {[LIT_CHARS pngout_loop]} {[VarSub file]} {[LIT_CHARS -c4]}) (For opt [{[ComSub (Com {[LIT_CHARS get_color_depth_list]})]}]) (Com {[LIT_CHARS pngout_loop]} {[VarSub file]} {[LIT_CHARS -c3]} {[VarSub opt]}) ) ) ) (FunctionDef process_rgb [] (List (Com {[LIT_CHARS info]} {[LIT_CHARS -ne]} {[DQ [\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][LIT_CHARS rgb.....]]}) (For opt [{[ComSub (Com {[LIT_CHARS get_color_depth_list]})]}]) (Com {[LIT_CHARS pngout_loop]} {[VarSub file]} {[LIT_CHARS -c3]} {[VarSub opt]}) ) (Com {[LIT_CHARS pngout_loop]} {[VarSub file]} {[LIT_CHARS -c2]}) (Com {[LIT_CHARS pngout_loop]} {[VarSub file]} {[LIT_CHARS -c6]}) ) ) (FunctionDef huffman_blocks [] (List (Com {[LIT_CHARS info]} {[LIT_CHARS -ne]} {[DQ [\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][LIT_CHARS huffman.]]}) (= scope= flags=0 words=[] bindings=[('file', {[VarSub 1]})]) (= scope= flags=0 words=[] bindings=[('size', {[ComSub (Com {[LIT_CHARS stat]} {[LIT_CHARS -c] [LIT_OTHER "%"] [LIT_CHARS s]} {[VarSub file]})]})]) (= scope= flags=0 words=[] bindings=[('min_block_size', {[VarSub DEFAULT_MIN_BLOCK_SIZE]})]) (= scope= flags=0 words=[] bindings=[('limit_blocks', {[VarSub DEFAULT_LIMIT_BLOCKS]})]) (If (Com {[LIT_OTHER "["]} {[VarSub size]} {[LIT_CHARS -gt]} {[VarSub LARGE_FILE_THRESHOLD]} {[LIT_OTHER "]"]}) (List (= scope= flags=0 words=[] bindings=[('min_block_size', {[VarSub LARGE_MIN_BLOCK_SIZE]})]) (= scope= flags=0 words=[] bindings=[('limit_blocks', {[VarSub LARGE_LIMIT_BLOCKS]})]) ) ) (Com {[LIT_CHARS let]} {[LIT_VAR_LIKE "max_blocks="] [VarSub size] [LIT_CHARS /] [VarSub min_block_size] =}) (If (Com {[LIT_OTHER "["]} {[VarSub max_blocks]} {[LIT_CHARS -gt]} {[VarSub limit_blocks]} {[LIT_OTHER "]"]}) (= scope= flags=0 words=[] bindings=[('max_blocks', {[VarSub limit_blocks]})]) ) (For i [{[ComSub (Com {[LIT_CHARS eval]} {[LIT_CHARS echo]} {[LIT_LBRACE "{"] [LIT_CHARS 2..] [VarSub max_blocks] [LIT_RBRACE "}"]})]}]) (List (Com {[LIT_CHARS throbber]}) (Com {[LIT_CHARS pngout]} {[LIT_CHARS -q]} {[LIT_CHARS -k1]} {[LIT_CHARS -ks]} {[LIT_CHARS -s1]} {[LIT_CHARS -n] [VarSub i]} {[VarSub file]}) ) ) ) ) (FunctionDef random_huffman_table_trial [] (List (Com {[LIT_CHARS info]} {[LIT_CHARS -ne]} {[DQ [\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][LIT_CHARS random..]]}) (= scope= flags=0 words=[] bindings=[('file', {[VarSub 1]})]) (= scope= flags=0 words=[] bindings=[('old_size', {[ComSub (Com {[LIT_CHARS stat]} {[LIT_CHARS -c] [LIT_OTHER "%"] [LIT_CHARS s]} {[VarSub file]})]})]) (= scope= flags=0 words=[] bindings=[('trials_count', {[VarSub DEFAULT_RANDOM_TRIALS]})]) (If (Com {[LIT_OTHER "["]} {[VarSub old_size]} {[LIT_CHARS -gt]} {[VarSub LARGE_FILE_THRESHOLD]} {[LIT_OTHER "]"]}) (= scope= flags=0 words=[] bindings=[('trials_count', {[VarSub LARGE_RANDOM_TRIALS]})]) ) (For i [{[ComSub (Com {[LIT_CHARS eval]} {[LIT_CHARS echo]} {[LIT_LBRACE "{"] [LIT_CHARS 1..] [VarSub trials_count] [LIT_RBRACE "}"]})]}]) (List (Com {[LIT_CHARS throbber]}) (Com {[LIT_CHARS pngout]} {[LIT_CHARS -q]} {[LIT_CHARS -k1]} {[LIT_CHARS -ks]} {[LIT_CHARS -s0]} {[LIT_CHARS -r]} {[VarSub file]}) ) ) (= scope= flags=0 words=[] bindings=[('new_size', {[ComSub (Com {[LIT_CHARS stat]} {[LIT_CHARS -c] [LIT_OTHER "%"] [LIT_CHARS s]} {[VarSub file]})]})]) (If (Com {[LIT_OTHER "["]} {[VarSub new_size]} {[LIT_CHARS -lt]} {[VarSub old_size]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS random_huffman_table_trial]} {[VarSub file]}) ) ) ) (FunctionDef final_compression [] (List (Com {[LIT_CHARS info]} {[LIT_CHARS -ne]} {[DQ [\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][LIT_CHARS final...]]}) (= scope= flags=0 words=[] bindings=[('file', {[VarSub 1]})]) (If (Com {[LIT_OTHER "["]} {[VarSub OPTIMIZE_LEVEL]} {[LIT_OTHER "="] [LIT_OTHER "="]} {[LIT_CHARS 2]} {[LIT_OTHER "]"]}) (For i [{[LIT_CHARS 32k]}, {[LIT_CHARS 16k]}, {[LIT_CHARS 8k]}, {[LIT_CHARS 4k]}, {[LIT_CHARS 2k]}, {[LIT_CHARS 1k]}, {[LIT_CHARS 512]}]) (List (Com {[LIT_CHARS throbber]}) (Com {[LIT_CHARS optipng]} {[LIT_CHARS -q]} {[LIT_CHARS -nb]} {[LIT_CHARS -nc]} {[LIT_CHARS -zw] [VarSub i]} {[LIT_CHARS -zc1-9]} {[LIT_CHARS -zm1-9]} {[LIT_CHARS -zs0-3]} {[LIT_CHARS -f0-5]} {[VarSub file]}) ) ) ) (For i [{[ComSub (Com {[LIT_CHARS eval]} {[LIT_CHARS echo]} {[LIT_LBRACE "{"] [LIT_CHARS 1..4] [LIT_RBRACE "}"]})]}]) (List (Com {[LIT_CHARS throbber]}) (Com {[LIT_CHARS advdef]} {[LIT_CHARS -q]} {[LIT_CHARS -z]} {[LIT_CHARS -] [VarSub i]} {[VarSub file]}) ) ) (If (Com {[VarSub VERBOSE]}) (Com {[LIT_CHARS printf]} {[DQ [\ LIT_ESCAPED_CHAR "\\0"][LIT_CHARS "33[0G"][\ LIT_ESCAPED_CHAR "\\0"][LIT_CHARS "33[K"]]}) ) ) ) (FunctionDef get_color_type [] (List (= scope= flags=0 words=[] bindings=[('file', {[VarSub 1]})]) (Com {[LIT_CHARS echo]} {[ComSub (Pipeline (Com {[LIT_CHARS file]} {[VarSub file]}) (Com {[LIT_CHARS awk]} {[LIT_CHARS -F] [LIT_COMMA ","]} {[SQ ]}) (Com {[LIT_CHARS awk]} {[SQ ]}) )]}) ) ) (FunctionDef optimize_size [] (List (= scope= flags=0 words=[] bindings=[('filename_length', {[VarSub file transform_ops=[(#len)]]})]) (= scope= flags=0 words=[{[LIT_CHARS -i]}] bindings=[('allowed_length', {[VarSub COLUMNS] [LIT_CHARS -11]})]) (= scope= flags=0 words=[{[LIT_CHARS -i]}] bindings=[('trimmed_length', {[VarSub filename_length] [LIT_CHARS -] [VarSub COLUMNS] [LIT_OTHER "+"] [LIT_CHARS 14]})]) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub filename_length]]} {[LIT_CHARS -lt]} {[DQ [VarSub allowed_length]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS info]} {[LIT_CHARS -n]} {[DQ [VarSub file][LIT_CHARS "|........"]]}) (ElseTrue) (Com {[LIT_CHARS info]} {[LIT_CHARS -n]} {[DQ [LIT_CHARS ...][VarSub file transform_ops=[Slice {A Atom NODE_ARITH_WORD {[VarSub trimmed_length]}} None]][LIT_CHARS "|........"]]}) ) (= scope= flags=0 words=[] bindings=[('file', {[VarSub 1]})]) (Com {[LIT_CHARS advdef]} {[LIT_CHARS -q]} {[LIT_CHARS -z]} {[LIT_CHARS -4]} {[VarSub file]}) (Com {[LIT_CHARS pngout]} {[LIT_CHARS -q]} {[LIT_CHARS -s4]} {[LIT_CHARS -c0]} {[LIT_CHARS -force]} {[VarSub file]} {[VarSub file] [LIT_CHARS .tmp.png]}) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -f]} {[VarSub file] [LIT_CHARS .tmp.png]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS rm]} {[VarSub file] [LIT_CHARS .tmp.png]}) (Com {[LIT_CHARS process_grayscale]} {[VarSub file]}) (Com {[LIT_CHARS process_grayscale_alpha]} {[VarSub file]}) ) (ElseTrue) (List (Com {[LIT_CHARS pngout]} {[LIT_CHARS -q]} {[LIT_CHARS -s4]} {[LIT_CHARS -c4]} {[LIT_CHARS -force]} {[VarSub file]} {[VarSub file] [LIT_CHARS .tmp.png]}) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -f]} {[VarSub file] [LIT_CHARS .tmp.png]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS rm]} {[VarSub file] [LIT_CHARS .tmp.png]}) (Com {[LIT_CHARS process_grayscale_alpha]} {[VarSub file]}) ) (ElseTrue) (Com {[LIT_CHARS process_rgb]} {[VarSub file]}) ) ) ) (Com {[LIT_CHARS info]} {[LIT_CHARS -ne]} {[DQ [\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][LIT_CHARS filter..]]}) (= scope= flags=0 words=[] bindings=[('old_color_type', {[ComSub (Com {[LIT_CHARS get_color_type]} {[VarSub file]})]})]) (Com {[LIT_CHARS optipng]} {[LIT_CHARS -q]} {[LIT_CHARS -zc9]} {[LIT_CHARS -zm8]} {[LIT_CHARS -zs0-3]} {[LIT_CHARS -f0-5]} {[VarSub file]} {[LIT_CHARS -out]} {[VarSub file] [LIT_CHARS .tmp.png]}) (= scope= flags=0 words=[] bindings=[('new_color_type', {[ComSub (Com {[LIT_CHARS get_color_type]} {[VarSub file] [LIT_CHARS .tmp.png]})]})]) (If (DBracket {B? LOGICAL_BINARY_AND {B2 BINARY_STRING_EQUAL {[VarSub old_color_type]} {[DQ [LIT_CHARS RGBA]]}} {B2 BINARY_STRING_EQUAL {[VarSub new_color_type]} {[LIT_CHARS gray] [LIT_OTHER "*"]}}}) (Com {[LIT_CHARS rm]} {[VarSub file] [LIT_CHARS .tmp.png]}) (ElseTrue) (Com {[LIT_CHARS mv]} {[VarSub file] [LIT_CHARS .tmp.png]} {[VarSub file]}) ) (Com {[LIT_CHARS pngout]} {[LIT_CHARS -q]} {[LIT_CHARS -k1]} {[LIT_CHARS -s1]} {[VarSub file]}) (Com {[LIT_CHARS huffman_blocks]} {[VarSub file]}) (Com {[LIT_CHARS info]} {[LIT_CHARS -ne]} {[DQ [\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][\ LIT_ESCAPED_CHAR "\\b"][LIT_CHARS strategy]]}) (If (Com {[LIT_OTHER "["]} {[VarSub OPTIMIZE_LEVEL]} {[LIT_OTHER "="] [LIT_OTHER "="]} {[LIT_CHARS 2]} {[LIT_OTHER "]"]}) (For i [{[LIT_CHARS 3]}, {[LIT_CHARS 2]}, {[LIT_CHARS 0]}]) (Com {[LIT_CHARS pngout]} {[LIT_CHARS -q]} {[LIT_CHARS -k1]} {[LIT_CHARS -ks]} {[LIT_CHARS -s] [VarSub i]} {[VarSub file]}) ) (ElseTrue) (Com {[LIT_CHARS pngout]} {[LIT_CHARS -q]} {[LIT_CHARS -k1]} {[LIT_CHARS -ks]} {[LIT_CHARS -s1]} {[VarSub file]}) ) (If (Com {[LIT_OTHER "["]} {[VarSub OPTIMIZE_LEVEL]} {[LIT_OTHER "="] [LIT_OTHER "="]} {[LIT_CHARS 2]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS random_huffman_table_trial]} {[VarSub file]}) ) (Com {[LIT_CHARS final_compression]} {[VarSub file]}) ) ) (FunctionDef process_file [] (List (= scope= flags=0 words=[] bindings=[('file', {[VarSub 1]})]) (= scope= flags=0 words=[] bindings=[('name', {[ComSub (Com {[LIT_CHARS basename]} {[VarSub file]})]})]) (Com {[LIT_CHARS pngcrush]} {[LIT_CHARS -d]} {[VarSub TMP_DIR]} {[LIT_CHARS -brute]} {[LIT_CHARS -reduce]} {[LIT_CHARS -rem]} {[LIT_CHARS alla]} {[VarSub file]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -f]} {[VarSub TMP_DIR] [LIT_CHARS /] [VarSub name]} {[LIT_CHARS -a]} {[VarSub OPTIMIZE_LEVEL]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS 0]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS optimize_size]} {[VarSub TMP_DIR] [LIT_CHARS /] [VarSub name]}) ) ) ) (FunctionDef optimize_file [] (List (= scope= flags=0 words=[] bindings=[('file', {[VarSub 1]})]) (If (Com {[VarSub using_cygwin]}) (= scope= flags=0 words=[] bindings=[('file', {[ComSub (Com {[LIT_CHARS cygpath]} {[LIT_CHARS -w]} {[VarSub file]})]})]) ) (= scope= flags=0 words=[] bindings=[('name', {[ComSub (Com {[LIT_CHARS basename]} {[VarSub file]})]})]) (= scope= flags=0 words=[] bindings=[('old', {[ComSub (Com {[LIT_CHARS stat]} {[LIT_CHARS -c] [LIT_OTHER "%"] [LIT_CHARS s]} {[VarSub file]})]})]) (= scope= flags=0 words=[] bindings=[('tmp_file', {[VarSub TMP_DIR] [LIT_CHARS /] [VarSub name]})]) (Com {[LIT_CHARS let]} {[LIT_VAR_LIKE "TOTAL_FILE+="] [LIT_CHARS 1] =}) (Com {[LIT_CHARS process_file]} {[VarSub file]}) (If (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -e]} {[VarSub tmp_file]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS let]} {[LIT_VAR_LIKE "CORRUPTED_FILE+="] [LIT_CHARS 1] =}) (Com {[LIT_CHARS echo]} {[DQ [VarSub file][LIT_CHARS " may be corrupted; skipping"][\ LIT_ESCAPED_CHAR "\\n"]]}) (Com {[LIT_CHARS return]}) ) ) (= scope= flags=0 words=[] bindings=[('new', {[ComSub (Com {[LIT_CHARS stat]} {[LIT_CHARS -c] [LIT_OTHER "%"] [LIT_CHARS s]} {[VarSub tmp_file]})]})]) (Com {[LIT_CHARS let]} {[LIT_VAR_LIKE "diff="] [VarSub old] [LIT_CHARS -] [VarSub new] =}) (Com {[LIT_CHARS let]} {[LIT_VAR_LIKE "percent="] [VarSub diff] [LIT_OTHER "*"] [LIT_CHARS 100] =}) (Com {[LIT_CHARS let]} {[LIT_VAR_LIKE "percent="] [VarSub percent] [LIT_CHARS /] [VarSub old] =}) (If (Com {[LIT_OTHER "["]} {[VarSub new]} {[LIT_CHARS -lt]} {[VarSub old]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS info]} {[DQ [VarSub file][LIT_CHARS ": "][VarSub old][LIT_CHARS " => "][VarSub new][LIT_CHARS " ("][VarSub diff][LIT_CHARS " bytes: "][VarSub percent][LIT_CHARS "%)"]]}) (Com {[LIT_CHARS cp]} {[DQ [VarSub tmp_file]]} {[DQ [VarSub file]]}) (Com {[LIT_CHARS let]} {[LIT_VAR_LIKE "TOTAL_OLD_BYTES+="] [VarSub old] =}) (Com {[LIT_CHARS let]} {[LIT_VAR_LIKE "TOTAL_NEW_BYTES+="] [VarSub new] =}) (Com {[LIT_CHARS let]} {[LIT_VAR_LIKE "PROCESSED_FILE+="] [LIT_CHARS 1] =}) ) (ElseTrue) (List (If (Com {[LIT_OTHER "["]} {[VarSub OPTIMIZE_LEVEL]} {[LIT_OTHER "="] [LIT_OTHER "="]} {[LIT_CHARS 0]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS info]} {[DQ [VarSub file][LIT_CHARS ": Skipped"]]}) (ElseTrue) (Com {[LIT_CHARS info]} {[DQ [VarSub file][LIT_CHARS ": Unable to reduce size"]]}) ) (Com {[LIT_CHARS rm]} {[VarSub tmp_file]}) ) ) ) ) (FunctionDef optimize_dir [] (List (= scope= flags=0 words=[] bindings=[('dir', {[VarSub 1]})]) (If (Com {[VarSub using_cygwin]}) (= scope= flags=0 words=[] bindings=[('dir', {[ComSub (Com {[LIT_CHARS cygpath]} {[LIT_CHARS -w]} {[VarSub dir]})]})]) ) (For f [{[ComSub (Com {[LIT_CHARS find]} {[VarSub dir]} {[LIT_CHARS -name]} {[DQ [LIT_CHARS "*.png"]]})]}]) (Com {[LIT_CHARS optimize_file]} {[VarSub f]}) ) ) ) (FunctionDef install_if_not_installed [] (List (= scope= flags=0 words=[] bindings=[('program', {[VarSub 1]})]) (= scope= flags=0 words=[] bindings=[('package', {[VarSub 2]})]) (Com {[LIT_CHARS which]} {[VarSub program]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub ?]]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[DQ [LIT_CHARS 0]]} {[LIT_OTHER "]"]}) (If (Com {[VarSub using_cygwin]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Couldn't find "][VarSub program][LIT_CHARS ". "]]} {[DQ [LIT_CHARS "Please run cygwin's setup.exe and install the "][VarSub package][LIT_CHARS " package."]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) (ElseTrue) (List (Com {[LIT_CHARS read]} {[LIT_CHARS -p]} {[DQ [LIT_CHARS "Couldn't find "][VarSub program][LIT_CHARS ". Do you want to install? (y/n)"]]}) (AndOr OP_AND_IF (Com {[LIT_OTHER "["]} {[DQ [VarSub REPLY]]} {[LIT_OTHER "="] [LIT_OTHER "="]} {[DQ [LIT_CHARS y]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS sudo]} {[LIT_CHARS apt-get]} {[LIT_CHARS install]} {[VarSub package]}) ) (AndOr OP_OR_IF (Com {[LIT_OTHER "["]} {[DQ [VarSub REPLY]]} {[LIT_OTHER "="] [LIT_OTHER "="]} {[DQ [LIT_CHARS y]]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS exit]}) ) ) ) ) ) ) (FunctionDef fail_if_not_installed [] (List (= scope= flags=0 words=[] bindings=[('program', {[VarSub 1]})]) (= scope= flags=0 words=[] bindings=[('url', {[VarSub 2]})]) (Com {[LIT_CHARS which]} {[VarSub program]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) (If (Com {[LIT_OTHER "["]} {[VarSub ?]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS 0]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Couldn't find "][VarSub program][LIT_CHARS ". Please download and install it from "][VarSub url][LIT_CHARS " ."]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) ) ) (FunctionDef exit_if_bad_pngcrush_version [] (List (= scope= flags=0 words=[] bindings=[('version', {[ComSub (Pipeline (Com {[LIT_CHARS pngcrush]} {[LIT_CHARS -v]}) (Com {[LIT_CHARS awk]} {[DQ [LIT_CHARS "/pngcrush 1.7./ {print "][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "3}"]]}) )]})]) (= scope= flags=0 words=[] bindings=[('version_num', {[ComSub (Pipeline (Com {[LIT_CHARS echo]} {[VarSub version]}) (Com {[LIT_CHARS sed]} {[DQ [LIT_CHARS s/][\ LIT_ESCAPED_CHAR "\\."][LIT_CHARS //g]]}) )]})]) (If (DBracket {B? LOGICAL_BINARY_AND {B2 BINARY_INT_LT {[LIT_CHARS 1748]} {[VarSub version_num]}} {B2 BINARY_INT_LT {[VarSub version_num]} {[LIT_CHARS 1773]}}}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Your pngcrush ("][VarSub version][LIT_CHARS ") has a bug that exists from "]]} {[DQ [LIT_CHARS "1.7.49 to 1.7.72 (see crbug.com/404893 for details)."]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Please upgrade pngcrush and try again"]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) ) ) (FunctionDef show_help [] (List (= scope= flags=0 words=[] bindings=[('program', {[ComSub (Com {[LIT_CHARS basename]} {[VarSub 0]})]})]) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Usage: "][VarSub program][LIT_CHARS " [options] ...\n"][LIT_CHARS "\n"][VarSub program][LIT_CHARS " is a utility to reduce the size of png files by removing\n"][LIT_CHARS "unnecessary chunks and compressing the image.\n"][LIT_CHARS "\n"][LIT_CHARS "Options:\n"][LIT_CHARS " -o Specify optimization level: (default is 1)\n"][LIT_CHARS " 0 Just run pngcrush. It removes unnecessary chunks and perform basic\n"][LIT_CHARS " optimization on the encoded data.\n"][LIT_CHARS " 1 Optimize png files using pngout/optipng and advdef. This can further\n"][LIT_CHARS " reduce addtional 5~30%. This is the default level.\n"][LIT_CHARS " 2 Aggressively optimize the size of png files. This may produce\n"][LIT_CHARS " addtional 1%~5% reduction. Warning: this is *VERY*\n"][LIT_CHARS " slow and can take hours to process all files.\n"][LIT_CHARS " -r If this is specified, the script processes only png files\n"][LIT_CHARS " changed since this revision. The options will be used\n"][LIT_CHARS " to narrow down the files under specific directories.\n"][LIT_CHARS " -v Shows optimization process for each file.\n"][LIT_CHARS " -h Print this help text."]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (If (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -e]} {[LIT_CHARS ../.gclient]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub 0][LIT_CHARS " must be run in src directory"]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (If (Com {[LIT_OTHER "["]} {[DQ [ComSub (Com {[LIT_CHARS expr]} {[LIT_CHARS substr]} {[ComSub (Com {[LIT_CHARS uname]} {[LIT_CHARS -s]})]} {[LIT_CHARS 1]} {[LIT_CHARS 6]})]]} {[LIT_OTHER "="] [LIT_OTHER "="]} {[DQ [LIT_CHARS CYGWIN]]} {[LIT_OTHER "]"]}) (= scope= flags=0 words=[] bindings=[('using_cygwin', {[LIT_CHARS true]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('using_cygwin', {[LIT_CHARS false]})]) ) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -z]} {[VarSub COLUMNS]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS which]} {[LIT_CHARS tput]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > ) (If (Com {[LIT_OTHER "["]} {[DQ [VarSub ?]]} {[LIT_OTHER "="] [LIT_OTHER "="]} {[DQ [LIT_CHARS 0]]} {[LIT_OTHER "]"]}) (= scope= flags=0 words=[] bindings=[('COLUMNS', {[ComSub (Com {[LIT_CHARS tput]} {[LIT_CHARS cols]})]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('COLUMNS', {[LIT_CHARS 80]})]) ) (= scope= flags=1 words=[{[LIT_CHARS COLUMNS]}] bindings=[]) ) ) (= scope= flags=0 words=[] bindings=[('OPTIMIZE_LEVEL', {[LIT_CHARS 1]})]) (While (Com {[LIT_CHARS getopts]} {[LIT_CHARS o] [LIT_OTHER ":"] [LIT_CHARS r] [LIT_OTHER ":"] [LIT_CHARS h] [LIT_OTHER ":"] [LIT_CHARS v]} {[LIT_CHARS opts]}) (Case to_match={[VarSub opts]}, pat_word_list=[[{[LIT_CHARS r]}], [{[LIT_CHARS o]}], [{[LIT_CHARS v]}], [{[LIT_OTHER "["] [LIT_CHARS h] [LIT_OTHER "?"] [LIT_OTHER "]"]}]] (List (AndOr OP_OR_IF (= scope= flags=0 words=[] bindings=[('COMMIT', {[ComSub (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS svn]} {[LIT_CHARS find-rev]} {[LIT_CHARS r] [VarSub OPTARG]}) (Com {[LIT_CHARS tail]} {[LIT_CHARS -1]}) )]})]) (Com {[LIT_CHARS exit]}) ) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -z]} {[DQ [VarSub COMMIT]]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Revision "][VarSub OPTARG][LIT_CHARS " not found"]]}) (Com {[LIT_CHARS show_help]}) ) ) ) (List (If (DBracket {B? LOGICAL_BINARY_AND {B2 BINARY_STRING_NOT_EQUAL {[DQ [VarSub OPTARG]]} {[LIT_CHARS 0]}} {B? LOGICAL_BINARY_AND {B2 BINARY_STRING_NOT_EQUAL {[DQ [VarSub OPTARG]]} {[LIT_CHARS 1]}} {B2 BINARY_STRING_NOT_EQUAL {[DQ [VarSub OPTARG]]} {[LIT_CHARS 2]}}}}) (Com {[LIT_CHARS show_help]}) ) (= scope= flags=0 words=[] bindings=[('OPTIMIZE_LEVEL', {[VarSub OPTARG]})]) ) (= scope= flags=0 words=[] bindings=[('VERBOSE', {[LIT_CHARS true]})]) (Com {[LIT_CHARS show_help]}) ) ) (Com {[LIT_CHARS shift]} {[ArithSub {A2 AS_OP_MINUS {A Atom NODE_ARITH_WORD {[VarSub OPTIND]}} {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}}}]}) (Com {[LIT_CHARS install_if_not_installed]} {[LIT_CHARS pngcrush]} {[LIT_CHARS pngcrush]}) (Com {[LIT_CHARS exit_if_bad_pngcrush_version]}) (If (Com {[LIT_OTHER "["]} {[VarSub OPTIMIZE_LEVEL]} {[LIT_CHARS -ge]} {[LIT_CHARS 1]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS install_if_not_installed]} {[LIT_CHARS optipng]} {[LIT_CHARS optipng]}) (If (Com {[VarSub using_cygwin]}) (Com {[LIT_CHARS fail_if_not_installed]} {[LIT_CHARS advdef]} {[DQ [LIT_CHARS "http://advancemame.sourceforge.net/comp-readme.html"]]}) (ElseTrue) (Com {[LIT_CHARS install_if_not_installed]} {[LIT_CHARS advdef]} {[LIT_CHARS advancecomp]}) ) (If (Com {[VarSub using_cygwin]}) (= scope= flags=0 words=[] bindings=[('pngout_url', {[DQ [LIT_CHARS "http://www.advsys.net/ken/utils.htm"]]})]) (ElseTrue) (= scope= flags=0 words=[] bindings=[('pngout_url', {[DQ [LIT_CHARS "http://www.jonof.id.au/kenutils"]]})]) ) (Com {[LIT_CHARS fail_if_not_installed]} {[LIT_CHARS pngout]} {[VarSub pngout_url]}) ) ) (= scope= flags=0 words=[] bindings=[('TMP_DIR', {[ComSub (Com {[LIT_CHARS mktemp]} {[LIT_CHARS -d]})]})]) (If (Com {[VarSub using_cygwin]}) (= scope= flags=0 words=[] bindings=[('TMP_DIR', {[ComSub (Com {[LIT_CHARS cygpath]} {[LIT_CHARS -w]} {[VarSub TMP_DIR]})]})]) ) (= scope= flags=0 words=[] bindings=[('DIRS', {[VarSub @]})]) (Com {[LIT_CHARS set]} {[VarSub DIRS test_op=VS_TEST_COLON_EQUALS {[VarSub ALL_DIRS]}]}) (Com {[LIT_CHARS info]} {[DQ [LIT_CHARS "Optimize level="][VarSub OPTIMIZE_LEVEL]]}) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -n]} {[DQ [VarSub COMMIT]]} {[LIT_OTHER "]"]}) (List (= scope= flags=0 words=[] bindings=[('ALL_FILES', {[ComSub (Pipeline (Com {[LIT_CHARS git]} {[LIT_CHARS diff]} {[LIT_CHARS --name-only]} {[VarSub COMMIT]} {[LIT_CHARS HEAD]} {[VarSub DIRS]}) (Com {[LIT_CHARS grep]} {[DQ [LIT_CHARS png][LIT_OTHER "$"]]}) )]})]) (= scope= flags=0 words=[] bindings=[('ALL_FILES_LIST', {[Array {[VarSub ALL_FILES]}]})]) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Processing "][VarSub ALL_FILES_LIST bracket_op=(Index {A Atom NODE_ARITH_WORD {AS_OP_STAR "*"}}) transform_ops=[(#len)]][LIT_CHARS " files"]]}) (For f [{[VarSub ALL_FILES]}]) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -f]} {[VarSub f]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS optimize_file]} {[VarSub f]}) (ElseTrue) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Skipping deleted file: "][VarSub f]]}) ) ) ) (ElseTrue) (For d [{[VarSub DIRS]}]) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -d]} {[VarSub d]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS info]} {[DQ [LIT_CHARS "Optimizing png files in "][VarSub d]]}) (Com {[LIT_CHARS optimize_dir]} {[VarSub d]}) (Com {[LIT_CHARS info]} {[DQ ]}) ) (Com {[LIT_OTHER "["]} {[LIT_CHARS -f]} {[VarSub d]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS optimize_file]} {[VarSub d]}) (ElseTrue) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Not a file or directory: "][VarSub d]]}) ) ) ) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Optimized "][VarSub PROCESSED_FILE][LIT_CHARS /][VarSub TOTAL_FILE][LIT_CHARS " files in"]]} {[DQ [ComSub (Com {[LIT_CHARS date]} {[LIT_CHARS -d]} {[DQ [LIT_CHARS "0 + "][VarSub SECONDS][LIT_CHARS " sec"]]} {[LIT_OTHER "+"] [LIT_OTHER "%"] [LIT_CHARS Ts]})]]}) (If (Com {[LIT_OTHER "["]} {[VarSub PROCESSED_FILE]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS 0]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS let]} {[LIT_VAR_LIKE "diff="] [VarSub TOTAL_OLD_BYTES] [LIT_CHARS -] [VarSub TOTAL_NEW_BYTES] =}) (Com {[LIT_CHARS let]} {[LIT_VAR_LIKE "percent="] [VarSub diff] [LIT_OTHER "*"] [LIT_CHARS 100/] [VarSub TOTAL_OLD_BYTES] =}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Result: "][VarSub TOTAL_OLD_BYTES][LIT_CHARS " => "][VarSub TOTAL_NEW_BYTES][LIT_CHARS " bytes"]]} {[DQ [LIT_CHARS "("][VarSub diff][LIT_CHARS " bytes: "][VarSub percent][LIT_CHARS "%)"]]}) ) ) (If (Com {[LIT_OTHER "["]} {[VarSub CORRUPTED_FILE]} {[LIT_OTHER "!"] [LIT_OTHER "="]} {[LIT_CHARS 0]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Warning: corrupted files found: "][VarSub CORRUPTED_FILE]]}) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Please contact the author of the CL that landed corrupted png files"]]}) ) ) )