diff --git a/Cargo.build-language b/Cargo.build-language index e18da478..ab1e74af 100644 --- a/Cargo.build-language +++ b/Cargo.build-language @@ -38,6 +38,12 @@ name variable.parameter + + match + ^warning: + name + variable.parameter + match ^test result: @@ -108,4 +114,4 @@ scopeName source.build_results - \ No newline at end of file + diff --git a/Cargo.sublime-build b/Cargo.sublime-build deleted file mode 100644 index cad1a66c..00000000 --- a/Cargo.sublime-build +++ /dev/null @@ -1,53 +0,0 @@ -{ - "shell_cmd": "cargo build", - "selector": "source.rust", - "file_regex": "(?|, ([^,<\n]*\\.[A-z]{2}):([0-9]+)|[ \t]*-->[ \t]*([^<\n]*):([0-9]+):([0-9]+))", - "syntax": "Cargo.build-language", - "osx": - { - "path": "~/.cargo/bin:$path", - }, - - "variants": [ - { - "shell_cmd": "cargo check", - "name": "Check" - }, - { - "shell_cmd": "cargo run", - "name": "Run" - }, - { - "shell_cmd": "cargo run --release", - "name": "Run Release" - }, - { - "shell_cmd": "cargo test", - "name": "Test" - }, - { - "shell_cmd": "cargo bench", - "name": "Bench" - }, - { - "shell_cmd": "cargo clean", - "name": "Clean" - }, - { - "shell_cmd": "cargo build --release", - "name": "Release" - }, - { - "shell_cmd": "cargo doc", - "name": "Document" - }, - { - "shell_cmd": "cargo clippy", - "name": "Clippy" - }, - { - "shell_cmd": "cargo script \"$file\"", - "name": "Script" - } - ] -} diff --git a/Default (Linux).sublime-keymap b/Default (Linux).sublime-keymap new file mode 100644 index 00000000..32aade3d --- /dev/null +++ b/Default (Linux).sublime-keymap @@ -0,0 +1,17 @@ +[ + {"keys": ["f4"], "command": "rust_next_message", "context": + [ + {"key": "selector", "operator":"equal", "operand": "source.rust"} + ] + }, + {"keys": ["shift+f4"], "command": "rust_prev_message", "context": + [ + {"key": "selector", "operator":"equal", "operand": "source.rust"} + ] + }, + {"keys": ["ctrl+break"], "command": "rust_cancel", "context": + [ + {"key": "selector", "operator":"equal", "operand": "source.rust"} + ] + }, +] diff --git a/Default (OSX).sublime-keymap b/Default (OSX).sublime-keymap new file mode 100644 index 00000000..febf8d95 --- /dev/null +++ b/Default (OSX).sublime-keymap @@ -0,0 +1,17 @@ +[ + {"keys": ["f4"], "command": "rust_next_message", "context": + [ + {"key": "selector", "operator":"equal", "operand": "source.rust"} + ] + }, + {"keys": ["shift+f4"], "command": "rust_prev_message", "context": + [ + {"key": "selector", "operator":"equal", "operand": "source.rust"} + ] + }, + {"keys": ["ctrl+c"], "command": "rust_cancel", "context": + [ + {"key": "selector", "operator":"equal", "operand": "source.rust"} + ] + }, +] diff --git a/Default (Windows).sublime-keymap b/Default (Windows).sublime-keymap new file mode 100644 index 00000000..32aade3d --- /dev/null +++ b/Default (Windows).sublime-keymap @@ -0,0 +1,17 @@ +[ + {"keys": ["f4"], "command": "rust_next_message", "context": + [ + {"key": "selector", "operator":"equal", "operand": "source.rust"} + ] + }, + {"keys": ["shift+f4"], "command": "rust_prev_message", "context": + [ + {"key": "selector", "operator":"equal", "operand": "source.rust"} + ] + }, + {"keys": ["ctrl+break"], "command": "rust_cancel", "context": + [ + {"key": "selector", "operator":"equal", "operand": "source.rust"} + ] + }, +] diff --git a/README.md b/README.md index c3b54c1a..fbaf15d5 100644 --- a/README.md +++ b/README.md @@ -27,20 +27,12 @@ If you can't see `Rust Enhanced` its most likely because you're using Sublime Te ## Features ### Go To Definition -### Build functionality -Rust Enhanced has the following build functions: -- Cargo Check -- Cargo Run -- Cargo Script [Cargo Script is needed](https://github.com/DanielKeep/cargo-script) -- Cargo Test -- Cargo Bench -- Cargo Clean -- Cargo Release -- Cargo Document -- Cargo Clippy -- Rust -- Rust Run +### Cargo Build +Rust Enhanced has a custom build system tailored for running Cargo. It will display errors and warnings in line using Sublime's phantoms. It also supports a variety of configuration options to control how Cargo is run. +![testingrust](https://cloud.githubusercontent.com/assets/43198/22944409/7780ab9a-f2a5-11e6-87ea-0e253d6c40f6.png) + +See [the build docs](docs/build.md) for more information. ### Cargo tests with highlighting Thanks to [urschrei](https://github.com/urschrei/) we have Highlighting for: @@ -53,24 +45,31 @@ Thanks to [urschrei](https://github.com/urschrei/) we have Highlighting for: - total number of measured tests > 0 Example: + ![highlight_rust_test](https://cloud.githubusercontent.com/assets/936006/19247437/3cf6e056-8f23-11e6-9bbe-d8c542287db6.png) ### Syntax Checking Rust Enhanced will automatically perform syntax checking each time you save a file. +Errors and warnings are displayed in line the same way as the [build system](docs/build.md). This relies on Cargo and Rust (>= 1.8.0) being installed and on your system path. Plus Sublime Text >= 3118. -There are a variety of settings (see [Settings](#settings)) for controlling the syntax highlighting: +[Settings](#settings) for controlling the on-save syntax checking: | Setting | Default | Description | | :------ | :------ | :---------- | | `rust_syntax_checking` | `true` | Enable the on-save syntax checking. | -| `rust_syntax_checking_include_tests` | `true` | Enable checking of test code within `#[cfg(test)]` sections. | -| `rust_syntax_hide_warnings` | `false` | If true, will not display warning messages. | -| `rust_syntax_error_color` | `"#F00"` | Color of error messages. | -| `rust_syntax_warning_color` | `"#FF0"` | Color of warning messages. | +| `rust_syntax_checking_include_tests` | `true` | Enable checking of test code within `#[cfg(test)]` sections (only for `no-trans` method). | +| `rust_syntax_checking_method` | `"no-trans"` | The method used for checking your code (see below). | -Here is an example: -![testingrust](https://cloud.githubusercontent.com/assets/43198/22944409/7780ab9a-f2a5-11e6-87ea-0e253d6c40f6.png) +The available checking methods are: + +| Method | Description | +| :----- | :---------- | +| `no-trans` | Runs the rustc compiler with the `-Zno-trans` option. This will be deprecated soon, however it has the benefit of supporting `#[test]` sections. | +| `check` | Uses `cargo check` (requires at least Rust 1.16). | +| `clippy` | Uses `cargo clippy`. This requires [Clippy](https://github.com/Manishearth/rust-clippy) to be installed. This also may be a little slower since it must check every target in your package. | + +This will use the same configuration options as the "Check" and "Clippy" build variants (for example, extra environment variables, or checking with different features). See [the build docs](docs/build.md) for more information. Projects with multiple build targets are supported too (--lib, --bin, --example, etc.). If a cargo project has several build targets, it will attempt to automatically detect the correct target. In some rare cases, you may need to manually specify which target a file belongs to. This can be done by adding a "projects" setting in `Rust.sublime-settings` with the following format: @@ -93,9 +92,11 @@ Projects with multiple build targets are supported too (--lib, --bin, --example, ``` ## Settings -You can customize the behaviour of sublime-rust by creating a settings file in your User package. This can be accessed from within SublimeText by going to the menu Preferences > Browse Packages.... Create a file named Rust.sublime-settings or alternatively copy the default settings file Packages/sublime-rust/Rust.sublime-settings to your User package and edit it to your liking. +To customize the settings, use the command from the Sublime menu: + + Preferences > Package Settings > Rust Enhanced > Settings - User -Note: File names are case-sensitive on some platforms (e.g. Linux) so the file name should be exactly Rust.sublime-settings with capitalization preserved. +Additionally, you can customize settings per-project by adding settings to your `.sublime-project` file under the `"settings"` key. ## Development diff --git a/RustEnhanced.sublime-build b/RustEnhanced.sublime-build index 78b1f6a6..39f345cf 100644 --- a/RustEnhanced.sublime-build +++ b/RustEnhanced.sublime-build @@ -1,21 +1,58 @@ { - "shell_cmd": "rustc \"$file\"", + "target": "cargo_exec", "selector": "source.rust", - "file_regex": "[ \\t]*-->[ \\t]*(.*?):([0-9]+):([0-9]+)$", - "osx": - { - "path": "~/.cargo/bin:$path", - }, + "command": "build", "variants": [ { - "selector": "source.rust", - "shell_cmd": "./$file_base_name", + "name": "Automatic", + "command": "auto", + }, + { "name": "Run", - "windows": - { - "shell_cmd": "\"$file_base_name.exe\"" + "command": "run", + }, + { + "name": "Run (with args)...", + "command": "run", + "command_info": { + "wants_run_args": true + } + }, + { + "name": "Check", + "command": "check", + }, + { + "name": "Test", + "command": "test", + }, + { + "name": "Test (with args)...", + "command": "test", + "command_info": { + "wants_run_args": true } - } + }, + { + "name": "Bench", + "command": "bench", + }, + { + "name": "Clean", + "command": "clean", + }, + { + "name": "Document", + "command": "doc", + }, + { + "name": "Clippy", + "command": "clippy", + }, + { + "name": "Script", + "command": "script", + }, ] } diff --git a/RustEnhanced.sublime-commands b/RustEnhanced.sublime-commands index 9b183e96..a170c2c1 100644 --- a/RustEnhanced.sublime-commands +++ b/RustEnhanced.sublime-commands @@ -1,6 +1,26 @@ [ - { - "caption": "Rust: Toggle Syntax Checking", + { + "caption": "Rust: Toggle Syntax Checking", "command": "toggle_rust_syntax_setting" - } + }, + { + "caption": "Rust: Next Message", + "command": "rust_next_message" + }, + { + "caption": "Rust: Prev Message", + "command": "rust_prev_message" + }, + { + "caption": "Rust: Cancel Build", + "command": "rust_cancel" + }, + { + "caption": "Rust: Create New Cargo Build Variant", + "command": "cargo_create_new_build" + }, + { + "caption": "Rust: Configure Cargo Build", + "command": "cargo_configure" + }, ] diff --git a/RustEnhanced.sublime-settings b/RustEnhanced.sublime-settings index aec6d9fa..dcb4ddf5 100644 --- a/RustEnhanced.sublime-settings +++ b/RustEnhanced.sublime-settings @@ -13,7 +13,24 @@ "rust_syntax_error_color": "#F00", // Color of warning messages. - "rust_syntax_warning_color":"#FF0" + "rust_syntax_warning_color":"#FF0", + + // Specify environment variables to add when running Cargo. + // "rust_env": {"PATH": "$PATH:$HOME/.cargo/bin"} + + // If true, will use the environment from the user's login shell when + // running Cargo. + "rust_include_shell_env": true, + + // For errors/warnings, how to show the inline message. + // "normal" - Shows the message inline. + // "none" - Do not show the message inline. + "rust_phantom_style": "normal", + + // For errors/warnings, how to highlight the region of the error. + // "outline" - Outlines the region. + // "none" - No outlining. + "rust_region_style": "outline", // If your cargo project has several build targets, it's possible to specify mapping of // source code filenames to the target names to enable syntax checking. diff --git a/SyntaxCheckPlugin.py b/SyntaxCheckPlugin.py index 32a98ded..40aaf817 100755 --- a/SyntaxCheckPlugin.py +++ b/SyntaxCheckPlugin.py @@ -1,11 +1,11 @@ -import sublime, sublime_plugin -import subprocess +import sublime +import sublime_plugin import os -import html -import json -import webbrowser +from .rust import (messages, rust_proc, rust_thread, util, target_detect, + cargo_settings) from pprint import pprint + """On-save syntax checking. This contains the code for displaying message phantoms for errors/warnings @@ -31,483 +31,142 @@ # - Errors generated by compiling an extern crate do not not output as # json. -# TODO: -# - clippy support (doesn't output json afaik) -# - Some way to navigate to messages? Similar to Build next/previous. -class rustPluginSyntaxCheckEvent(sublime_plugin.EventListener): +class RustSyntaxCheckEvent(sublime_plugin.EventListener): # Beware: This gets called multiple times if the same buffer is opened in # multiple views (with the same view passed in each time). See: # https://github.com/SublimeTextIssues/Core/issues/289 - def on_post_save_async(self, view): + def on_post_save(self, view): # Are we in rust scope and is it switched on? # We use phantoms which were added in 3118 if int(sublime.version()) < 3118: return - settings = view.settings() - enabled = settings.get('rust_syntax_checking') - if enabled and "source.rust" in view.scope_name(0): - file_name = os.path.abspath(view.file_name()) - file_dir = os.path.dirname(file_name) - - view.set_status('rust-check', 'Rust syntax check running...') - # This flag is used to terminate early. In situations where we - # can't auto-detect the appropriate Cargo target, we compile - # multiple targets. If we receive any messages for the current - # view, we might as well stop. Otherwise, you risk displaying - # duplicate messages for shared modules. - self.this_view_found = False - try: - self.hide_phantoms(view.window()) - - # Keep track of regions used for highlighting, since Sublime - # requires it to be added in one shot. - # Key is view.id, value is - # {'view': view, 'regions': [(scope, region)]} - regions_by_view = {} - - for target_src, infos in self.get_rustc_messages(settings, file_name): - # print('-------------') - for info in infos: - # pprint(info) - self.add_error_phantoms(view, file_dir, info, settings, regions_by_view, target_src, {}) - if self.this_view_found: - break - - self.draw_region_highlights(regions_by_view) - finally: - view.erase_status('rust-check') - - # If the user has switched OFF the plugin, remove any phantom lines + enabled = util.get_setting('rust_syntax_checking', True) + if enabled and util.active_view_is_rust(view=view): + t = RustSyntaxCheckThread(view) + t.start() elif not enabled: - self.hide_phantoms(view.window()) - # print('done') - - def run_cargo(self, args, cwd): - """Args should be an array of arguments for cargo. - Returns list of dictionaries of the parsed JSON output. - """ - - # When sublime is launched from the dock in OSX, it does not have the user's environment set. So the $PATH env is reset. - # This means ~./cargo/bin won't be added (causing rustup to fail), we can manually add it back in here. [This is a hack, hopefully Sublime fixes this natively] - # fixes https://github.com/rust-lang/sublime-rust/issues/126 - env = os.environ.copy() # copy so we don't modify the current processs' environment - normalised_cargo_path = os.path.normpath("~/.cargo/bin") + (";" if os.name == "nt" else ":") - env["PATH"] = normalised_cargo_path + env["PATH"] - - cmd = ' '.join(['cargo']+args) - print('Running %r' % cmd) - # shell=True is needed to stop the window popping up, although it looks like this is needed: - # http://stackoverflow.com/questions/3390762/how-do-i-eliminate-windows-consoles-from-spawned-processes-in-python-2-7 - cproc = subprocess.Popen(cmd, cwd=cwd, - shell=True, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, env=env) - - output = cproc.communicate() - output = output[0].decode('utf-8') # ignore errors? - result = [] - for line in output.split('\n'): - if line == '' or line[0] != '{': - continue - result.append(json.loads(line)) - # print(output) - if not result and cproc.returncode: - print('Failed to run: %s' % cmd) - print(output) - return result + # If the user has switched OFF the plugin, remove any phantom + # lines. + messages.clear_messages(view.window()) + + +class RustSyntaxCheckThread(rust_thread.RustThread, rust_proc.ProcListener): + + # Thread name. + name = 'Syntax Check' + # The Sublime view that triggered the check. + view = None + # Absolute path to the view that triggered the check. + triggered_file_name = None + # Directory of `triggered_file_name`. + cwd = None + # This flag is used to terminate early. In situations where we can't + # auto-detect the appropriate Cargo target, we compile multiple targets. + # If we receive any messages for the current view, we might as well stop. + # Otherwise, you risk displaying duplicate messages for shared modules. + this_view_found = False + # The path to the top-level Cargo target filename (like main.rs or + # lib.rs). + current_target_src = None + + def __init__(self, view): + self.view = view + super(RustSyntaxCheckThread, self).__init__(view.window()) + + def run(self): + self.triggered_file_name = os.path.abspath(self.view.file_name()) + self.cwd = util.find_cargo_manifest(self.triggered_file_name) + if self.cwd is None: + # A manifest is required. + print('Rust Enhanced skipping on-save syntax check.') + print('Failed to find Cargo.toml from %r' % self.triggered_file_name) + print('A Cargo.toml manifest is required.') + return - def get_rustc_messages(self, settings, file_name): + self.view.set_status('rust-check', 'Rust syntax check running...') + self.this_view_found = False + try: + messages.clear_messages(self.window) + try: + self.get_rustc_messages() + except rust_proc.ProcessTerminatedError: + return + messages.draw_all_region_highlights(self.window) + finally: + self.view.erase_status('rust-check') + + def get_rustc_messages(self): """Top-level entry point for generating messages for the given - filename. A generator that yields (target_src_filename, infos) - tuples, where: - * target_src_filename: The name of the top-level source file of a - Cargo target. - * infos: A list of JSON dictionaries produced by Rust for that target. - """ - cwd = os.path.dirname(file_name) - targets = self.determine_targets(settings, file_name) - for (target_src, target_args) in targets: - args = ['rustc', target_args, '--', - '-Zno-trans', '-Zunstable-options', '--error-format=json'] + filename. - if settings.get('rust_syntax_checking_include_tests', True): - if not ('--test' in target_args or '--bench' in target_args): - args.append('--test') - yield (target_src, self.run_cargo(args, cwd)) - - def determine_targets(self, settings, file_name): - """Detect the target/filters needed to pass to Cargo to compile - file_name. - Returns list of (target_src_path, target_command_line_args) tuples. + :raises rust_proc.ProcessTerminatedError: Check was canceled. """ - # Try checking for target match in settings. - result = self._targets_manual_config(settings, file_name) - if result: return result - - # Try a heuristic to detect the filename. - output = self.run_cargo(['metadata', '--no-deps'], - cwd=os.path.dirname(file_name)) - if not output: - return [] - # Each "workspace" shows up as a separate package. - for package in output[0]['packages']: - root_path = os.path.dirname(package['manifest_path']) - targets = package['targets'] - # targets is list of dictionaries: - # {'kind': ['lib'], - # 'name': 'target-name', - # 'src_path': 'path/to/lib.rs'} - # src_path may be absolute or relative, fix it. - for target in targets: - if not os.path.isabs(target['src_path']): - target['src_path'] = os.path.join(root_path, target['src_path']) - target['src_path'] = os.path.normpath(target['src_path']) - - # Try exact filename matches. - result = self._targets_exact_match(targets, file_name) - if result: return result - - # No exact match, try to find all targets with longest matching parent - # directory. - result = self._targets_longest_matches(targets, file_name) - if result: return result - - # TODO: Alternatively, could run rustc directly without cargo. - # rustc -Zno-trans -Zunstable-options --error-format=json file_name - print('Rust Enhanced: Failed to find target for %r' % file_name) - return [] - - def _targets_manual_config(self, settings, file_name): - """Check for Cargo targets in the Sublime settings.""" - # First check config for manual targets. - for project in settings.get('projects', {}).values(): - src_root = os.path.join(project.get('root', ''), 'src') - if not file_name.startswith(src_root): - continue - targets = project.get('targets', {}) - for tfile, tcmd in targets.items(): - if file_name == os.path.join(src_root, tfile): - return [(tfile, tcmd)] - else: - target = targets.get('_default', '') - if target: - # Unfortunately don't have the target src filename. - return [('', target)] - return None - - def _target_to_args(self, target): - """Convert target from Cargo metadata to Cargo command-line argument.""" - # Targets have multiple "kinds" when you specify crate-type in - # Cargo.toml, like: - # crate-type = ["rlib", "dylib"] - # - # Libraries are the only thing that support this at this time, and - # generally you only use one command-line argument to build multiple - # "kinds" (--lib in this case). - # - # Nightly beware: [[example]] that specifies crate-type will no - # longer show up as "example", making it impossible to compile. - # See https://github.com/rust-lang/cargo/pull/3556 and - # https://github.com/rust-lang/cargo/issues/3572 - # - # For now, just grab the first kind since it will always result in the - # same arguments. - kind = target['kind'][0] - if kind in ('lib', 'rlib', 'dylib', 'staticlib', 'proc-macro'): - return (target['src_path'], '--lib') - elif kind in ('bin', 'test', 'example', 'bench'): - return (target['src_path'], '--'+kind+' '+target['name']) - elif kind in ('custom-build',): - # Could wait for "cargo check" or run rustc directly on the file. - return None - else: - # Unknown kind, don't know how to build. - raise ValueError(kind) - - def _targets_exact_match(self, targets, file_name): - """Check for Cargo targets that exactly match the current file.""" - for target in targets: - if target['src_path'] == file_name: - args = self._target_to_args(target) - if args: - return [args] - return None - - def _targets_longest_matches(self, targets, file_name): - """Determine the Cargo targets that are in the same directory (or - parent) of the current file.""" - result = [] - # Find longest path match. - # TODO: This is sub-optimal, because it may result in multiple targets. - # Consider using the output of rustc --emit dep-info. - # See https://github.com/rust-lang/cargo/issues/3211 for some possible - # problems with that. - path_match = os.path.dirname(file_name) - found = False - found_lib = False - found_bin = False - while not found: - for target in targets: - if os.path.dirname(target['src_path']) == path_match: - target_args = self._target_to_args(target) - if target_args: - result.append(target_args) - found = True - if target_args[1].startswith('--bin'): - found_bin = True - if target_args[1].startswith('--lib'): - found_lib = True - p = os.path.dirname(path_match) - if p == path_match: - # Root path - break - path_match = p - # If the match is both --bin and --lib in the same directory, just do --lib. - if found_bin and found_lib: - result = [x for x in result if not x[1].startswith('--bin')] - return result - - def hide_phantoms(self, window): - for view in window.views(): - view.erase_phantoms('rust-syntax-phantom') - view.erase_regions('rust-invalid') - view.erase_regions('rust-info') - - def add_error_phantoms(self, view_of_interest, cwd, info, settings, - regions_by_view, target_src_path, parent_info): - """Add messages to Sublime views. - - - `view_of_interest`: This is the view that triggered the syntax - check. If we receive any messages for this view, then - this_view_found is set. - - `cwd`: The directory where cargo is run. - - `info`: Dictionary of messages from rustc. - - `settings`: Sublime settings. - - `regions_by_view`: Dictionary used to map view to highlight regions (see above). - - `target_src_path`: The path to the top-level Cargo target filename - (like main.rs or lib.rs). - - `parent_info`: Dictionary used for tracking "children" messages. - Includes 'view' and 'region' keys to indicate where a child message - should be displayed. - """ - window = view_of_interest.window() - error_colour = settings.get('rust_syntax_error_color', 'var(--redish)') - warning_colour = settings.get('rust_syntax_warning_color', 'var(--yellowish)') - - # Include "notes" tied to errors, even if warnings are disabled. - if (info['level'] != 'error' and - settings.get('rust_syntax_hide_warnings', False) and - not parent_info - ): + method = util.get_setting('rust_syntax_checking_method', 'no-trans') + settings = cargo_settings.CargoSettings(self.window) + settings.load() + command_info = cargo_settings.CARGO_COMMANDS[method] + + if method == 'clippy': + # Clippy does not support cargo target filters, must be run for + # all targets. + cmd = settings.get_command(command_info, self.cwd) + p = rust_proc.RustProc() + p.run(self.window, cmd['command'], self.cwd, self, env=cmd['env']) + p.wait() return - # TODO: Consider matching the colors used by rustc. - # - error: red - # `bug` appears as "error: internal compiler error" - # - warning: yellow - # - note: bright green - # - help: cyan - is_error = info['level'] == 'error' - if is_error: - base_color = error_colour - else: - base_color = warning_colour - - msg_template = """ - - - {level}: {msg} {extra}\xD7 - """ % (base_color,) - - def click_handler(url): - if url == 'hide': - self.hide_phantoms(window) - else: - webbrowser.open_new(url) - - def add_message(view, region, message, extra=''): - if view == view_of_interest: - self.this_view_found = True - vid = view.id() - if vid not in regions_by_view: - regions_by_view[vid] = {'view': view, 'regions': {}} - # Unfortunately you cannot specify colors, but instead scopes as - # defined in the color theme. If the scope is not defined, then - # it will show up as foreground color. I just use "info" as an - # undefined scope (empty string will remove regions). - scope = 'invalid' if is_error else 'info' - regions_by_view[vid]['regions'].setdefault(scope, []).append(region) - - # For some reason, with LAYOUT_BELOW, if you have a multi-line - # region, the phantom is only displayed under the first line. I - # think it makes more sense for the phantom to appear below the - # last line. - start = view.rowcol(region.begin()) - end = view.rowcol(region.end()) - if start[0] != end[0]: - # Spans multiple lines, adjust to the last line. - region = sublime.Region( - view.text_point(end[0], 0), - region.end() - ) - - if info['level'] == 'error': - cls = 'rust-error' - else: - cls = 'rust-additional' - - # Rust performs some pretty-printing for things like suggestions, - # attempt to retain some of the formatting. This isn't perfect - # (doesn't line up perfectly), not sure why. - message = html.escape(message, quote=False).\ - replace('\n', '
').replace(' ', ' ') - content = msg_template.format( - cls = cls, - level = info['level'], - msg = message, - extra = extra - ) - self._add_phantom(view, - 'rust-syntax-phantom', region, - content, - sublime.LAYOUT_BELOW, - click_handler - ) - - def add_primary_message(view, region, message): - parent_info['view'] = view - parent_info['region'] = region - # Not all codes have explanations (yet). - if info['code'] and info['code']['explanation']: - # TODO - # This could potentially be a link that opens a Sublime popup, or - # a new temp buffer with the contents of 'explanation'. - # (maybe use sublime-markdown-popups) - extra = ' ?' % (info['code']['code'],) - else: - extra = '' - add_message(view, region, message, extra) - - def report_silent_message(path, message): - print('rust: %s' % path) - print('[%s]: %s' % (info['level'], message)) + # "no-trans" or "check" methods. + td = target_detect.TargetDetector(self.window) + targets = td.determine_targets(self.triggered_file_name) + for (target_src, target_args) in targets: + cmd = settings.get_command(command_info, self.cwd, + initial_settings={'target': ' '.join(target_args)}) + if method == 'no-trans': + cmd['command'].extend(['--', '-Zno-trans', '-Zunstable-options']) + if (util.get_setting('rust_syntax_checking_include_tests', True) and + not ('--test' in target_args or '--bench' in target_args)): + # Including the test harness has a few drawbacks. + # missing_docs lint is disabled (see + # https://github.com/rust-lang/sublime-rust/issues/156) + # It also disables the "main function not found" error for + # binaries. + cmd['command'].append('--test') + p = rust_proc.RustProc() + self.current_target_src = target_src + p.run(self.window, cmd['command'], self.cwd, self, env=cmd['env']) + p.wait() + if self.this_view_found: + break - if len(info['spans']) == 0: - if parent_info: - # This is extra info attached to the parent message. - add_primary_message(parent_info['view'], - parent_info['region'], - info['message']) - else: - # Messages without spans are global session messages (like "main - # function not found"). The most appropriate place for most of the - # messages is the root path (like main.rs). - # - # Some of the messages are not very interesting, though. - imsg = info['message'] - if not (imsg.startswith('aborting due to') or - imsg.startswith('cannot continue')): - view = window.find_open_file(os.path.realpath(target_src_path)) - if view: - # Place at bottom of file for lack of anywhere better. - r = sublime.Region(view.size()) - add_primary_message(view, r, imsg) - else: - report_silent_message(target_src_path, imsg) + ######################################################################### + # ProcListner methods + ######################################################################### - for span in info['spans']: - is_primary = span['is_primary'] - if 'macros>' in span['file_name']: - # Rust gives the chain of expansions for the macro, which we - # don't really care about. We want to find the site where the - # macro was invoked. - def find_span_r(span): - if 'macros>' in span['file_name']: - if span['expansion']: - return find_span_r(span['expansion']['span']) - else: - # XXX: Is this possible? - return None - else: - return span - span = find_span_r(span) - if span == None: - continue - span_path = os.path.realpath(os.path.join(cwd, span['file_name'])) - view = window.find_open_file(span_path) - if view: - # Sublime text is 0 based whilst the line/column info from - # rust is 1 based. - region = sublime.Region( - view.text_point(span['line_start'] - 1, span['column_start'] - 1), - view.text_point(span['line_end'] - 1, span['column_end'] - 1) - ) + def on_begin(self, proc): + pass - label = span['label'] - if label: - # Display the label for this Span. - add_message(view, region, label) - else: - # Some spans don't have a label. These seem to just imply - # that the main "message" is sufficient, and always seems - # to happen with the span is_primary. - if not is_primary: - # When can this happen? - pprint(info) - raise ValueError('Unexpected span with no label') - if is_primary: - # Show the overall error message. - add_primary_message(view, region, info['message']) - if span['suggested_replacement']: - # The "suggested_replacement" contains the code that - # should replace the span. However, it can be easier to - # read if you repeat the entire line (from "rendered"). - add_message(view, region, info['rendered']) - else: - # File is currently not open. - if is_primary: - report_silent_message(span['file_name'], info['message']) - if span['label']: - report_silent_message(span['file_name'], span['label']) + def on_data(self, proc, data): + # Debugging on-save checking problems requires viewing output here, + # but it is difficult to segregate useful messages (like "thread + # 'main' panicked") from all the other output. Perhaps make a debug + # print setting? + pass - # Recurse into children (which typically hold notes). - for child in info['children']: - self.add_error_phantoms(view_of_interest, cwd, child, settings, regions_by_view, target_src_path, parent_info) + def on_error(self, proc, message): + print('Rust Error: %s' % message) - def draw_region_highlights(self, regions_by_view): - for d in regions_by_view.values(): - view = d['view'] - for scope, regions in d['regions'].items(): - # Is DRAW_EMPTY necessary? Is it possible to have a zero-length span? - self._add_regions(view, 'rust-%s' % scope, regions, scope, '', - sublime.DRAW_NO_FILL|sublime.DRAW_EMPTY) + def on_json(self, proc, obj): + messages.add_rust_messages(self.window, self.cwd, obj, + self.current_target_src, msg_cb=None) + if messages.has_message_for_path(self.window, + self.triggered_file_name): + self.this_view_found = True - def _add_phantom(self, view, key, region, content, layout, on_navigate): - """Pulled out to assist testing.""" - view.add_phantom( - key, region, - content, - layout, - on_navigate - ) + def on_finished(self, proc, rc): + pass - def _add_regions(self, view, key, regions, scope, icon, flags): - """Pulled out to assist testing.""" - view.add_regions(key, regions, scope, icon, flags) + def on_terminated(self, proc): + pass diff --git a/cargo_build.py b/cargo_build.py new file mode 100644 index 00000000..26234bb2 --- /dev/null +++ b/cargo_build.py @@ -0,0 +1,251 @@ +"""Sublime commands for the cargo build system.""" + +import functools +import sublime +import sublime_plugin +from .rust import (rust_proc, rust_thread, opanel, util, messages, + cargo_settings, target_detect) +from .rust.cargo_config import * + +# Maps command to an input string. Used to pre-populate the input panel with +# the last entered value. +LAST_EXTRA_ARGS = {} + + +class CargoExecCommand(sublime_plugin.WindowCommand): + + """cargo_exec Sublime command. + + This takes the following arguments: + + - `command`: The command to run. Commands are defined in the + `cargo_settings` module. You can define your own custom command by + passing in `command_info`. + - `command_info`: Dictionary of values the defines how the cargo command + is constructed. See `command_settings.CARGO_COMMANDS`. + - `settings`: Dictionary of settings overriding anything set in the + Sublime project settings (see `command_settings` module). + """ + + # The combined command info from `command_settings` and whatever the user + # passed in. + command_info = None + # Dictionary of initial settings passed in by the user. + initial_settings = None + # CargoSettings instance. + settings = None + # Directory where to run the command. + working_dir = None + # Path used for the settings key. This is typically `working_dir` except + # for `cargo script`, in which case it is the path to the .rs source file. + settings_path = None + + def run(self, command=None, command_info=None, settings=None): + if command is None: + return self.window.run_command('build', {'select': True}) + self.initial_settings = settings if settings else {} + self.settings = cargo_settings.CargoSettings(self.window) + self.settings.load() + if command == 'auto': + self._detect_auto_build() + else: + self.command = command + self.command_info = cargo_settings.CARGO_COMMANDS\ + .get(command, {}).copy() + if command_info: + self.command_info.update(command_info) + self._determine_working_path(self._run_check_for_args) + + def _detect_auto_build(self): + """Handle the "auto" build variant, which automatically picks a build + command based on the current view.""" + if not util.active_view_is_rust(): + sublime.error_message(util.multiline_fix(""" + Error: Could not determine what to build. + + Open a Rust source file as the active Sublime view. + """)) + return + td = target_detect.TargetDetector(self.window) + view = self.window.active_view() + targets = td.determine_targets(view.file_name()) + if len(targets) == 0: + sublime.error_message(util.multiline_fix(""" + Error: Could not determine what to build. + + Try using one of the explicit build variants. + """)) + return + + elif len(targets) == 1: + self._auto_choice_made(targets, 0) + + else: + # Can't determine a single target, let the user choose one. + display_items = [' '.join(x[1]) for x in targets] + on_done = functools.partial(self._auto_choice_made, targets) + self.window.show_quick_panel(display_items, on_done) + + def _auto_choice_made(self, targets, index): + if index != -1: + src_path, cmd_line = targets[index] + actions = { + '--bin': 'run', + '--example': 'run', + '--lib': 'build', + '--bench': 'bench', + '--test': 'test', + } + cmd = actions[cmd_line[0]] + self.initial_settings['target'] = ' '.join(cmd_line) + self.run(command=cmd, settings=self.initial_settings) + + def _determine_working_path(self, on_done): + """Determine where Cargo should be run. + + This may trigger some Sublime user interaction if necessary. + """ + working_dir = self.initial_settings.get('working_dir') + if working_dir: + self.working_dir = working_dir + self.settings_path = working_dir + return on_done() + + script_path = self.initial_settings.get('script_path') + if script_path: + self.working_dir = os.path.dirname(script_path) + self.settings_path = script_path + return on_done() + + default_path = self.settings.get('default_path') + if default_path: + self.settings_path = default_path + if os.path.isfile(default_path): + self.working_dir = os.path.dirname(default_path) + else: + self.working_dir = default_path + return on_done() + + if self.command_info.get('requires_manifest', True): + cmd = CargoConfigPackage(self.window) + cmd.run(functools.partial(self._on_manifest_choice, on_done)) + else: + # For now, assume you need a Rust file if not needing a manifest + # (for `cargo script`). + view = self.window.active_view() + if util.active_view_is_rust(view=view): + self.settings_path = view.file_name() + self.working_dir = os.path.dirname(self.settings_path) + return on_done() + else: + sublime.error_message(util.multiline_fix(""" + Error: Could not determine what Rust source file to use. + + Open a Rust source file as the active Sublime view.""")) + return + + def _on_manifest_choice(self, on_done, package_path): + self.settings_path = package_path + self.working_dir = package_path + on_done() + + def _run_check_for_args(self): + if self.command_info.get('wants_run_args', False) and \ + not self.initial_settings.get('extra_run_args'): + self.window.show_input_panel('Enter extra args:', + LAST_EXTRA_ARGS.get(self.command, ''), + self._on_extra_args, None, None) + else: + self._run() + + def _on_extra_args(self, args): + LAST_EXTRA_ARGS[self.command_info['command']] = args + self.initial_settings['extra_run_args'] = args + self._run() + + def _run(self): + t = CargoExecThread(self.window, self.settings, + self.command_info, self.initial_settings, + self.settings_path, self.working_dir) + t.start() + + +class CargoExecThread(rust_thread.RustThread): + + silently_interruptible = False + name = 'Cargo Exec' + + def __init__(self, window, settings, command_info, initial_settings, + settings_path, working_dir): + super(CargoExecThread, self).__init__(window) + self.settings = settings + self.command_info = command_info + self.initial_settings = initial_settings + self.settings_path = settings_path + self.working_dir = working_dir + + def run(self): + cmd = self.settings.get_command(self.command_info, + self.settings_path, + self.initial_settings) + if not cmd: + return + messages.clear_messages(self.window) + p = rust_proc.RustProc() + listener = opanel.OutputListener(self.window, self.working_dir) + decode_json = util.get_setting('show_errors_inline', True) and \ + self.command_info.get('allows_json', False) + try: + p.run(self.window, cmd['command'], + self.working_dir, listener, + env=cmd['env'], + decode_json=decode_json, + json_stop_pattern=self.command_info.get('json_stop_pattern')) + p.wait() + except rust_proc.ProcessTerminatedError: + return + + +# This is used by the test code. Due to the async nature of the on_load event, +# it can cause problems with the rapid loading of views. +ON_LOAD_MESSAGES_ENABLED = True + + +class CargoEventListener(sublime_plugin.EventListener): + + """Every time a new file is loaded, check if is a Rust file with messages, + and if so, display the messages. + """ + + def on_load(self, view): + if ON_LOAD_MESSAGES_ENABLED and util.active_view_is_rust(view=view): + # For some reason, view.window() returns None here. + # Use set_timeout to give it time to attach to a window. + sublime.set_timeout( + lambda: messages.show_messages_for_view(view), 1) + + +class RustNextMessageCommand(sublime_plugin.WindowCommand): + + def run(self, levels='all'): + messages.show_next_message(self.window, levels) + + +class RustPrevMessageCommand(sublime_plugin.WindowCommand): + + def run(self, levels='all'): + messages.show_prev_message(self.window, levels) + + +class RustCancelCommand(sublime_plugin.WindowCommand): + + def run(self): + try: + t = rust_thread.THREADS[self.window.id()] + except KeyError: + pass + else: + t.terminate() + # Also call Sublime's cancel command, in case the user is using a + # normal Sublime build. + self.window.run_command('cancel_build') diff --git a/dependencies.json b/dependencies.json new file mode 100644 index 00000000..0c350320 --- /dev/null +++ b/dependencies.json @@ -0,0 +1,7 @@ +{ + "*": { + "*": [ + "shellenv" + ] + } +} diff --git a/docs/build.md b/docs/build.md new file mode 100644 index 00000000..976bea56 --- /dev/null +++ b/docs/build.md @@ -0,0 +1,204 @@ +# Cargo Build System + +The Rust Enhanced build system provides an interface for running Cargo. It can +show inline warning and error messages. It also has a variety of ways of +configuring options for how Cargo is run. + +## Usage + +When Sublime is set to use "Automatic" build system detection, it will choose +the build system based on the syntax of the currently active view. If you +want to ensure the Rust Enhanced build system is used regardless of which file +is open, choose it via `Tools > Build System > RustEnhanced`. + +The basic Sublime commands available are: + +Command | Keyboard | Menu | Description +------- | -------- | ---- | ----------- +Build | Ctrl-B / ⌘-B | Tools > Build | Runs the currently active build variant. +Build With... | Ctrl-Shift-B / ⌘-Shift-B | Tools > Build With... | Choose the build variant. +Cancel Build | Ctrl-Break / Ctrl-C | Tools > Cancel Build | Abort the currently running build. +Show Build Results | | Tools > Build Results > Show Build Results | Opens the output panel with build results. +Next Result | F4 | Tools > Build Results > Next Result | Go to the next warning/error message. +Previous Result | Shift-F4 | Tools > Build Results > Previous Result | Go to the previous warning/error message. + +## Build Variants + +When you select the RustEnhanced build system in Sublime, there are a few +variants that you can select with Tools > Build With... +(Ctrl-Shift-B / ⌘-Shift-B). They are: + +Variant | Command | Description +------- | ------- | ----------- +(Default) | cargo build | Builds the project. +Automatic | | Automatically detect the command to run based on the currently active view (tests do `test`, binaries and examples do `run`, libraries do `build`, benches do `bench`). +Run | cargo run | Runs the binary. +Run (with args)... | cargo run -⁠-⁠ *args* | Runs the binary with optional arguments you specify. +Test | cargo test | Runs unit and integration tests. +Test (with args)... | cargo test -⁠-⁠ *args* | Runs the test with optional arguments you specify. +Bench | cargo bench | Runs benchmarks. +Clean | cargo clean | Removes all built files. +Document | cargo doc | Builds package documentation. +Clippy | cargo clippy | Runs [Clippy](https://github.com/Manishearth/rust-clippy). Clippy must be installed, and currently requires the nightly toolchain. +Script | cargo script $path | Runs [Cargo Script](https://github.com/DanielKeep/cargo-script). Cargo Script must be installed. This is an addon that allows you to run a Rust source file like a script (without a Cargo.toml manifest). + +## General Settings + +General settings (see [Settings](../README.md#settings)) for how messages are displayed are: + +| Setting | Default | Description | +| :------ | :------ | :---------- | +| `rust_syntax_hide_warnings` | `false` | If true, will not display warning messages. | +| `rust_syntax_error_color` | `"#F00"` | Color of error messages. | +| `rust_syntax_warning_color` | `"#FF0"` | Color of warning messages. | +| `rust_phantom_style` | `"normal"` | How to display inline messages. Either `normal` or `none`. | +| `rust_region_style` | `"outline"` | How to highlight messages. Either `outline` or `none`. | + +It also supports Sublime's build settings: + +| Setting | Default | Description | +| :------ | :------ | :---------- | +| `show_errors_inline` | `true` | If true, messages are displayed in line using Sublime's phantoms. If false, messages are only displayed in the output panel. | +| `show_panel_on_build` | `true` | If true, an output panel is displayed at the bottom of the window showing the compiler output. | + +## Cargo Project Settings + +You can customize how Cargo is run with settings stored in your +`sublime-project` file. Settings can be applied per-target (`--lib`, +`--example foo`, etc.), for specific variants ("Build", "Run", "Test", etc.), +or globally. + +### Configure Command + +To help you configure the Cargo build settings, run the `Rust: Configure Cargo +Build` command from Sublime's Command Palette (Ctrl-Shift-P / ⌘-Shift-P). +This will ask you a series of questions for the setting to configure. The +first choice is the setting: + +Setting | Description +------- | ----------- +Target | Specify an explicit target (`--bin`, `--lib`, `--example`, etc.). The "Automatic Detection" option will attempt to determine which target to use based on the current active view in Sublime (a test file will use `--test` or a binary will use `--bin`, etc.). +Profile | Determine whether or not the `--release` flag is used. +Target Triple | The `--target` option to specify a target triple (such as `x86_64-apple-darwin`). +Toolchain | Set the Rust toolchain to use (`nightly`, `beta`, etc.). +Features | Set the Cargo build features to use. +Environment Variables | Specify additional environment variables to set. +Extra Cargo Arguments | Extra arguments to include in the command line. +Default Package/Path | The default package to build, useful if you have a workspace with multiple Cargo packages. See `Multiple Cargo Projects` below. + +If you have multiple Cargo packages in your workspace, it will ask for the package to configure. + +A setting can be global (for all build invocations), for a specific build variant (such as "Test"), or for a specific build target (such as `--example myprog`). + +Caution: If you have not created a `sublime-project` file, then any changes +you make will be lost if you close the Sublime window. + +### Settings + +Settings are stored in your `sublime-project` file under `"cargo_build"` in +the `"settings"` key. Settings are organized per Cargo package in the +`"paths"` object. Paths can either be directories to a Cargo package, or the +path to a Rust source file (when used with `cargo script`). The top-level +keys for each package are: + +Key | Description +--- | ----------- +`"defaults"` | Default settings used if not set per target or variant. +`"targets"` | Settings per target (such as `"--lib"` or `"--bin foo"`). +`"variants"` | Settings per build variant. + +An example of a `sublime-project` file: + +```json +{ + "folders": [ + { "path": "." } + ], + "settings": { + "cargo_build": { + "paths": { + "/path/to/package": { + "defaults": { + "release": true + }, + "targets": { + "--example ex1": { + "extra_run_args": "-f file" + } + }, + "variants": { + "bench": { + "toolchain": "nightly" + }, + "clippy": { + "toolchain": "nightly" + } + } + } + }, + "default_path": "/path/to/package" + } + } +} +``` + +The available settings are: + +Setting Name | Description +------------ | ----------- +`target` | The Cargo target (such as `"--bin myprog"`). Applies to `variants` only. Can be `"auto"` (see "Automatic Detection" above). +`toolchain` | The Rust toolchain to use (such as `nightly` or `beta`). +`target_triple` | If set, uses the `--target` flag with the given value. +`release` | If true, uses the `--release` flag. +`features` | A string with a space separated list of features to pass to the `--features` flag. Set to "ALL" to pass the `--all-features` flag. +`extra_cargo_args` | String of extra arguments passed to Cargo (before the `--` flags separator). +`extra_run_args` | String of extra arguments passed to Cargo (after the `--` flags separator). +`env` | Object of environment variables to add when running Cargo. +`working_dir` | The directory where to run Cargo. If not specified, uses the value from `default_path`, otherwise attempts to detect from the active view, or displays a panel to choose a Cargo package. +`script_path` | Path to a `.rs` script, used by `cargo script` if you want to hard-code a specific script to run. +`no_default_features` | If True, sets the `--no-default-features` flag. + +The extra args settings support standard Sublime variable expansion (see +[Build System +Variables](http://docs.sublimetext.info/en/latest/reference/build_systems/configuration.html#build-system-variables)) + +## Multiple Cargo Projects (Advanced) + +You can have multiple Cargo projects in a single Sublime project (such as when +using Cargo workspaces, or if you simply have multiple projects in different +folders). + +If you have multiple Cargo projects in your Sublime window, the build system +will use the currently active view to attempt to determine which project to +build. Otherwise it will show an input panel to select a package. + +You can set the `default_path` setting to always use a specific path. It is specified at the same level as `paths` (see example above). This can be set using the `Rust: Configure Cargo Build` command. + +## Custom Build Variants (Advanced) + +You can define your own build system that takes advantage of the Cargo +settings. This is useful if you want to quickly switch between different +configurations, or to add support for Cargo commands that are not already included. + +The build variants are stored in your `.sublime-project` file. To assist you +in configuring a build variant, there is a Sublime command called `"Rust: +Create New Cargo Build Variant"` which you can access from the Command +Palette. It will ask a series of questions, and when it is done it will +automatically add the new build variant to your `.sublime-project` file. Then +use the "Build With..." command (Ctrl-Shift-B / ⌘-Shift-B) to select and +execute your new variant. The command will also copy over the stock build +variants so you do not need to switch between build systems. + +You can manually edit your `.sublime-project` file to change the settings. The settings described above are under the `"settings"` key. Additionally, there is a `"command_info"` key which describes the features the command supports. The available values are: + +Setting Name | Default | Description +------------ | ------- | ----------- +`allows_target` | False | If True, the command accepts cargo filters for determining which target to build (`--lib`, `--bin foo`, `--example bar`, etc.). Can also be a sequence of strings like `["bin", "example"]` to specify a subset of targets it supports. +`allows_target_triple` | False | If True, the command accepts triples like `--target x86_64-apple-darwin`. +`allows_release` | False | If True, allows `--release` flag. +`allows_features` | False | If True, allows feature flags. +`allows_json` | False | If True, allows `--message-format=json` flag. +`json_stop_pattern` | None | A regular expression matched against Cargo's output to detect when it should stop looking for JSON messages (used by `cargo run` to stop looking for JSON messages once compilation is finished). +`requires_manifest` | True | If True, the command must be run in a directory with a `Cargo.toml` manifest. +`requires_view_path` | False | If True, then the active view must be a Rust source file, and the path to that file will be passed into Cargo (used mainly by `cargo script`). +`wants_run_args` | False | If True, it will ask for extra args to pass to the executable (after the `--` flag separator). diff --git a/rust/__init__.py b/rust/__init__.py new file mode 100644 index 00000000..01edd27e --- /dev/null +++ b/rust/__init__.py @@ -0,0 +1 @@ +from . import semver diff --git a/rust/cargo_config.py b/rust/cargo_config.py new file mode 100644 index 00000000..a24075e8 --- /dev/null +++ b/rust/cargo_config.py @@ -0,0 +1,931 @@ +"""Sublime commands for configuring Cargo execution. + +See `cargo_settings` for more details on how settings work. +""" + +import getpass +import os +import re +import sublime +import sublime_plugin +from .cargo_settings import CargoSettings, CARGO_COMMANDS +from .util import index_with +from . import rust_proc, util + +# Keep track of recent choices to set the default value. +RECENT_CHOICES = {} + + +class CancelCommandError(Exception): + """Raised when the command should stop.""" + + +class CargoConfigBase(sublime_plugin.WindowCommand): + + """Base class for cargo config commands. + + This implements a simple interactive UI by asking the user a series of + questions using the Sublime quick panels for selecting choices. Subclasses + set the `sequence` class variable to the list of questions they want to + ask. The choices for each question are produced by methods starting with + 'items_'+name. These methods should return a dictionary with: + + - `items`: List of choices. Each element should be a tuple + `(display_string, value)`. + - `default`: The default value (optional). + - `skip_if_one`: Skip this question if there is only 1 item. + - `caption`: Instead of `items`, this is a string displayed with + `show_input_panel` to allow the user to enter arbitrary text. + + `items_` methods can also just return the 'items' list. + + An optional method `selected_`+name will be called when a choice is made. + This method can return a list of questions to be asked immediately. + + The `done` method is called once all questions have been asked. + + Callers are allowed to pass in values instead of using the interactive UI. + This is probably only useful for the test code, but in theory you could + define key bindings that perform certain actions. + """ + + # CargoSettings object. + settings = None + + # Dictionary of choices passed into the command, instead of using + # interactive UI. + input = None + + # Sequence of questions to ask. + sequence = None + + # Current question being asked. + sequence_index = 0 + + # Dictionary of selections made during the interactive process. + choices = None + + # If True, the command wants the 'package' choice to fetch metadata from + # Cargo. + package_wants_metadata = True + + # If True, the 'package' choice will automatically use the manifest + # from the active view if it is available. + package_allows_active_view_shortcut = True + + # This is a dictionary populated by the `items_package` method. + # Key is the path to a package, the value is the metadata from Cargo. + # This is used by other questions (like `items_target`) to get more + # information about the chosen package. + packages = None + + # Name of what is being configured. + config_name = "" + + def run(self, **kwargs): + self.choices = {} + self.sequence_index = 0 + # Copy, since WindowCommand reuses objects. + self._sequence = self.sequence[:] + self.input = kwargs + self.settings = CargoSettings(self.window) + self.settings.load() + self.show_next_question() + + def done(self): + """Called once all questions have been asked. Subclasses must + implement this.""" + raise NotImplementedError() + + def show_next_question(self): + if self.sequence_index < len(self._sequence): + q = self._sequence[self.sequence_index] + self.sequence_index += 1 + else: + self.done() + return + + try: + item_info = getattr(self, 'items_' + q)() + except CancelCommandError: + return + if not isinstance(item_info, dict): + item_info = {'items': item_info} + + f_selected = getattr(self, 'selected_' + q, None) + + # Called with the result of what the user selected. + def make_choice(value): + self.choices[q] = value + if f_selected: + try: + next = f_selected(value) + except CancelCommandError: + return + if next: + i = self.sequence_index + self._sequence[i:i] = next + self.show_next_question() + + if q in self.input: + make_choice(self.input[q]) + else: + if 'items' in item_info: + def wrapper(index): + if index != -1: + chosen = item_info['items'][index][1] + RECENT_CHOICES[q] = chosen + make_choice(chosen) + + items = item_info['items'] + if item_info.get('skip_if_one', False) and len(items) == 1: + wrapper(0) + else: + # If the user manually edits the config and enters custom + # values then it won't show up in the list (because it is + # not an exact match). Add it so that it is a valid + # choice (assuming the user entered a valid value). + if 'default' in item_info: + default_index = index_with(items, + lambda x: x[1] == item_info['default']) + if default_index == -1: + items.append((item_info['default'], + item_info['default'])) + # Determine the default selection. + # Use the default provided by the items_ method, else + # use the most recently used value. + default = index_with(items, + lambda x: x[1] == item_info.get('default', + RECENT_CHOICES.get(q, '_NO_DEFAULT_SENTINEL_'))) + display_items = [x[0] for x in items] + self.window.show_quick_panel(display_items, wrapper, 0, + default) + elif 'caption' in item_info: + self.window.show_input_panel(item_info['caption'], + item_info.get('default', ''), + make_choice, None, None) + else: + raise ValueError(item_info) + + def items_package(self): + view = self.window.active_view() + if self.package_allows_active_view_shortcut and view.file_name(): + # If there is a manifest under the current view, use that by + # default. + manifest_dir = util.find_cargo_manifest(view.file_name()) + if manifest_dir: + if self.package_wants_metadata: + metadata = get_cargo_metadata(self.window, manifest_dir) + if metadata: + for package in metadata['packages']: + package_dir = os.path.dirname( + package['manifest_path']) + if package_dir == manifest_dir: + self.packages = { + manifest_dir: package + } + return { + 'items': [(manifest_dir, manifest_dir)], + 'skip_if_one': True, + } + + # Otherwise, hunt for all manifest files and show a list. + folders = self.window.folders() + self.packages = {} + for folder in folders: + folder_parent = os.path.dirname(folder) + for dirpath, dirs, files, in os.walk(folder): + for exclude in ('.git', '.svn'): + if exclude in dirs: + dirs.remove(exclude) + if 'Cargo.toml' in files: + metadata = get_cargo_metadata(self.window, dirpath) + if metadata: + for package in metadata['packages']: + manifest_dir = os.path.dirname(package['manifest_path']) + rel = os.path.relpath(manifest_dir, folder_parent) + package['sublime_relative'] = rel + if manifest_dir not in self.packages: + self.packages[manifest_dir] = package + else: + # Manifest load failure, let it slide. + print('Failed to load Cargo manifest in %r' % dirpath) + + if len(self.packages) == 0: + sublime.error_message(util.multiline_fix(""" + Error: Cannot determine Rust package to use. + + Open a Rust file to determine which package to use, or add a folder with a Cargo.toml file to your Sublime project.""")) + raise CancelCommandError + + def display_name(package): + return ['Package: %s' % (package['name'],), + package['sublime_relative']] + + items = [(display_name(package), path) + for path, package in self.packages.items()] + items.sort(key=lambda x: x[0]) + return { + 'items': items, + 'skip_if_one': True, + } + + def items_target(self): + # Group by kind. + kinds = {} + package_path = self.choices['package'] + for target in self.packages[package_path]['targets']: + # AFAIK, when there are multiple "kind" values, this only happens + # when there are multiple library kinds. + kind = target['kind'][0] + if kind in ('lib', 'rlib', 'dylib', 'cdylib', 'staticlib', 'proc-macro'): + kinds.setdefault('lib', []).append(('Lib', '--lib')) + elif kind in ('bin', 'test', 'example', 'bench'): + text = '%s: %s' % (kind.capitalize(), target['name']) + arg = '--%s %s' % (kind, target['name']) + kinds.setdefault(kind, []).append((text, arg)) + elif kind in ('custom-build',): + # build.rs, can't be built explicitly. + pass + else: + print('Rust: Unsupported target found: %s' % kind) + items = [('All Targets', None)] + for kind, values in kinds.items(): + allowed = True + if self.choices.get('variant', None): + cmd = CARGO_COMMANDS[self.choices['variant']] + target_types = cmd['allows_target'] + if target_types is not True: + allowed = kind in target_types + if allowed: + items.extend(values) + return items + + def items_variant(self): + result = [] + for key, info in CARGO_COMMANDS.items(): + if self.filter_variant(info): + result.append((info['name'], key)) + result.sort() + return result + + def filter_variant(self, x): + """Subclasses override this to filter variants from the variant + list.""" + # no-trans is a special, hidden, internal command. In theory, a user + # can configure it, but since it is deprecated, just hide it for now. + return x['name'] != 'no-trans' + + def items_which(self): + # This is a bit of a hack so that when called programmatically you + # don't have to specify 'which'. + if 'which' not in self.input: + if 'variant' in self.input: + self.input['which'] = 'variant' + elif 'target' in self.input: + self.input['which'] = 'target' + + return [ + (['Configure %s for all build commands.' % self.config_name, + ''], 'default'), + (['Configure %s for a Build Variant.' % self.config_name, + 'cargo build, cargo run, cargo test, etc.'], 'variant'), + (['Configure %s for a Target.' % self.config_name, + '--bin, --example, --test, etc.'], 'target') + ] + + def selected_which(self, which): + if which == 'default': + self.choices['target'] = None + return + elif which == 'variant': + return ['variant'] + elif which == 'target': + return ['target'] + else: + raise AssertionError(which) + + def get_setting(self, name, default=None): + """Retrieve a setting, honoring the "which" selection.""" + if self.choices['which'] == 'variant': + return self.settings.get_with_variant(self.choices['package'], + self.choices['variant'], + name, default=default) + elif self.choices['which'] in ('default', 'target'): + return self.settings.get_with_target(self.choices['package'], + self.choices['target'], + name, default=default) + else: + raise AssertionError(self.choices['which']) + + def set_setting(self, name, value): + """Set a setting, honoring the "which" selection.""" + if self.choices['which'] == 'variant': + self.settings.set_with_variant(self.choices['package'], + self.choices['variant'], + name, + value) + elif self.choices['which'] in ('default', 'target'): + self.settings.set_with_target(self.choices['package'], + self.choices['target'], + name, + value) + else: + raise AssertionError(self.choices['which']) + + +class CargoConfigPackage(CargoConfigBase): + + """This is a fake command used by cargo_build to reuse the code to choose + a Cargo package.""" + + config_name = 'Package' + sequence = ['package'] + package_wants_metadata = False + + def run(self, on_done): + self._on_done = on_done + super(CargoConfigPackage, self).run() + + def done(self): + self._on_done(self.choices['package']) + + +class CargoSetProfile(CargoConfigBase): + + config_name = 'Profile' + sequence = ['package', 'which', 'profile'] + + def items_profile(self): + default = self.get_setting('release', False) + if default: + default = 'release' + else: + default = 'dev' + items = [('Dev', 'dev'), + ('Release', 'release')] + return {'items': items, + 'default': default} + + def done(self): + self.set_setting('release', self.choices['profile'] == 'release') + + +class CargoSetTarget(CargoConfigBase): + + config_name = 'Target' + sequence = ['package', 'variant', 'target'] + + def filter_variant(self, info): + return super(CargoSetTarget, self).filter_variant(info) and \ + info.get('allows_target', False) + + def items_target(self): + items = super(CargoSetTarget, self).items_target() + items.insert(1, ('Automatic Detection', 'auto')) + default = self.settings.get_with_variant(self.choices['package'], + self.choices['variant'], + 'target') + return { + 'items': items, + 'default': default + } + + def done(self): + self.settings.set_with_variant(self.choices['package'], + self.choices['variant'], + 'target', + self.choices['target']) + + +class CargoSetTriple(CargoConfigBase): + + config_name = 'Triple' + sequence = ['package', 'which', 'target_triple'] + + def items_target_triple(self): + # Could check if rustup is not installed, to run + # "rustc --print target-list", but that does not tell + # us which targets are installed. + triples = rust_proc.check_output(self.window, + 'rustup target list'.split(), self.choices['package'])\ + .splitlines() + current = self.get_setting('target_triple') + result = [('Use Default', None)] + for triple in triples: + if triple.endswith(' (default)'): + actual_triple = triple[:-10] + result.append((actual_triple, actual_triple)) + elif triple.endswith(' (installed)'): + actual_triple = triple[:-12] + result.append((actual_triple, actual_triple)) + else: + actual_triple = None + # Don't bother listing uninstalled targets. + return { + 'items': result, + 'default': current + } + + def done(self): + self.set_setting('target_triple', self.choices['target_triple']) + + +class CargoSetToolchain(CargoConfigBase): + + config_name = 'Toolchain' + sequence = ['package', 'which', 'toolchain'] + + def items_toolchain(self): + items = [('Use Default Toolchain', None)] + toolchains = self._toolchain_list() + current = self.get_setting('toolchain') + items.extend([(x, x) for x in toolchains]) + return { + 'items': items, + 'default': current + } + + def _toolchain_list(self): + output = rust_proc.check_output(self.window, + 'rustup toolchain list'.split(), + self.choices['package']) + output = output.splitlines() + system_default = index_with(output, lambda x: x.endswith(' (default)')) + if system_default != -1: + output[system_default] = output[system_default][:-10] + # Rustup supports some shorthand of either `channel` or `channel-date` + # without the trailing target info. + # + # Complete list of available toolchains is available at: + # https://static.rust-lang.org/dist/index.html + # (See https://github.com/rust-lang-nursery/rustup.rs/issues/215) + shorthands = [] + channels = ['nightly', 'beta', 'stable', '\d\.\d{1,2}\.\d'] + pattern = '(%s)(?:-(\d{4}-\d{2}-\d{2}))?(?:-(.*))' % '|'.join(channels) + for toolchain in output: + m = re.match(pattern, toolchain) + # Should always match. + if m: + channel = m.group(1) + date = m.group(2) + if date: + shorthand = '%s-%s' % (channel, date) + else: + shorthand = channel + if shorthand not in shorthands: + shorthands.append(shorthand) + result = shorthands + output + result.sort() + return result + + def done(self): + self.set_setting('toolchain', self.choices['toolchain']) + + +class CargoSetFeatures(CargoConfigBase): + + config_name = 'Features' + sequence = ['package', 'which', 'no_default_features', 'features'] + + def items_no_default_features(self): + current = self.get_setting('no_default_features', False) + items = [ + ('Include default features.', False), + ('Do not include default features.', True) + ] + return { + 'items': items, + 'default': current, + } + + def items_features(self): + features = self.get_setting('features', None) + if features is None: + # Detect available features from the manifest. + package_path = self.choices['package'] + available_features = self.packages[package_path].get('features', {}) + items = list(available_features.keys()) + # Remove the "default" entry. + if 'default' in items: + del items[items.index('default')] + if not self.choices['no_default_features']: + # Don't show default features, (they are already included). + for ft in available_features['default']: + if ft in items: + del items[items.index(ft)] + features = ' '.join(items) + return { + 'caption': 'Choose features (space separated, use "ALL" to use all features)', + 'default': features, + } + + def done(self): + self.set_setting('no_default_features', + self.choices['no_default_features']) + self.set_setting('features', self.choices['features']) + + +class CargoSetDefaultPath(CargoConfigBase): + + config_name = 'Default Path' + sequence = ['package'] + package_allows_active_view_shortcut = False + + def items_package(self): + result = super(CargoSetDefaultPath, self).items_package() + items = result['items'] + items.insert(0, (['No Default', + 'Build will attempt to detect from the current view, or pop up a selection panel.'], + None)) + result['default'] = self.settings.get('default_path') + return result + + def done(self): + self.settings.set('default_path', self.choices['package']) + + +class CargoSetEnvironmentEditor(CargoConfigBase): + + config_name = 'Environment' + sequence = ['package', 'which'] + + def done(self): + view = self.window.new_file() + view.set_scratch(True) + default = self.get_setting('env') + template = util.multiline_fix(""" + // Enter environment variables here in JSON syntax. + // Close this view when done to commit the settings. + """) + if 'contents' in self.input: + # Used when parsing fails to attempt to edit again. + template = self.input['contents'] + elif default: + template += sublime.encode_value(default, True) + else: + template += util.multiline_fix(""" + { + // "RUST_BACKTRACE": 1 + } + """) + # Unfortunately Sublime indents on 'insert' + view.settings().set('auto_indent', False) + view.run_command('insert', {'characters': template}) + view.settings().set('auto_indent', True) + view.set_syntax_file('Packages/JavaScript/JSON.sublime-syntax') + view.settings().set('rust_environment_editor', True) + view.settings().set('rust_environment_editor_settings', { + 'package': self.choices['package'], + 'which': self.choices['which'], + 'variant': self.choices.get('variant'), + 'target': self.choices.get('target'), + }) + + +class CargoSetEnvironment(CargoConfigBase): + + """Special command that should not be run interactively. Used by the + on-close callback to actually set the environment.""" + + config_name = 'Environment' + sequence = ['package', 'which', 'env'] + + def items_env(self): + return [] + + def done(self): + self.set_setting('env', self.choices['env']) + + +class EnvironmentSaveHandler(sublime_plugin.EventListener): + + """Handler for when the view is closed on the environment editor.""" + + def on_pre_close(self, view): + if not view.settings().get('rust_environment_editor'): + return + settings = view.settings().get('rust_environment_editor_settings') + + contents = view.substr(sublime.Region(0, view.size())) + try: + result = sublime.decode_value(contents) + except: + sublime.error_message('Value was not valid JSON, try again.') + view.window().run_command('cargo_set_environment_editor', { + 'package': settings['package'], + 'which': settings['which'], + 'variant': settings['variant'], + 'target': settings['target'], + 'contents': contents, + }) + return + + view.window().run_command('cargo_set_environment', { + 'package': settings['package'], + 'which': settings['which'], + 'variant': settings['variant'], + 'target': settings['target'], + 'env': result, + }) + + +class CargoSetArguments(CargoConfigBase): + + config_name = 'Extra Command-line Arguments' + sequence = ['package', 'which', 'before_after', 'args'] + + def items_before_after(self): + return [ + ('Enter extra Cargo arguments (before -- separator)', 'extra_cargo_args'), + ('Enter extra Cargo arguments (after -- separator)', 'extra_run_args'), + ] + + def items_args(self): + current = self.get_setting(self.choices['before_after'], '') + return { + 'caption': 'Enter the extra Cargo args', + 'default': current, + } + + def done(self): + self.set_setting(self.choices['before_after'], + self.choices['args']) + + +class CargoConfigure(CargoConfigBase): + + sequence = ['config_option'] + + def items_config_option(self): + return [ + (['Set Target', '--bin, --lib, --example, etc.'], 'target'), + (['Set Profile', '--release flag'], 'profile'), + (['Set Target Triple', '--target flag'], 'triple'), + (['Set Rust Toolchain', 'nightly vs stable, etc.'], 'toolchain'), + (['Set Features', 'Cargo build features with --features'], 'features'), + (['Set Environment Variables', ''], 'environment'), + (['Set Extra Cargo Arguments', ''], 'args'), + (['Set Default Package/Path', ''], 'package'), + ] + + def selected_config_option(self, which): + if which == 'target': + CargoSetTarget(self.window).run() + elif which == 'profile': + CargoSetProfile(self.window).run() + elif which == 'triple': + CargoSetTriple(self.window).run() + elif which == 'toolchain': + CargoSetToolchain(self.window).run() + elif which == 'features': + CargoSetFeatures(self.window).run() + elif which == 'environment': + CargoSetEnvironmentEditor(self.window).run() + elif which == 'args': + CargoSetArguments(self.window).run() + elif which == 'package': + CargoSetDefaultPath(self.window).run() + else: + raise AssertionError(which) + + def selected_which(self, which): + if which == 'variant': + return ['package', 'variant', 'toolchain'] + elif which == 'target': + return ['package', 'target', 'toolchain'] + else: + raise AssertionError(which) + + def done(self): + pass + + +class CargoCreateNewBuild(CargoConfigBase): + + """Command to create a new build variant, stored in the user's + `.sublime-project` file.""" + + config_name = 'New Build' + sequence = ['command'] + + def items_command(self): + if self.window.project_data() is None: + sublime.error_message(util.multiline_fix(""" + Error: This command requires a .sublime-project file. + + Save your Sublime project and try again.""")) + raise CancelCommandError + result = [] + for key, info in CARGO_COMMANDS.items(): + if self.filter_variant(info): + result.append((info['name'], key)) + result.sort() + result.append(('New Command', 'NEW_COMMAND')) + return result + + def selected_command(self, command): + if command == 'NEW_COMMAND': + return ['new_command', 'allows_target', 'allows_target_triple', + 'allows_release', 'allows_features', 'allows_json', + 'requires_manifest', 'requires_view_path', 'wants_run_args', + 'name'] + else: + cinfo = CARGO_COMMANDS[command] + result = [] + if cinfo.get('requires_manifest', True): + result.append('package') + result.append('name') + return result + + def items_package(self): + result = super(CargoCreateNewBuild, self).items_package() + if len(result['items']) > 1: + result['items'].insert(0, (['Any Package', + 'This build variant is not tied to any particular Cargo package.'], + None)) + return result + + def selected_package(self, package): + if package: + cinfo = CARGO_COMMANDS[self.choices['command']] + if cinfo.get('allows_target', False): + return ['target'] + + def items_new_command(self): + return { + 'caption': 'Enter the Cargo subcommand to run:', + } + + def selected_new_command(self, command): + if not command: + sublime.error_message('Error: You must enter a command to run.') + raise CancelCommandError + + def items_allows_target(self): + return [ + ('Command %r supports Cargo filters (--bin, --example, etc.)' % ( + self.choices['new_command']), True), + ('Command %r does not support target filters' % ( + self.choices['new_command'],), False) + ] + + def items_allows_target_triple(self): + return [ + ('Command %r supports --target triple flag' % ( + self.choices['new_command']), True), + ('Command %r does not support --target' % ( + self.choices['new_command'],), False) + ] + + def items_allows_release(self): + return [ + ('Command %r supports --release flag' % ( + self.choices['new_command']), True), + ('Command %r does not support --release' % ( + self.choices['new_command'],), False) + ] + + def items_allows_features(self): + return [ + ('Command %r supports --features flag' % ( + self.choices['new_command']), True), + ('Command %r does not support --features' % ( + self.choices['new_command'],), False) + ] + + def items_allows_json(self): + return [ + ('Command %r supports --message-format=json flag' % ( + self.choices['new_command']), True), + ('Command %r does not support JSON' % ( + self.choices['new_command'],), False) + ] + + def items_requires_manifest(self): + return [ + ('Command %r requires a Cargo.toml manifest' % ( + self.choices['new_command']), True), + ('Command %r does not require a manifest' % ( + self.choices['new_command'],), False) + ] + + def items_requires_view_path(self): + return [ + ('Do not include view path', False), + ('Include path of active sublime view on command line', True), + ] + + def items_wants_run_args(self): + return [ + ('Do not ask for more arguments', False), + ('Ask for extra command-line arguments each time', True), + ] + + def items_name(self): + name = '%s\'s %s' % (getpass.getuser(), + self.choices.get('new_command', self.choices['command'])) + target = self.choices.get('target', None) + if target: + target = target.replace('-', '') + name = name + ' %s' % (target,) + return { + 'caption': 'Enter a name for your new Cargo build system:', + 'default': name + } + + def selected_name(self, name): + if not name: + sublime.error_message('Error: You must enter a name.') + raise CancelCommandError + + def done(self): + proj_data = self.window.project_data() + systems = proj_data.setdefault('build_systems', []) + for system_index, system in enumerate(systems): + if system.get('target') == 'cargo_exec': + break + else: + system = self._stock_build_system() + system['name'] = 'Custom Cargo Build' + system_index = len(systems) + systems.append(system) + variants = system.setdefault('variants', []) + + # Add the defaults to make it easier to manually edit. + settings = { + 'release': False, + 'target_triple': '', + 'toolchain': '', + 'target': '', + 'no_default_features': False, + 'features': '', + 'extra_cargo_args': '', + 'extra_run_args': '', + 'env': {}, + } + cinfo = {} + result = { + 'name': self.choices['name'], + 'target': 'cargo_exec', + 'command': self.choices.get('new_command', + self.choices['command']), + 'settings': settings, + 'command_info': cinfo, + } + if self.choices['command'] == 'NEW_COMMAND': + for key in ['allows_target', 'allows_target_triple', + 'allows_release', 'allows_features', 'allows_json', + 'requires_manifest', 'requires_view_path', + 'wants_run_args']: + cinfo[key] = self.choices[key] + requires_view_path = cinfo.get('requires_view_path') + else: + if 'target' in self.choices: + settings['target'] = self.choices['target'] + if 'package' in self.choices: + settings['working_dir'] = self.choices['package'] + requires_view_path = CARGO_COMMANDS[self.choices['command']]\ + .get('requires_view_path', False) + + if requires_view_path and util.active_view_is_rust(): + settings['script_path'] = self.window.active_view().file_name() + + variants.insert(0, result) + self.window.set_project_data(proj_data) + self.window.run_command('set_build_system', {'index': system_index}) + + def _stock_build_system(self): + pkg_name = __name__.split('.')[0] + resource = 'Packages/%s/RustEnhanced.sublime-build' % pkg_name + return sublime.decode_value(sublime.load_resource(resource)) + + +def get_cargo_metadata(window, cwd): + """Load Cargo metadata. + + :returns: None on failure, otherwise a dictionary from Cargo: + - packages: List of packages: + - name + - manifest_path: Path to Cargo.toml. + - targets: List of target dictionaries: + - name: Name of target. + - src_path: Path of top-level source file. May be a + relative path. + - kind: List of kinds. May contain multiple entries if + `crate-type` specifies multiple values in Cargo.toml. + Lots of different types of values: + - Libraries: 'lib', 'rlib', 'dylib', 'cdylib', 'staticlib', + 'proc-macro' + - Executables: 'bin', 'test', 'example', 'bench' + - build.rs: 'custom-build' + + :raises ProcessTermiantedError: Process was terminated by another thread. + """ + output = rust_proc.slurp_json(window, + 'cargo metadata --no-deps'.split(), + cwd=cwd) + if output: + return output[0] + else: + return None diff --git a/rust/cargo_settings.py b/rust/cargo_settings.py new file mode 100644 index 00000000..680394e2 --- /dev/null +++ b/rust/cargo_settings.py @@ -0,0 +1,336 @@ +"""Interface for accessing Cargo settings (stored in the sublime-project +file). + +These are used by the build system to determine how to run Cargo. + +Cargo Info +========== +When the `cargo_exec` Sublime command is run, you pass in a named command to +run. There is a default set of commands defined here in CARGO_COMMANDS (users +can create custom commands and pass them in with `command_info`). See +`docs/build.md` for a description of the different `command_info` values. + +Project Settings +================ +Settings can be stored (under the "cargo_build" key) to alter how cargo is +run. See `docs/build.md` for a description. +""" + +import sublime +import os +import shlex +from . import util, target_detect + +CARGO_COMMANDS = { + 'auto': { + 'name': 'Automatic', + 'command': 'auto', + 'allows_target': True, + 'allows_target_triple': True, + 'allows_release': True, + 'allows_features': True, + 'allows_json': True, + }, + 'build': { + 'name': 'Build', + 'command': 'build', + 'allows_target': True, + 'allows_target_triple': True, + 'allows_release': True, + 'allows_features': True, + 'allows_json': True, + }, + 'run': { + 'name': 'Run', + 'command': 'run', + 'allows_target': ('bin', 'example'), + 'allows_target_triple': True, + 'allows_release': True, + 'allows_features': True, + 'allows_json': True, + 'json_stop_pattern': '^\s*Running ', + }, + 'check': { + 'name': 'Check', + 'command': 'check', + 'allows_target': True, + 'allows_target_triple': True, + 'allows_release': True, + 'allows_features': True, + 'allows_json': True, + }, + 'test': { + 'name': 'Test', + 'command': 'test', + 'allows_target': True, + 'allows_target_triple': True, + 'allows_release': True, + 'allows_features': True, + 'allows_json': True, + }, + 'bench': { + 'name': 'Bench', + 'command': 'bench', + 'allows_target': True, + 'allows_target_triple': True, + 'allows_release': False, + 'allows_features': True, + 'allows_json': True, + }, + 'clean': { + 'name': 'Clean', + 'command': 'clean', + }, + 'doc': { + 'name': 'Doc', + 'command': 'doc', + 'allows_target': ['lib', 'bin'], + 'allows_target_triple': True, + 'allows_release': True, + 'allows_features': True, + 'allows_json': False, + }, + 'clippy': { + 'name': 'Clippy', + 'command': 'clippy', + 'allows_target': False, + 'allows_target_triple': True, + 'allows_release': True, + 'allows_features': True, + 'allows_json': True, + }, + 'script': { + 'name': 'Script', + 'command': 'script', + 'allows_target': False, + 'allows_target_triple': False, + 'allows_release': False, + 'allows_features': False, + 'allows_json': False, + 'requires_view_path': True, + 'requires_manifest': False, + }, + # This is a special command (not exposed) used by on-save syntax checking. + 'no-trans': { + 'name': 'no-trans', + 'command': 'rustc', + 'allows_target': True, + 'allows_target_triple': True, + 'allows_release': True, + 'allows_features': True, + 'allows_json': True, + 'requires_view_path': False, + 'requires_manifest': False, + } +} + + +class CargoSettings(object): + + """Interface to Cargo project settings stored in `sublime-project` + file.""" + + # Sublime window. + window = None + # Data in the sublime project file. Empty dictionary if nothing is set. + project_data = None + + def __init__(self, window): + self.window = window + + def load(self): + self.project_data = self.window.project_data() + if self.project_data is None: + # Window does not have a Sublime project. + self.project_data = {} + + def get(self, key, default=None): + return self.project_data.get('settings', {})\ + .get('cargo_build', {})\ + .get(key, default) + + def set(self, key, value): + self.project_data.setdefault('settings', {})\ + .setdefault('cargo_build', {})[key] = value + self._set_project_data() + + def get_with_target(self, path, target, key, default=None): + path = os.path.normpath(path) + pdata = self.project_data.get('settings', {})\ + .get('cargo_build', {})\ + .get('paths', {})\ + .get(path, {}) + if target: + d = pdata.get('targets', {}).get(target, {}) + else: + d = pdata.get('defaults', {}) + return d.get(key, default) + + def get_with_variant(self, path, variant, key, default=None): + path = os.path.normpath(path) + vdata = self.project_data.get('settings', {})\ + .get('cargo_build', {})\ + .get('paths', {})\ + .get(path, {})\ + .get('variants', {})\ + .get(variant, {}) + return vdata.get(key, default) + + def set_with_target(self, path, target, key, value): + path = os.path.normpath(path) + pdata = self.project_data.setdefault('settings', {})\ + .setdefault('cargo_build', {})\ + .setdefault('paths', {})\ + .setdefault(path, {}) + if target: + d = pdata.setdefault('targets', {}).setdefault(target, {}) + else: + d = pdata.setdefault('defaults', {}) + d[key] = value + self._set_project_data() + + def set_with_variant(self, path, variant, key, value): + path = os.path.normpath(path) + vdata = self.project_data.setdefault('settings', {})\ + .setdefault('cargo_build', {})\ + .setdefault('paths', {})\ + .setdefault(path, {})\ + .setdefault('variants', {})\ + .setdefault(variant, {}) + vdata[key] = value + self._set_project_data() + + def _set_project_data(self): + if self.window.project_file_name() is None: + # XXX: Better way to display a warning? Is + # sublime.error_message() reasonable? + print(util.multiline_fix(""" + Rust Enhanced Warning: This window does not have an associated sublime-project file. + Any changes to the Cargo build settings will be lost if you close the window.""")) + self.window.set_project_data(self.project_data) + + def get_command(self, cmd_info, settings_path, initial_settings={}): + """Generates the command arguments for running Cargo. + + :Returns: A dictionary with the keys: + - `command`: The command to run as a list of strings. + - `env`: Dictionary of environment variables (or None). + + Returns None if the command cannot be constructed. + """ + command = cmd_info['command'] + result = ['cargo'] + pdata = self.project_data.get('settings', {})\ + .get('cargo_build', {})\ + .get('paths', {})\ + .get(settings_path, {}) + vdata = pdata.get('variants', {})\ + .get(command, {}) + + def vdata_get(key, default=None): + return initial_settings.get(key, vdata.get(key, default)) + + # Target + target = None + if cmd_info.get('allows_target', False): + tcfg = vdata_get('target') + if tcfg == 'auto': + # If this fails, leave target as None and let Cargo sort it + # out (it may display an error). + if util.active_view_is_rust(): + td = target_detect.TargetDetector(self.window) + view = self.window.active_view() + targets = td.determine_targets(view.file_name()) + if len(targets) == 1: + src_path, cmd_line = targets[0] + target = ' '.join(cmd_line) + else: + target = tcfg + + def get(key, default=None): + d = pdata.get('defaults', {}).get(key, default) + v_val = vdata.get(key, d) + t_val = pdata.get('targets', {}).get(target, {}).get(key, v_val) + return initial_settings.get(key, t_val) + + toolchain = get('toolchain', None) + if toolchain: + result.append('+' + toolchain) + + # Command to run. + result.append(cmd_info['command']) + + # Default target. + if target: + result.extend(target.split()) + + # target_triple + if cmd_info.get('allows_target_triple', False): + v = get('target_triple', None) + if v: + result.extend(['--target', v]) + + # release (profile) + if cmd_info.get('allows_release', False): + v = get('release', False) + if v: + result.append('--release') + + if cmd_info.get('allows_json', False) and \ + util.get_setting('show_errors_inline', True): + result.append('--message-format=json') + + # features + if cmd_info.get('allows_features', False): + v = get('no_default_features', False) + if v: + result.append('--no-default-features') + v = get('features', None) + if v: + if v.upper() == 'ALL': + result.append('--all-features') + else: + result.append('--features') + result.append(v) + + # Add path from current active view (mainly for "cargo script"). + if cmd_info.get('requires_view_path', False): + script_path = get('script_path') + if not script_path: + if not util.active_view_is_rust(): + sublime.error_message(util.multiline_fix(""" + Cargo build command %r requires the current view to be a Rust source file.""" % command)) + return None + script_path = self.window.active_view().file_name() + result.append(script_path) + + def expand(s): + return sublime.expand_variables(s, + self.window.extract_variables()) + + # Extra args. + extra_cargo_args = get('extra_cargo_args') + if extra_cargo_args: + extra_cargo_args = expand(extra_cargo_args) + result.extend(shlex.split(extra_cargo_args)) + + extra_run_args = get('extra_run_args') + if extra_run_args: + extra_run_args = expand(extra_run_args) + result.append('--') + result.extend(shlex.split(extra_run_args)) + + # Compute the environment. + env = pdata.get('defaults', {}).get('env', {}) + env.update(vdata.get('env', {})) + env.update(pdata.get('targets', {}).get(target, {}).get('env', {})) + env.update(initial_settings.get('env', {})) + for k, v in env.items(): + env[k] = os.path.expandvars(v) + if not env: + env = None + + return { + 'command': result, + 'env': env, + } diff --git a/rust/messages.py b/rust/messages.py new file mode 100644 index 00000000..b762d080 --- /dev/null +++ b/rust/messages.py @@ -0,0 +1,602 @@ +"""Module for storing/displaying Rust compiler messages.""" + +import sublime + +import collections +import html +import itertools +import os +import re +import webbrowser +from pprint import pprint + +from . import util + +# Key is window id. +# Value is a dictionary: { +# 'paths': {path: [msg_dict,...]}, +# 'msg_index': (path_idx, message_idx) +# } +# `path` is the absolute path to the file. +# Each msg_dict has the following: +# - `level` +# - `span` +# - `is_main` +# - `message` +WINDOW_MESSAGES = {} + + +LINK_PATTERN = r'(https?://[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-zA-Z]{2,6}\b[-a-zA-Z0-9@:%_+.~#?&/=]*)' + + +def clear_messages(window): + WINDOW_MESSAGES.pop(window.id(), None) + for view in window.views(): + view.erase_phantoms('rust-syntax-phantom') + view.erase_regions('rust-error') + view.erase_regions('rust-info') + + +def add_message(window, path, level, span, is_main, message): + """Add a message to be displayed. + + :param window: The Sublime window. + :param path: The absolute path of the file to show the message for. + :param level: The Rust message level ('error', 'note', etc.). + :param span: Location of the message (0-based): + `((line_start, col_start), (line_end, col_end))` + May be `None` to indicate no particular spot. + :param is_main: If True, this is a top-level message. False is used for + attached detailed diagnostic information, child notes, etc. + :param message: The message to display. + """ + wid = window.id() + try: + messages_by_path = WINDOW_MESSAGES[wid]['paths'] + except KeyError: + # This is an OrderedDict to handle next/prev message. + messages_by_path = collections.OrderedDict() + WINDOW_MESSAGES[wid] = { + 'paths': messages_by_path, + 'msg_index': (-1, -1) + } + messages = messages_by_path.setdefault(path, []) + to_add = { + 'level': level, + 'span': span, + 'is_main': is_main, + 'message': message, + } + if to_add in messages: + # Don't add duplicates. + return + messages.append(to_add) + view = window.find_open_file(path) + if view: + _show_phantom(view, level, span, message) + + +def has_message_for_path(window, path): + paths = WINDOW_MESSAGES.get(window.id(), {}).get('paths', {}) + return path in paths + + +def draw_all_region_highlights(window): + """Drawing region outlines must be deferred until all the messages have + been received since Sublime does not have an API to incrementally add + them.""" + paths = WINDOW_MESSAGES.get(window.id(), {}).get('paths', {}) + for path, messages in paths.items(): + view = window.find_open_file(path) + if view: + _draw_region_highlights(view, messages) + + +def _draw_region_highlights(view, messages): + if util.get_setting('rust_region_style', 'outline') == 'none': + return + error_regions = [] + info_regions = [] + error_region_set = set() + for message in messages: + region = _span_to_region(view, message['span']) + if message['level'] == 'error': + error_regions.append(region) + error_region_set.add((region.a, region.b)) + else: + info_regions.append(region) + # Filter out identical info regions. + info_regions = list(filter(lambda x: (x.a, x.b) not in error_region_set, + info_regions)) + + # Unfortunately you cannot specify colors, but instead scopes as + # defined in the color theme. If the scope is not defined, then it + # will show up as foreground color (white in dark themes). I just use + # "info" as an undefined scope (empty string will remove regions). + # "invalid" will typically show up as red. + + # Is DRAW_EMPTY necessary? Is it possible to have a zero-length span? + _sublime_add_regions( + view, 'rust-error', error_regions, 'invalid', '', + sublime.DRAW_NO_FILL | sublime.DRAW_EMPTY) + _sublime_add_regions( + view, 'rust-info', info_regions, 'info', '', + sublime.DRAW_NO_FILL | sublime.DRAW_EMPTY) + + +def _show_phantom(view, level, span, message): + if util.get_setting('rust_phantom_style', 'normal') == 'none': + return + region = _span_to_region(view, span) + # For some reason, with LAYOUT_BELOW, if you have a multi-line + # region, the phantom is only displayed under the first line. I + # think it makes more sense for the phantom to appear below the + # last line. + start = view.rowcol(region.begin()) + end = view.rowcol(region.end()) + if start[0] != end[0]: + # Spans multiple lines, adjust to the last line. + region = sublime.Region( + view.text_point(end[0], 0), + region.end() + ) + + def click_handler(url): + if url == 'hide': + clear_messages(view.window()) + else: + webbrowser.open_new(url) + + _sublime_add_phantom( + view, + 'rust-syntax-phantom', region, + message, + sublime.LAYOUT_BELOW, + click_handler + ) + + +def _span_to_region(view, span): + if span: + return sublime.Region( + view.text_point(span[0][0], span[0][1]), + view.text_point(span[1][0], span[1][1]) + ) + else: + # Place at bottom of file for lack of anywhere better. + return sublime.Region(view.size()) + + +def _sublime_add_phantom(view, key, region, content, layout, on_navigate): + """Pulled out to assist testing.""" + view.add_phantom( + key, region, + content, + layout, + on_navigate + ) + + +def _sublime_add_regions(view, key, regions, scope, icon, flags): + """Pulled out to assist testing.""" + view.add_regions(key, regions, scope, icon, flags) + + +def show_next_message(window, levels): + current_idx = _advance_next_message(window, levels) + _show_message(window, levels, current_idx) + + +def show_prev_message(window, levels): + current_idx = _advance_prev_message(window, levels) + _show_message(window, levels, current_idx) + + +def _show_message(window, levels, current_idx): + if current_idx is None: + return + try: + window_info = WINDOW_MESSAGES[window.id()] + except KeyError: + return + paths = window_info['paths'] + path, messages = _ith_iter_item(paths.items(), current_idx[0]) + view = window.find_open_file(path) + if view: + _scroll_to_message(view, messages, current_idx) + else: + # show_at_center is buggy with newly opened views (see + # https://github.com/SublimeTextIssues/Core/issues/538). + # ENCODED_POSITION is 1-based. + msg = messages[current_idx[1]] + row, col = msg['span'][0] + view = window.open_file('%s:%d:%d' % (path, row + 1, col + 1), + sublime.ENCODED_POSITION) + _show_message_wait(view, levels, messages, current_idx) + + +def _show_message_wait(view, levels, messages, current_idx): + if view.is_loading(): + def f(): + _show_message_wait(view, levels, messages, current_idx) + sublime.set_timeout(f, 10) + # The on_load event handler will call show_messages_for_view which + # should handle displaying the messages. + + +def _scroll_to_message(view, messages, current_idx): + """Scroll view to the message.""" + view.window().focus_view(view) + msg = messages[current_idx[1]] + r = _span_to_region(view, msg['span']) + view.sel().clear() + view.sel().add(r.a) + view.show_at_center(r) + # Work around bug in Sublime where the visual of the cursor + # does not update. See + # https://github.com/SublimeTextIssues/Core/issues/485 + view.add_regions('bug', [r], 'bug', 'dot', sublime.HIDDEN) + view.erase_regions('bug') + + +def show_messages_for_view(view): + """Adds all phantoms and region outlines for a view.""" + window = view.window() + paths = WINDOW_MESSAGES.get(window.id(), {}).get('paths', {}) + messages = paths.get(view.file_name(), None) + if messages: + _show_messages_for_view(view, messages) + + +def _show_messages_for_view(view, messages): + for message in messages: + _show_phantom(view, + message['level'], + message['span'], + message['message']) + _draw_region_highlights(view, messages) + + +def _ith_iter_item(d, i): + return next(itertools.islice(d, i, None)) + + +def _advance_next_message(window, levels, wrap_around=False): + """Update global msg_index to the next index.""" + try: + win_info = WINDOW_MESSAGES[window.id()] + except KeyError: + return None + paths = win_info['paths'] + path_idx, msg_idx = win_info['msg_index'] + if path_idx == -1: + # First time. + path_idx = 0 + msg_idx = 0 + else: + msg_idx += 1 + + while path_idx < len(paths): + messages = _ith_iter_item(paths.values(), path_idx) + while msg_idx < len(messages): + msg = messages[msg_idx] + if _is_matching_level(levels, msg): + current_idx = (path_idx, msg_idx) + win_info['msg_index'] = current_idx + return current_idx + msg_idx += 1 + path_idx += 1 + msg_idx = 0 + if wrap_around: + # No matching entries, give up. + return None + else: + # Start over at the beginning of the list. + win_info['msg_index'] = (-1, -1) + return _advance_next_message(window, levels, wrap_around=True) + + +def _last_index(paths): + path_idx = len(paths) - 1 + msg_idx = len(_ith_iter_item(paths.values(), path_idx)) - 1 + return (path_idx, msg_idx) + + +def _advance_prev_message(window, levels, wrap_around=False): + """Update global msg_index to the previous index.""" + try: + win_info = WINDOW_MESSAGES[window.id()] + except KeyError: + return None + paths = win_info['paths'] + path_idx, msg_idx = win_info['msg_index'] + if path_idx == -1: + # First time, start at the end. + path_idx, msg_idx = _last_index(paths) + else: + msg_idx -= 1 + + while path_idx >= 0: + messages = _ith_iter_item(paths.values(), path_idx) + while msg_idx >= 0: + msg = messages[msg_idx] + if _is_matching_level(levels, msg): + current_idx = (path_idx, msg_idx) + win_info['msg_index'] = current_idx + return current_idx + msg_idx -= 1 + path_idx -= 1 + if path_idx >= 0: + msg_idx = len(_ith_iter_item(paths.values(), path_idx)) - 1 + if wrap_around: + # No matching entries, give up. + return None + else: + # Start over at the end of the list. + win_info['msg_index'] = (-1, -1) + return _advance_prev_message(window, levels, wrap_around=True) + + +def _is_matching_level(levels, msg_dict): + if not msg_dict['is_main']: + # Only navigate to top-level messages. + return False + level = msg_dict['level'] + if levels == 'all': + return True + elif levels == 'error' and level == 'error': + return True + elif levels == 'warning' and level != 'error': + # Warning, Note, Help + return True + else: + return False + + +def add_rust_messages(window, cwd, info, target_path, msg_cb): + """Add messages from Rust JSON to Sublime views. + + - `window`: Sublime Window object. + - `cwd`: Directory where cargo/rustc was run. + - `info`: Dictionary of messages from rustc or cargo. + - `target_path`: Absolute path to the top-level source file of the target + (lib.rs, main.rs, etc.). May be None if it is not known. + - `msg_cb`: Function called for each message (if not None). Parameters + are: + - `path`: Full path to the file. None if no file associated. + - `span_region`: Sublime (0-based) offsets into the file for the + region `((line_start, col_start), (line_end, col_end))`. None if + no region. + - `is_main`: If True, a top-level message. + - `message`: Text of the message. + - `level`: Rust level ('error', 'warning', 'note', etc.) + """ + # cargo check emits in a slightly different format. + if 'reason' in info: + if info['reason'] == 'compiler-message': + info = info['message'] + else: + # cargo may emit various other messages, like + # 'compiler-artifact' or 'build-script-executed'. + return + _add_rust_messages(window, cwd, info, target_path, msg_cb, {}) + + +def _add_rust_messages(window, cwd, info, target_path, + msg_cb, parent_info): + """ + - `info`: The dictionary from Rust has the following structure: + + - 'message': The message to display. + - 'level': The error level ('error', 'warning', 'note', 'help') + (XXX I think an ICE shows up as 'error: internal compiler + error') + - 'code': If not None, contains a dictionary of extra information + about the error. + - 'code': String like 'E0001' + - 'explanation': Optional string with a very long description of + the error. If not specified, then that means nobody has gotten + around to describing the error, yet. + - 'spans': List of regions with diagnostic information. May be empty + (child messages attached to their parent, or global messages like + "main not found"). Each element is: + + - 'file_name': Filename for the message. For spans located in the + 'expansion' section, this will be the name of the expanded macro + in the format ''. + - 'byte_start': + - 'byte_end': + - 'line_start': + - 'line_end': + - 'column_start': + - 'column_end': + - 'is_primary': If True, this is the primary span where the error + started. Note: It is possible (though rare) for multiple spans + to be marked as primary. + - 'text': List of dictionaries showing the original source code. + - 'label': A message to display at this span location. May be + None (AFAIK, this only happens when is_primary is True, in which + case the main 'message' is all that should be displayed). + - 'suggested_replacement': If not None, a string with a + suggestion of the code to replace this span. If this is set, we + actually display the 'rendered' value instead, because it's + easier to read. + - 'expansion': If not None, a dictionary indicating the expansion + of the macro within this span. The values are: + + - 'span': A span object where the macro was applied. + - 'macro_decl_name': Name of the macro ("print!" or + "#[derive(Eq)]") + - 'def_site_span': Span where the macro was defined (may be + None if not known). + + - 'children': List of attached diagnostic messages (following this + same format) of associated information. + - 'rendered': Optional string (may be None). Currently only used by + suggested replacements. If a child has a span with + 'suggested_replacement' set, then this a suggestion of how the line + should be written. + + - `parent_info`: Dictionary used for tracking "children" messages. + Includes 'view' and 'region' keys to indicate where a child message + should be displayed. + """ + error_colour = util.get_setting('rust_syntax_error_color', 'var(--redish)') + warning_colour = util.get_setting('rust_syntax_warning_color', 'var(--yellowish)') + + # Include "notes" tied to errors, even if warnings are disabled. + if (info['level'] != 'error' and + util.get_setting('rust_syntax_hide_warnings', False) and + not parent_info + ): + return + + # TODO: Consider matching the colors used by rustc. + # - error: red + # `bug` appears as "error: internal compiler error" + # - warning: yellow + # - note: bright green + # - help: cyan + is_error = info['level'] == 'error' + if is_error: + base_color = error_colour + else: + base_color = warning_colour + + msg_template = """ + + + {level}: {msg} {extra}\xD7 + """ % (base_color,) + + def _add_message(path, span_region, is_main, message, extra=''): + if info['level'] == 'error': + cls = 'rust-error' + else: + cls = 'rust-additional' + + # Rust performs some pretty-printing for things like suggestions, + # attempt to retain some of the formatting. This isn't perfect + # (doesn't line up perfectly), not sure why. + def escape_and_link(i_txt): + i, txt = i_txt + if i % 2: + return '%s' % (txt, txt) + else: + return html.escape(txt, quote=False).\ + replace('\n', '
').replace(' ', ' ') + parts = re.split(LINK_PATTERN, message) + escaped_message = ''.join(map(escape_and_link, enumerate(parts))) + content = msg_template.format( + cls=cls, + level=info['level'], + msg=escaped_message, + extra=extra + ) + add_message(window, path, info['level'], span_region, + is_main, content) + if msg_cb: + msg_cb(path, span_region, is_main, message, info['level']) + + def add_primary_message(path, span_region, is_main, message): + parent_info['path'] = path + parent_info['span'] = span_region + # Not all codes have explanations (yet). + if info['code'] and info['code']['explanation']: + # TODO + # This could potentially be a link that opens a Sublime popup, or + # a new temp buffer with the contents of 'explanation'. + # (maybe use sublime-markdown-popups) + extra = ' ?' % (info['code']['code'],) + else: + extra = '' + _add_message(path, span_region, is_main, message, extra) + + if len(info['spans']) == 0: + if parent_info: + # This is extra info attached to the parent message. + add_primary_message(parent_info['path'], + parent_info['span'], + False, + info['message']) + else: + # Messages without spans are global session messages (like "main + # function not found"). + # + # Some of the messages are not very interesting, though. + imsg = info['message'] + if not (imsg.startswith('aborting due to') or + imsg.startswith('cannot continue')): + if target_path: + # Display at the bottom of the root path (like main.rs) + # for lack of a better place to put it. + add_primary_message(target_path, None, True, imsg) + else: + if msg_cb: + msg_cb(None, None, True, imsg, info['level']) + + for span in info['spans']: + is_primary = span['is_primary'] + + if 'macros>' in span['file_name']: + # Rust gives the chain of expansions for the macro, which we don't + # really care about. We want to find the site where the macro was + # invoked. I'm not entirely confident this is the best way to do + # this, but it seems to work. This is roughly emulating what is + # done in librustc_errors/emitter.rs fix_multispan_in_std_macros. + def find_span_r(span): + if span['expansion']: + return find_span_r(span['expansion']['span']) + else: + return span + span = find_span_r(span) + if span is None: + continue + + span_path = os.path.realpath(os.path.join(cwd, span['file_name'])) + # Sublime text is 0 based whilst the line/column info from + # rust is 1 based. + span_region = ((span['line_start'] - 1, span['column_start'] - 1), + (span['line_end'] - 1, span['column_end'] - 1)) + + label = span['label'] + if label: + # Display the label for this Span. + _add_message(span_path, span_region, False, label) + else: + # Some spans don't have a label. These seem to just imply + # that the main "message" is sufficient, and always seems + # to happen when the span is_primary. + if not is_primary: + # When can this happen? + pprint(info) + raise ValueError('Unexpected span with no label') + if is_primary: + # Show the overall error message. + add_primary_message(span_path, span_region, True, info['message']) + if span['suggested_replacement']: + # The "suggested_replacement" contains the code that + # should replace the span. However, it can be easier to + # read if you repeat the entire line (from "rendered"). + _add_message(span_path, span_region, False, info['rendered']) + + # Recurse into children (which typically hold notes). + for child in info['children']: + _add_rust_messages(window, cwd, child, target_path, + msg_cb, parent_info.copy()) diff --git a/rust/opanel.py b/rust/opanel.py new file mode 100644 index 00000000..d2776908 --- /dev/null +++ b/rust/opanel.py @@ -0,0 +1,105 @@ +"""Module displaying build output in a Sublime output panel.""" + +import os +from . import rust_proc, messages, util + +# Use the same panel name that Sublime's build system uses so that "Show Build +# Results" will open the same panel. I don't see any particular reason why +# this would be a problem. If it is, it's a simple matter of changing this. +PANEL_NAME = 'exec' + + +def create_output_panel(window, cwd): + output_view = window.create_output_panel(PANEL_NAME) + s = output_view.settings() + # FILENAME:LINE: MESSAGE + # Two dots to handle Windows DRIVE: + # XXX: Verify + s.set('result_file_regex', '^[^:]+: (..[^:]*):([0-9]+): (.*)$') + # Used for resolving relative paths. + s.set('result_base_dir', cwd) + s.set('word_wrap', True) # XXX Or False? + s.set('line_numbers', False) + s.set('gutter', False) + s.set('scroll_past_end', False) + output_view.assign_syntax('Cargo.build-language') + # 'color_scheme'? + # XXX: Is this necessary? + # self.window.create_output_panel(PANEL_NAME) + if util.get_setting('show_panel_on_build', True): + window.run_command('show_panel', {'panel': 'output.' + PANEL_NAME}) + return output_view + + +def display_message(window, msg): + """Utility function for displaying a one-off message (typically an error) + in a new output panel.""" + v = create_output_panel(window, '') + _append(v, msg) + + +def _append(view, text): + view.run_command('append', {'characters': text, + 'scroll_to_end': True}) + + +class OutputListener(rust_proc.ProcListener): + + """Listener used for displaying results to a Sublime output panel.""" + + # Sublime view used for output. + output_view = None + + def __init__(self, window, base_path): + self.window = window + self.base_path = base_path + + def on_begin(self, proc): + self.output_view = create_output_panel(self.window, self.base_path) + self._append('[Running: %s]' % (' '.join(proc.cmd),)) + + def on_data(self, proc, data): + self._append(data, nl=False) + + def on_error(self, proc, message): + self._append(message) + + def on_json(self, proc, obj): + if 'message' in obj: + messages.add_rust_messages(self.window, proc.cwd, obj['message'], + None, self.msg_cb) + + def msg_cb(self, path, span_region, is_main, message, level): + if path: + if self.base_path and path.startswith(self.base_path): + path = os.path.relpath(path, self.base_path) + if span_region: + self._append('%s: %s:%d: %s' % (level, path, + span_region[0][0], message)) + else: + self._append('%s: %s: %s' % (level, path, message)) + else: + self._append('%s: %s' % (level, message)) + + def on_finished(self, proc, rc): + if rc: + self._append('[Finished in %.1fs with exit code %d]' % ( + proc.elapsed, rc)) + self._display_debug(proc) + else: + self._append('[Finished in %.1fs]' % proc.elapsed) + messages.draw_all_region_highlights(self.window) + + def on_terminated(self, proc): + self._append('[Build interrupted]') + + def _append(self, message, nl=True): + if nl: + message += '\n' + _append(self.output_view, message) + + def _display_debug(self, proc): + # Display some information to help the user debug any build problems. + self._append('[dir: %s]' % (proc.cwd,)) + # TODO: Fix this when adding PATH/env support. + self._append('[path: %s]' % (proc.env.get('PATH'),)) diff --git a/rust/rust_proc.py b/rust/rust_proc.py new file mode 100644 index 00000000..4bca4350 --- /dev/null +++ b/rust/rust_proc.py @@ -0,0 +1,322 @@ +"""Module for running cargo or rustc and parsing the output. + +It is assumed a thread only ever has one process running at a time. +""" + +import json +import os +import re +import signal +import subprocess +import sys +import threading +import time +import shellenv + +from . import util + +# Map Sublime window ID to RustProc. +PROCS = {} +PROCS_LOCK = threading.Lock() + +# Environment (as s dict) from the user's login shell. +USER_SHELL_ENV = None + + +class ProcessTerminatedError(Exception): + """Process was terminated by another thread.""" + + +class ProcListener(object): + + """Listeners are used to handle output events while a process is + running.""" + + def on_begin(self, proc): + """Called just before the process is started.""" + pass + + def on_data(self, proc, data): + """A line of text output by the process.""" + pass + + def on_error(self, proc, message): + """Called when there is an error, such as failure to decode utf-8.""" + print('Rust Error: %s' % message) + + def on_json(self, proc, obj): + """Parsed JSON output from the command.""" + pass + + def on_finished(self, proc, rc): + """Called after all output has been processed.""" + pass + + def on_terminated(self, proc): + """Called when the process is terminated by another thread. Note that + the process may still be running.""" + pass + + +class SlurpListener(ProcListener): + + def on_begin(self, proc): + self.json = [] + self.data = [] + + def on_json(self, proc, obj): + self.json.append(obj) + + def on_data(self, proc, data): + self.data.append(data) + + +def _slurp(window, cmd, cwd): + p = RustProc() + listener = SlurpListener() + p.run(window, cmd, cwd, listener) + rc = p.wait() + return (rc, listener) + + +def slurp_json(window, cmd, cwd): + """Run a command and return the JSON output from it. + + :param window: Sublime window. + :param cmd: The command to run (list of strings). + :param cwd: The directory where to run the command. + + :returns: List of parsed JSON objects. + + :raises ProcessTermiantedError: Process was terminated by another thread. + """ + rc, listener = _slurp(window, cmd, cwd) + if not listener.json and rc: + print('Failed to run: %s' % cmd) + print(''.join(listener.data)) + return listener.json + + +def check_output(window, cmd, cwd): + """Run a command and return the text output from it. + + :param window: Sublime window. + :param cmd: The command to run (list of strings). + :param cwd: The directory where to run the command. + + :returns: A string of the command's output. + + :raises ProcessTermiantedError: Process was terminated by another thread. + :raises subprocess.CalledProcessError: The command returned a nonzero exit + status. + """ + rc, listener = _slurp(window, cmd, cwd) + output = ''.join(listener.data) + if rc: + raise subprocess.CalledProcessError(rc, cmd, output) + return output + + +class RustProc(object): + + """Launches and controls a subprocess.""" + + # Set to True when the process is finished running. + finished = False + # Set to True if the process was forcefully terminated. + terminated = False + # Command to run as a list of strings. + cmd = None + # The directory where the command is being run. + cwd = None + # Environment dictionary used in the child. + env = None + # subprocess.Popen object + proc = None + # Time when the process was started. + start_time = None + # Number of seconds it took to run. + elapsed = None + # The thread used for reading output. + _stdout_thread = None + + def run(self, window, cmd, cwd, listener, env=None, + decode_json=True, json_stop_pattern=None): + """Run the process. + + :param window: Sublime window. + :param cmd: The command to run (list of strings). + :param cwd: The directory where to run the command. + :param listener: `ProcListener` to receive the output. + :param env: Dictionary of environment variables to add. + :param decode_json: If True, will check for lines starting with `{` to + decode as a JSON message. + :param json_stop_pattern: Regular expression used to detect when it + should stop looking for JSON messages. This is used by `cargo + run` so that it does not capture output from the user's program + that might start with an open curly brace. + + :raises ProcessTermiantedError: Process was terminated by another + thread. + """ + self.cmd = cmd + self.cwd = cwd + self.listener = listener + self.start_time = time.time() + self.window = window + self.decode_json = decode_json + self.json_stop_pattern = json_stop_pattern + + from . import rust_thread + try: + t = rust_thread.THREADS[window.id()] + except KeyError: + pass + else: + if t.should_exit: + raise ProcessTerminatedError() + + with PROCS_LOCK: + PROCS[window.id()] = self + listener.on_begin(self) + + # Configure the environment. + self.env = os.environ.copy() + if util.get_setting('rust_include_shell_env', True): + global USER_SHELL_ENV + if USER_SHELL_ENV is None: + USER_SHELL_ENV = shellenv.get_env()[1] + self.env.update(USER_SHELL_ENV) + + rust_env = util.get_setting('rust_env') + if rust_env: + for k, v in rust_env.items(): + rust_env[k] = os.path.expandvars(v) + self.env.update(rust_env) + + if env: + self.env.update(env) + + # XXX: Debug config. + util.debug('Rust running: %s', self.cmd) + + if sys.platform == 'win32': + # Prevent a console window from popping up. + startupinfo = subprocess.STARTUPINFO() + startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW + self.proc = subprocess.Popen( + self.cmd, + cwd=self.cwd, + env=self.env, + startupinfo=startupinfo, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + ) + else: + # Make the process the group leader so we can easily kill all its + # children. + self.proc = subprocess.Popen( + self.cmd, + cwd=self.cwd, + preexec_fn=os.setpgrp, + env=self.env, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + ) + + self._stdout_thread = threading.Thread(target=self._read_stdout, + name='%s: Stdout' % (threading.current_thread().name,)) + self._stdout_thread.start() + + def terminate(self): + """Kill the process. + + Termination may not happen immediately. Use wait() if you need to + ensure when it is finished. + """ + if self.finished: + return + self.finished = True + self.terminated = True + if sys.platform == 'win32': + # Use taskkill to kill the entire tree (terminate only kills top + # process). + startupinfo = subprocess.STARTUPINFO() + startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW + # /T - Kill tree + # /F - Force kill + subprocess.Popen( + 'taskkill /T /F /PID ' + str(self.proc.pid), + startupinfo=startupinfo) + else: + # Must kill the entire process group. The rustup wrapper won't + # forward the signal to cargo, and cargo doesn't forward signals + # to any processes it spawns. + os.killpg(os.getpgid(self.proc.pid), signal.SIGTERM) + # stdout reader should catch the end of the stream and perform + # cleanup. + self.listener.on_terminated(self) + + def wait(self): + """Wait for the process to finish. + + :return: The returncode of the process. + + :raises ProcessTerminatedError: Process was interrupted by another + thread. + """ + # stdout_thread is responsible for cleanup, setting `finished`, etc. + if self._stdout_thread: + self._stdout_thread.join() + rc = self.proc.wait() + if self.terminated: + raise ProcessTerminatedError() + return rc + + def _read_stdout(self): + while True: + line = self.proc.stdout.readline() + if not line: + rc = self._cleanup() + self.listener.on_finished(self, rc) + break + try: + line = line.decode('utf-8') + except: + self.listener.on_error(self, + '[Error decoding UTF-8: %r]' % line) + continue + if self.decode_json and line.startswith('{'): + try: + result = json.loads(line) + except: + self.listener.on_error(self, + '[Error loading JSON from rust: %r]' % line) + else: + try: + self.listener.on_json(self, result) + except: + self._cleanup() + raise + else: + if self.json_stop_pattern and \ + re.match(self.json_stop_pattern, line): + # Stop looking for JSON open curly bracket. + self.decode_json = False + # Sublime always uses \n internally. + line = line.replace('\r\n', '\n') + self.listener.on_data(self, line) + + def _cleanup(self): + self.elapsed = time.time() - self.start_time + self.finished = True + self._stdout_thread = None + self.proc.stdout.close() + rc = self.proc.wait() + with PROCS_LOCK: + p = PROCS[self.window.id()] + if p is self: + del PROCS[self.window.id()] + return rc diff --git a/rust/rust_thread.py b/rust/rust_thread.py new file mode 100644 index 00000000..1179b4f2 --- /dev/null +++ b/rust/rust_thread.py @@ -0,0 +1,115 @@ +"""Manage threads used for running Rust processes.""" + +from . import util, rust_proc + +import sublime +import threading + +# Map Sublime window ID to RustThread. +THREADS = {} +THREADS_LOCK = threading.Lock() + + +class RustThread(object): + + """A thread for running Rust processes. + + Subclasses should implement run to define the code to run. + + Subclasses should check `should_exit` around any long-running steps. + """ + + # threading.Thread instance + thread = None + # If this is true, then it is OK to kill this thread to start a new one. + silently_interruptible = True + # Set to True when the thread should terminate. + should_exit = False + # Sublime window this thread is attached to. + window = None + # Name of the thread. + name = None + + def __init__(self, window): + self.window = window + + def start(self): + """Start the thread.""" + self.thread = threading.Thread(name=self.name, + target=self._thread_run) + self.thread.start() + + @property + def current_proc(self): + """The current `RustProc` being executed by this thread, or None.""" + return rust_proc.PROCS.get(self.window.id(), None) + + def describe(self): + """Returns a string with the name of the thread.""" + p = self.current_proc + if p: + return '%s: %s' % (self.name, ' '.join(p.cmd)) + else: + return self.name + + def _thread_run(self): + # Determine if this thread is allowed to run. + while True: + with THREADS_LOCK: + t = THREADS.get(self.window.id(), None) + if not t or not t.is_alive(): + THREADS[self.window.id()] = self + break + + # Another thread is already running for this window. + if t.should_exit: + t.join() + elif t.silently_interruptible: + t.terminate() + t.join() + elif self.silently_interruptible: + # Never allowed to interrupt. + return + else: + # Neither is interruptible (the user started a Build + # while one is already running). + msg = """ + Rust Build + + The following Rust command is still running, do you want to cancel it? + %s""" % self.describe() + if sublime.ok_cancel_dialog(util.multiline_fix(msg), + 'Stop Running Command'): + t.terminate() + t.join() + else: + # Allow the original process to finish. + return + # Try again. + + try: + self.run() + finally: + with THREADS_LOCK: + t = THREADS.get(self.window.id(), None) + if t is self: + del THREADS[self.window.id()] + + def run(self): + raise NotImplementedError() + + def terminate(self): + """Asks the thread to exit. + + If the thread is running a process, the process will be killed. + """ + self.should_exit = True + p = self.current_proc + if p and not p.finished: + p.terminate() + + def is_alive(self): + return self.thread.is_alive() + + def join(self, timeout=None): + return self.thread.join(timeout=timeout) diff --git a/rust/semver.py b/rust/semver.py new file mode 100644 index 00000000..d8b9af6e --- /dev/null +++ b/rust/semver.py @@ -0,0 +1,349 @@ +# https://github.com/k-bx/python-semver +# +# Copyright (c) 2013, Konstantine Rybnikov +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright notice, this +# list of conditions and the following disclaimer in the documentation and/or +# other materials provided with the distribution. +# +# Neither the name of the {organization} nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +""" +Python helper for Semantic Versioning (http://semver.org/) +""" + +import collections +import re +import sys + + +__version__ = '2.7.5' +__author__ = 'Kostiantyn Rybnikov' +__author_email__ = 'k-bx@k-bx.com' + +_REGEX = re.compile( + r""" + ^ + (?P(?:0|[1-9][0-9]*)) + \. + (?P(?:0|[1-9][0-9]*)) + \. + (?P(?:0|[1-9][0-9]*)) + (\-(?P + (?:0|[1-9A-Za-z-][0-9A-Za-z-]*) + (\.(?:0|[1-9A-Za-z-][0-9A-Za-z-]*))* + ))? + (\+(?P + [0-9A-Za-z-]+ + (\.[0-9A-Za-z-]+)* + ))? + $ + """, re.VERBOSE) + +_LAST_NUMBER = re.compile(r'(?:[^\d]*(\d+)[^\d]*)+') + +if not hasattr(__builtins__, 'cmp'): + def cmp(a, b): + return (a > b) - (a < b) + + +def parse(version): + """Parse version to major, minor, patch, pre-release, build parts. + + :param version: version string + :return: dictionary with the keys 'build', 'major', 'minor', 'patch', + and 'prerelease'. The prerelease or build keys can be None + if not provided + :rtype: dict + """ + match = _REGEX.match(version) + if match is None: + raise ValueError('%s is not valid SemVer string' % version) + + version_parts = match.groupdict() + + version_parts['major'] = int(version_parts['major']) + version_parts['minor'] = int(version_parts['minor']) + version_parts['patch'] = int(version_parts['patch']) + + return version_parts + + +VersionInfo = collections.namedtuple( + 'VersionInfo', 'major minor patch prerelease build') + +# Only change it for Python > 3 as it is readonly +# for version 2 +if sys.version_info > (3, 0): + VersionInfo.__doc__ = """ +:param int major: version when you make incompatible API changes. +:param int minor: version when you add functionality in + a backwards-compatible manner. +:param int patch: version when you make backwards-compatible bug fixes. +:param str prerelease: an optional prerelease string +:param str build: an optional build string + +>>> import semver +>>> ver = semver.parse('3.4.5-pre.2+build.4') +>>> ver +{'build': 'build.4', 'major': 3, 'minor': 4, 'patch': 5, +'prerelease': 'pre.2'} +""" + + +def parse_version_info(version): + """Parse version string to a VersionInfo instance. + + :param version: version string + :return: a :class:`VersionInfo` instance + :rtype: :class:`VersionInfo` + """ + parts = parse(version) + version_info = VersionInfo( + parts['major'], parts['minor'], parts['patch'], + parts['prerelease'], parts['build']) + + return version_info + + +def compare(ver1, ver2): + """Compare two versions + + :param ver1: version string 1 + :param ver2: version string 2 + :return: The return value is negative if ver1 < ver2, + zero if ver1 == ver2 and strictly positive if ver1 > ver2 + :rtype: int + """ + def nat_cmp(a, b): + def convert(text): + return int(text) if re.match('[0-9]+', text) else text + + def split_key(key): + return [convert(c) for c in key.split('.')] + + def cmp_prerelease_tag(a, b): + if isinstance(a, int) and isinstance(b, int): + return cmp(a, b) + elif isinstance(a, int): + return -1 + elif isinstance(b, int): + return 1 + else: + return cmp(a, b) + + a, b = a or '', b or '' + a_parts, b_parts = split_key(a), split_key(b) + for sub_a, sub_b in zip(a_parts, b_parts): + cmp_result = cmp_prerelease_tag(sub_a, sub_b) + if cmp_result != 0: + return cmp_result + else: + return cmp(len(a), len(b)) + + def compare_by_keys(d1, d2): + for key in ['major', 'minor', 'patch']: + v = cmp(d1.get(key), d2.get(key)) + if v: + return v + + rc1, rc2 = d1.get('prerelease'), d2.get('prerelease') + rccmp = nat_cmp(rc1, rc2) + + if not rccmp: + return 0 + if not rc1: + return 1 + elif not rc2: + return -1 + + return rccmp + + v1, v2 = parse(ver1), parse(ver2) + + return compare_by_keys(v1, v2) + + +def match(version, match_expr): + """Compare two versions through a comparison + + :param str version: a version string + :param str match_expr: operator and version; valid operators are + < smaller than + > greater than + >= greator or equal than + <= smaller or equal than + == equal + != not equal + :return: True if the expression matches the version, otherwise False + :rtype: bool + """ + prefix = match_expr[:2] + if prefix in ('>=', '<=', '==', '!='): + match_version = match_expr[2:] + elif prefix and prefix[0] in ('>', '<'): + prefix = prefix[0] + match_version = match_expr[1:] + else: + raise ValueError("match_expr parameter should be in format , " + "where is one of " + "['<', '>', '==', '<=', '>=', '!=']. " + "You provided: %r" % match_expr) + + possibilities_dict = { + '>': (1,), + '<': (-1,), + '==': (0,), + '!=': (-1, 1), + '>=': (0, 1), + '<=': (-1, 0) + } + + possibilities = possibilities_dict[prefix] + cmp_res = compare(version, match_version) + + return cmp_res in possibilities + + +def max_ver(ver1, ver2): + """Returns the greater version of two versions + + :param ver1: version string 1 + :param ver2: version string 2 + :return: the greater version of the two + :rtype: :class:`VersionInfo` + """ + cmp_res = compare(ver1, ver2) + if cmp_res == 0 or cmp_res == 1: + return ver1 + else: + return ver2 + + +def min_ver(ver1, ver2): + """Returns the smaller version of two versions + + :param ver1: version string 1 + :param ver2: version string 2 + :return: the smaller version of the two + :rtype: :class:`VersionInfo` + """ + cmp_res = compare(ver1, ver2) + if cmp_res == 0 or cmp_res == -1: + return ver1 + else: + return ver2 + + +def format_version(major, minor, patch, prerelease=None, build=None): + """Format a version according to the Semantic Versioning specification + + :param str major: the required major part of a version + :param str minor: the required minor part of a version + :param str patch: the required patch part of a version + :param str prerelease: the optional prerelease part of a version + :param str build: the optional build part of a version + :return: the formatted string + :rtype: str + """ + version = "%d.%d.%d" % (major, minor, patch) + if prerelease is not None: + version = version + "-%s" % prerelease + + if build is not None: + version = version + "+%s" % build + + return version + + +def _increment_string(string): + """ + Look for the last sequence of number(s) in a string and increment, from: + http://code.activestate.com/recipes/442460-increment-numbers-in-a-string/#c1 + """ + match = _LAST_NUMBER.search(string) + if match: + next_ = str(int(match.group(1)) + 1) + start, end = match.span(1) + string = string[:max(end - len(next_), start)] + next_ + string[end:] + return string + + +def bump_major(version): + """Raise the major part of the version + + :param: version string + :return: the raised version string + :rtype: str + """ + verinfo = parse(version) + return format_version(verinfo['major'] + 1, 0, 0) + + +def bump_minor(version): + """Raise the minor part of the version + + :param: version string + :return: the raised version string + :rtype: str + """ + verinfo = parse(version) + return format_version(verinfo['major'], verinfo['minor'] + 1, 0) + + +def bump_patch(version): + """Raise the patch part of the version + + :param: version string + :return: the raised version string + :rtype: str + """ + verinfo = parse(version) + return format_version(verinfo['major'], verinfo['minor'], + verinfo['patch'] + 1) + + +def bump_prerelease(version): + """Raise the prerelease part of the version + + :param: version string + :return: the raised version string + :rtype: str + """ + verinfo = parse(version) + verinfo['prerelease'] = _increment_string(verinfo['prerelease'] or 'rc.0') + return format_version(verinfo['major'], verinfo['minor'], verinfo['patch'], + verinfo['prerelease']) + + +def bump_build(version): + """Raise the build part of the version + + :param: version string + :return: the raised version string + :rtype: str + """ + verinfo = parse(version) + verinfo['build'] = _increment_string(verinfo['build'] or 'build.0') + return format_version(verinfo['major'], verinfo['minor'], verinfo['patch'], + verinfo['prerelease'], verinfo['build']) diff --git a/rust/target_detect.py b/rust/target_detect.py new file mode 100644 index 00000000..904a9e4d --- /dev/null +++ b/rust/target_detect.py @@ -0,0 +1,159 @@ +"""Used to determine the Cargo targets from any given .rs file. + +This is very imperfect. It uses heuristics to try to detect targets. This +could be significantly improved by using "rustc --emit dep-info", however, +that may be a little tricky (and doesn't work on errors). See +https://github.com/rust-lang/cargo/issues/3211 +""" + +import os +from . import rust_proc, util + + +class TargetDetector(object): + + def __init__(self, window): + self.window = window + + def determine_targets(self, file_name): + """Detect the target/filters needed to pass to Cargo to compile + file_name. + Returns list of (target_src_path, target_command_line_args) tuples. + + :raises ProcessTerminatedError: Thread should shut down. + """ + # Try checking for target match in settings. + result = self._targets_manual_config(file_name) + if result: + return result + + # Try a heuristic to detect the filename. + result = rust_proc.slurp_json(self.window, + 'cargo metadata --no-deps'.split(), + cwd=os.path.dirname(file_name)) + if not result: + return [] + # Each "workspace" shows up as a separate package. + for package in result[0]['packages']: + root_path = os.path.dirname(package['manifest_path']) + targets = package['targets'] + # targets is list of dictionaries: + # {'kind': ['lib'], + # 'name': 'target-name', + # 'src_path': 'path/to/lib.rs'} + # src_path may be absolute or relative, fix it. + for target in targets: + if not os.path.isabs(target['src_path']): + target['src_path'] = os.path.join(root_path, target['src_path']) + target['src_path'] = os.path.normpath(target['src_path']) + + # Try exact filename matches. + result = self._targets_exact_match(targets, file_name) + if result: + return result + + # No exact match, try to find all targets with longest matching + # parent directory. + result = self._targets_longest_matches(targets, file_name) + if result: + return result + + # TODO: Alternatively, could run rustc directly without cargo. + # rustc -Zno-trans -Zunstable-options --error-format=json file_name + print('Rust Enhanced: Failed to find target for %r' % file_name) + return [] + + def _targets_manual_config(self, file_name): + """Check for Cargo targets in the Sublime settings.""" + # First check config for manual targets. + for project in util.get_setting('projects', {}).values(): + src_root = os.path.join(project.get('root', ''), 'src') + if not file_name.startswith(src_root): + continue + targets = project.get('targets', {}) + for tfile, tcmd in targets.items(): + if file_name == os.path.join(src_root, tfile): + return [(tfile, tcmd.split())] + else: + target = targets.get('_default', '') + if target: + # Unfortunately don't have the target src filename. + return [('', target)] + return None + + def _target_to_args(self, target): + """Convert target from Cargo metadata to Cargo command-line argument. + """ + # Targets have multiple "kinds" when you specify crate-type in + # Cargo.toml, like: + # crate-type = ["rlib", "dylib"] + # + # Libraries are the only thing that support this at this time, and + # generally you only use one command-line argument to build multiple + # "kinds" (--lib in this case). + # + # Caution: [[example]] that specifies crate-type had issues before + # 1.17. + # See https://github.com/rust-lang/cargo/pull/3556 and + # https://github.com/rust-lang/cargo/issues/3572 + # https://github.com/rust-lang/cargo/pull/3668 (ISSUE FIXED) + # + # For now, just grab the first kind since it will always result in the + # same arguments. + kind = target['kind'][0] + if kind in ('lib', 'rlib', 'dylib', 'cdylib', 'staticlib', 'proc-macro'): + return (target['src_path'], ['--lib']) + elif kind in ('bin', 'test', 'example', 'bench'): + return (target['src_path'], ['--' + kind, target['name']]) + elif kind in ('custom-build',): + # Currently no way to target build.rs explicitly. + # Or, run rustc (without cargo) on build.rs. + # TODO: "cargo check" seems to work + return None + else: + # Unknown kind, don't know how to build. + raise ValueError(kind) + + def _targets_exact_match(self, targets, file_name): + """Check for Cargo targets that exactly match the current file.""" + for target in targets: + if target['src_path'] == file_name: + args = self._target_to_args(target) + if args: + return [args] + return None + + def _targets_longest_matches(self, targets, file_name): + """Determine the Cargo targets that are in the same directory (or + parent) of the current file.""" + result = [] + # Find longest path match. + # TODO: This is sub-optimal, because it may result in multiple targets. + # Consider using the output of rustc --emit dep-info. + # See https://github.com/rust-lang/cargo/issues/3211 for some possible + # problems with that. + path_match = os.path.dirname(file_name) + found = False + found_lib = False + found_bin = False + while not found: + for target in targets: + if os.path.dirname(target['src_path']) == path_match: + target_args = self._target_to_args(target) + if target_args: + result.append(target_args) + found = True + if target_args[1][0] == '--bin': + found_bin = True + if target_args[1][0] == '--lib': + found_lib = True + p = os.path.dirname(path_match) + if p == path_match: + # Root path + break + path_match = p + # If the match is both --bin and --lib in the same directory, + # just do --bin. + if found_bin and found_lib: + result = [x for x in result if x[1][0] != '--bin'] + return result diff --git a/rust/util.py b/rust/util.py new file mode 100644 index 00000000..c252cfa5 --- /dev/null +++ b/rust/util.py @@ -0,0 +1,108 @@ +"""General utilities used by the Rust package.""" + +import sublime +import textwrap +import threading +import time +import os + + +def index_with(l, cb): + """Find the index of a value in a sequence using a callback. + + :param l: The sequence to search. + :param cb: Function to call, should return true if the given value matches + what you are searching for. + :returns: Returns the index of the match, or -1 if no match. + """ + for i, v in enumerate(l): + if cb(v): + return i + return -1 + + +def multiline_fix(s): + """Remove indentation from a multi-line string.""" + return textwrap.dedent(s).lstrip() + + +def get_setting(name, default=None): + """Retrieve a setting from Sublime settings.""" + pdata = sublime.active_window().project_data() + if pdata: + v = pdata.get('settings', {}).get(name) + if v is not None: + return v + settings = sublime.load_settings('RustEnhanced.sublime-settings') + v = settings.get(name) + if v is not None: + return v + settings = sublime.load_settings('Preferences.sublime-settings') + # XXX: Also check "Distraction Free"? + return settings.get(name, default) + + +_last_debug = time.time() + + +def debug(msg, *args): + """Display a general debug message.""" + global _last_debug + t = time.time() + d = t - _last_debug + _last_debug = t + n = threading.current_thread().name + print('%s +%.3f ' % (n, d), end='') + print(msg % args) + + +def get_rustc_version(window, cwd): + """Returns the rust version for the given directory. + + :Returns: A string such as '1.16.0' or '1.17.0-nightly'. + """ + from . import rust_proc + output = rust_proc.check_output(window, ['rustc', '--version'], cwd) + # Example outputs: + # rustc 1.15.1 (021bd294c 2017-02-08) + # rustc 1.16.0-beta.2 (bc15d5281 2017-02-16) + # rustc 1.17.0-nightly (306035c21 2017-02-18) + return output.split()[1] + + +def find_cargo_manifest(path): + """Find the Cargo.toml file in the given path, or any of its parents. + + :Returns: The path where Cargo.toml is found, or None. + """ + path = os.path.normpath(path) + if os.path.isfile(path): + path = os.path.dirname(path) + while True: + manifest = os.path.join(path, 'Cargo.toml') + if os.path.exists(manifest): + return path + parent = os.path.dirname(path) + if parent == path: + return None + path = parent + + +def active_view_is_rust(window=None, view=None): + """Determine if the current view is a Rust source file. + + :param window: The Sublime window (defaults to active window). + :param view: The view to check (defaults to active view). + + :Returns: True if it is a Rust source file, False if not. + """ + if view is None: + if window is None: + window = sublime.active_window() + view = window.active_view() + if not view: + return False + # Require it to be saved to disk. + if not view.file_name(): + return False + return 'source.rust' in view.scope_name(0) diff --git a/tests/README.md b/tests/README.md index 985437fa..f0a9675e 100644 --- a/tests/README.md +++ b/tests/README.md @@ -2,3 +2,12 @@ To run the tests in this directory, install the Sublime plugin [UnitTesting](https://github.com/randy3k/UnitTesting/) (most easily done with Package Control). Then in Sublime run the UnitTesting command from the Command Palette. + +You also need the following installed and in your PATH: +- Rust, Cargo, and Rustup +- `nightly` Rust toolchain. +- Clippy (https://github.com/Manishearth/rust-clippy) +- Cargo Script (https://github.com/DanielKeep/cargo-script) + +It also assumes you have not made any changes to the default RustEnhanced +settings. diff --git a/tests/error-tests/Cargo.lock b/tests/error-tests/Cargo.lock index c085d6c5..ded6aea4 100644 --- a/tests/error-tests/Cargo.lock +++ b/tests/error-tests/Cargo.lock @@ -1,4 +1,11 @@ [root] name = "error-tests" version = "0.1.0" +dependencies = [ + "dcrate 0.1.0", +] + +[[package]] +name = "dcrate" +version = "0.1.0" diff --git a/tests/error-tests/Cargo.toml b/tests/error-tests/Cargo.toml index d9be5d5d..b1225716 100644 --- a/tests/error-tests/Cargo.toml +++ b/tests/error-tests/Cargo.toml @@ -3,3 +3,4 @@ name = "error-tests" version = "0.1.0" [dependencies] +dcrate = {path = "dcrate" } diff --git a/tests/error-tests/benches/bench_err.rs b/tests/error-tests/benches/bench_err.rs index 7ac88ada..c1185fa5 100644 --- a/tests/error-tests/benches/bench_err.rs +++ b/tests/error-tests/benches/bench_err.rs @@ -1,6 +1,6 @@ // Can't have a regular bench because [feature(test)] is restricted // to nightly. -#[asdf] -// ^ERR The attribute `asdf` is currently unknown + #[asdf] +// ^^^^^^^ERR The attribute `asdf` is currently unknown fn f() {} diff --git a/tests/error-tests/dcrate/Cargo.lock b/tests/error-tests/dcrate/Cargo.lock new file mode 100644 index 00000000..08a575f2 --- /dev/null +++ b/tests/error-tests/dcrate/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "dcrate" +version = "0.1.0" + diff --git a/tests/error-tests/dcrate/Cargo.toml b/tests/error-tests/dcrate/Cargo.toml new file mode 100644 index 00000000..5dcab0ae --- /dev/null +++ b/tests/error-tests/dcrate/Cargo.toml @@ -0,0 +1,5 @@ +[package] +name = "dcrate" +version = "0.1.0" + +[dependencies] diff --git a/tests/error-tests/dcrate/src/lib.rs b/tests/error-tests/dcrate/src/lib.rs new file mode 100644 index 00000000..6f2994be --- /dev/null +++ b/tests/error-tests/dcrate/src/lib.rs @@ -0,0 +1,11 @@ +#[macro_export] +macro_rules! example { + ($submac:ident!( $($args:tt)* )) => ( + $submac!($($args)*) + ) +} + +#[macro_export] +macro_rules! inner { + ($x:expr) => ($x.missing()) +} diff --git a/tests/error-tests/examples/clippy_ex.rs b/tests/error-tests/examples/clippy_ex.rs new file mode 100644 index 00000000..1e414483 --- /dev/null +++ b/tests/error-tests/examples/clippy_ex.rs @@ -0,0 +1,17 @@ +// Testing a Clippy warning (char_lit_as_u8). + +fn clippy_example() { + println!("libf1"); + 'x' as u8; +// ^^^^^^^^^WARN casting character literal +// ^^^^^^^^^NOTE #[warn(char_lit_as_u8)] +// ^^^^^^^^^HELP Consider using a byte +// ^^^^^^^^^HELP for further information +// ^^^^^^^^^^WARN statement with no effect +// ^^^^^^^^^^NOTE #[warn(no_effect)] +// ^^^^^^^^^^HELP for further information +} + +fn main() { + clippy_example(); +} diff --git a/tests/error-tests/examples/err_ex.rs b/tests/error-tests/examples/err_ex.rs new file mode 100644 index 00000000..12fbe066 --- /dev/null +++ b/tests/error-tests/examples/err_ex.rs @@ -0,0 +1,3 @@ +fn main() { + asdf(); +} diff --git a/tests/error-tests/src/lib.rs b/tests/error-tests/src/lib.rs index 59005a96..2cf33213 100644 --- a/tests/error-tests/src/lib.rs +++ b/tests/error-tests/src/lib.rs @@ -1,15 +1,19 @@ #[cfg(test)] mod tests { fn bad(a: DoesNotExist) { - // ^ERR undefined or not in scope - // ^^ERR type name - // ^^^HELP no candidates +// ^^^^^^^^^^^^ERR(<1.16.0) undefined or not in scope +// ^^^^^^^^^^^^ERR(<1.16.0) type name +// ^^^^^^^^^^^^HELP(<1.16.0) no candidates +// ^^^^^^^^^^^^ERR(>=1.16.0,test) not found in this scope +// ^^^^^^^^^^^^ERR(>=1.16.0,test) cannot find type `DoesNotExist` } #[test] fn it_works() { asdf - // ^ERR unresolved name - // ^^ERR unresolved name +// ^^^^ERR(<1.16.0) unresolved name +// ^^^^ERR(<1.16.0) unresolved name +// ^^^^ERR(>=1.16.0,test) not found in this scope +// ^^^^ERR(>=1.16.0,test) cannot find value } } diff --git a/tests/error-tests/tests/E0005.rs b/tests/error-tests/tests/E0005.rs index 0e7a7156..0122b8f3 100644 --- a/tests/error-tests/tests/E0005.rs +++ b/tests/error-tests/tests/E0005.rs @@ -11,6 +11,6 @@ fn main() { let x = Some(1); let Some(y) = x; - // ^ERR pattern `None` not covered - // ^^ERR refutable pattern in local binding +// ^^^^^^^ERR pattern `None` not covered +// ^^^^^^^ERR refutable pattern in local binding } diff --git a/tests/error-tests/tests/arg-count-mismatch.rs b/tests/error-tests/tests/arg-count-mismatch.rs index 25245ccd..91f05767 100644 --- a/tests/error-tests/tests/arg-count-mismatch.rs +++ b/tests/error-tests/tests/arg-count-mismatch.rs @@ -10,11 +10,12 @@ // error-pattern: parameters were supplied -fn f(x: isize) { } -// ^ERR defined here +/*BEGIN*/fn f(x: isize) { +}/*END*/ +// ~ERR defined here // children without spans, spans with no labels // Should display error (with link) and a note of expected type. fn main() { let i: (); i = f(); } -// ^ERR expected 1 parameter -// ^^ERR this function takes 1 parameter +// ^^^ERR expected 1 parameter +// ^^^ERR this function takes 1 parameter diff --git a/tests/error-tests/tests/binop-mul-bool.rs b/tests/error-tests/tests/binop-mul-bool.rs index 5df43512..45df6189 100644 --- a/tests/error-tests/tests/binop-mul-bool.rs +++ b/tests/error-tests/tests/binop-mul-bool.rs @@ -11,5 +11,5 @@ // error-pattern:`*` cannot be applied to type `bool` fn main() { let x = true * false; } -// ^ERR binary operation -// ^^NOTE an implementation of +// ^^^^ERR binary operation +// ^^^^NOTE an implementation of diff --git a/tests/error-tests/tests/cast-to-unsized-trait-object-suggestion.rs b/tests/error-tests/tests/cast-to-unsized-trait-object-suggestion.rs new file mode 100644 index 00000000..85b51444 --- /dev/null +++ b/tests/error-tests/tests/cast-to-unsized-trait-object-suggestion.rs @@ -0,0 +1,20 @@ +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +fn main() { + &1 as Send; +// ^^^^^^^^^^ERR cast to unsized type +// ^^^^HELP try casting to +// ^^^^HELP &1 as &Send + Box::new(1) as Send; +// ^^^^^^^^^^^^^^^^^^^ERR cast to unsized type +// ^^^^HELP try casting to a `Box` instead: +// ^^^^HELP Box::new(1) as Box; +} diff --git a/tests/error-tests/tests/dead-code-ret.rs b/tests/error-tests/tests/dead-code-ret.rs index 5b9afdca..6e33dad9 100644 --- a/tests/error-tests/tests/dead-code-ret.rs +++ b/tests/error-tests/tests/dead-code-ret.rs @@ -11,12 +11,12 @@ // error-pattern: unreachable statement #![deny(unreachable_code)] -// ^NOTE lint level defined here +// ^^^^^^^^^^^^^^^^NOTE lint level defined here fn main() { return; println!("Paul is dead"); - // ^ERR unreachable statement +// ^^^^^^^^^^^^^^^^^^^^^^^^^ERR unreachable statement } // This is a test of macro expansion, should print error on println! diff --git a/tests/error-tests/tests/macro-expansion.rs b/tests/error-tests/tests/macro-expansion.rs new file mode 100644 index 00000000..118f6e90 --- /dev/null +++ b/tests/error-tests/tests/macro-expansion.rs @@ -0,0 +1,9 @@ +#[macro_use] +extern crate dcrate; + +fn main() { + // This ensures that the expansion of nested macros works correctly. + + example!(inner!(b" ")); +// ^^^^^^^^^^^^^^^^^^^^^^^ERR no method named `missing` +} diff --git a/tests/error-tests/tests/test_unicode.rs b/tests/error-tests/tests/test_unicode.rs index 7bdbc2d3..b2487179 100644 --- a/tests/error-tests/tests/test_unicode.rs +++ b/tests/error-tests/tests/test_unicode.rs @@ -2,5 +2,6 @@ fn main() { let foo = "❤"; - // ^WARN unused variable +// ^^^WARN unused variable +// ^^^NOTE(>=1.17.0) #[warn(unused_variables)] } diff --git a/tests/message-order/Cargo.lock b/tests/message-order/Cargo.lock new file mode 100644 index 00000000..dd7eb9a0 --- /dev/null +++ b/tests/message-order/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "message-order" +version = "0.1.0" + diff --git a/tests/message-order/Cargo.toml b/tests/message-order/Cargo.toml new file mode 100644 index 00000000..76257309 --- /dev/null +++ b/tests/message-order/Cargo.toml @@ -0,0 +1,5 @@ +[package] +name = "message-order" +version = "0.1.0" + +[dependencies] diff --git a/tests/message-order/dt b/tests/message-order/dt new file mode 100644 index 00000000..bcfb0d4f --- /dev/null +++ b/tests/message-order/dt @@ -0,0 +1,4946 @@ +dtrace: 1620 dynamic variable drops with non-empty dirty list + PID/THRD SYSCALL(args) = return +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: stat64("/Users/eric/Library/Application Support/Sublime Text 3/Installed Packages/Package Control.sublime-package\0", 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: stat64("/Users/eric/Library/Application Support/Sublime Text 3/Installed Packages/Package Control.sublime-package\0", 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x100) = 0 0 +20482/0x111bd2c: gettimeofday(0x7FFF544294F0, 0x0, 0x100) = 1488411655 0 +20482/0x111bd64: psynch_mutexwait(0x10BE86C58, 0x4FD9B0004FD9D03, 0x4FD9B00) = 83729667 0 +20482/0x111bd64: psynch_cvsignal(0x10BE86C98, 0x2A0000002A0100, 0x2A0000) = 257 0 +20482/0x111bd2c: psynch_cvwait(0x10BE86C98, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A0001002A0100, 0x2A0000) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A0001002A0100, 0x0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd2c: read(0x25, "debug [unoptimized + debuginfo] target(s) in 0.0 secs\n\0", 0x4000) = 54 0 +20482/0x111bd2c: sem_post(0x3, 0x7F89CD1F2400, 0x4000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7F89CD1F2400, 0x4000) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd2c: read(0x25, "\0", 0x4000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7F89CD1F2400, 0x4000) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7F89CD1F2400, 0x4000) = 0 0 +20482/0x111bd2c: wait4(0x523B, 0x7FFF544289CC, 0x1) = 21051 0 +20482/0x111bd2c: close(0x24) = 0 0 +20482/0x111bd2c: close(0x25) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +dtrace: 1961 dynamic variable drops with non-empty dirty list +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF544289CC, 0x1) = 0 0 +20482/0x111bd2c: gettimeofday(0x7FFF54429520, 0x0, 0x1) = 1488411657 0 +20482/0x111bd64: psynch_mutexwait(0x10BE86C58, 0x506020005060403, 0x5060200) = 84280323 0 +20482/0x111bd64: psynch_cvsignal(0x10BE86C98, 0x2A1500002A1600, 0x2A1500) = 257 0 +20482/0x111bd2c: psynch_cvwait(0x10BE86C98, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1501002A1600, 0x2A1500) = 0 0 +20482/0x111bd2c: stat64("/Users/eric/Library/Application Support/Sublime Text 3/Installed Packages/Package Control.sublime-package\0", 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x7FFF54428E28, 0x2A1500) = 0 0 +20482/0x111bd2c: gettimeofday(0x7FFF544294F0, 0x0, 0x2A1500) = 1488411657 0 +20482/0x111bd64: psynch_cvsignal(0x10BE86C98, 0x2A1600002A1700, 0x2A1600) = 257 0 +20482/0x111bd2c: psynch_cvwait(0x10BE86C98, 0x2A1601002A1700, 0x2A1600) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: gettimeofday(0x7000013960C0, 0x0, 0x700001396260) = 1488411657 0 +20482/0x111bd2c: psynch_mutexwait(0x10BE86C58, 0x508C4000508C603, 0x508C400) = 84461059 0 +20482/0x111bd2c: psynch_cvsignal(0x10BE86C98, 0x2A1700002A1800, 0x2A1700) = 257 0 +20482/0x111bd64: psynch_cvwait(0x10BE86C98, 0x2A1701002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x2A1700002A1800, 0x2A1700) = 0 0 +20482/0x111bd2c: sem_post(0x0, 0x0, 0x0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 + +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x3, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_wait(0x18, 0x10000000203, 0x100) = 0 0 +20482/0x111bd2c: sem_post(0x1A, 0x10000000203, 0x100) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 +20482/0x111bd64: select(0x0, 0x0, 0x0, 0x0, 0x7000013A2550) = 0 0 +20482/0x111bd64: select(0x1F, 0x7000013962E0, 0x700001396260, 0x7000013961E0, 0x7000013961D0) = 0 0 + diff --git a/tests/message-order/src/lib.rs b/tests/message-order/src/lib.rs new file mode 100644 index 00000000..60928fd9 --- /dev/null +++ b/tests/message-order/src/lib.rs @@ -0,0 +1,2 @@ +pub mod warning1; +pub mod warning2; diff --git a/tests/message-order/src/warning1.rs b/tests/message-order/src/warning1.rs new file mode 100644 index 00000000..867b1f5c --- /dev/null +++ b/tests/message-order/src/warning1.rs @@ -0,0 +1,7 @@ +fn unused_a() { + +} + +fn unused_b() { + +} diff --git a/tests/message-order/src/warning2.rs b/tests/message-order/src/warning2.rs new file mode 100644 index 00000000..9dc0c062 --- /dev/null +++ b/tests/message-order/src/warning2.rs @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +fn unused_in_2() { + +} diff --git a/tests/multi-targets/Cargo.toml b/tests/multi-targets/Cargo.toml index 48960d03..8c11640b 100644 --- a/tests/multi-targets/Cargo.toml +++ b/tests/multi-targets/Cargo.toml @@ -5,6 +5,13 @@ build = "build.rs" [dependencies] +[features] +nightly = [] +default = ["feat1"] +feat1 = [] +feat2 = [] +feat3 = [] + [[bin]] name = "otherbin" path = "src/altmain.rs" @@ -12,6 +19,7 @@ path = "src/altmain.rs" [[bin]] name = "multi-targets" path = "src/main.rs" +doc = false # If you specify an explicit bin, the Cargo will no automatically detect bins # in the bin/ directory. @@ -23,6 +31,14 @@ path = "src/bin/bin1.rs" name = "bin2" path = "src/bin/bin2.rs" +[[bin]] +name = "feats" +path = "src/bin/feats.rs" + +[[bin]] +name = "penv" +path = "src/bin/penv.rs" + [[example]] name = "ex1" path = "examples/ex1.rs" @@ -35,3 +51,10 @@ path = "examples/ex2.rs" name = "exlib" path = "examples/exlib.rs" crate-type = ["dylib"] +test = false + +[[example]] +name = "excdylib" +path = "examples/excdylib.rs" +crate-type = ["cdylib"] +test = false diff --git a/tests/multi-targets/examples/excdylib.rs b/tests/multi-targets/examples/excdylib.rs new file mode 100644 index 00000000..21d06aa1 --- /dev/null +++ b/tests/multi-targets/examples/excdylib.rs @@ -0,0 +1,3 @@ +pub fn somefunc() { + println!("somefunc"); +} diff --git a/tests/multi-targets/libs/cdylib/Cargo.lock b/tests/multi-targets/libs/cdylib/Cargo.lock new file mode 100644 index 00000000..a35a29b6 --- /dev/null +++ b/tests/multi-targets/libs/cdylib/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "cdylib" +version = "0.1.0" + diff --git a/tests/multi-targets/libs/cdylib/Cargo.toml b/tests/multi-targets/libs/cdylib/Cargo.toml new file mode 100644 index 00000000..a3ccd93a --- /dev/null +++ b/tests/multi-targets/libs/cdylib/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "cdylib" +version = "0.1.0" + +[lib] +crate-type = ["cdylib"] diff --git a/tests/multi-targets/libs/cdylib/src/lib.rs b/tests/multi-targets/libs/cdylib/src/lib.rs new file mode 100644 index 00000000..65df08d6 --- /dev/null +++ b/tests/multi-targets/libs/cdylib/src/lib.rs @@ -0,0 +1,2 @@ +fn f() { +} diff --git a/tests/multi-targets/libs/dylib/Cargo.lock b/tests/multi-targets/libs/dylib/Cargo.lock new file mode 100644 index 00000000..f49db359 --- /dev/null +++ b/tests/multi-targets/libs/dylib/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "dylib" +version = "0.1.0" + diff --git a/tests/multi-targets/libs/dylib/Cargo.toml b/tests/multi-targets/libs/dylib/Cargo.toml new file mode 100644 index 00000000..b956471c --- /dev/null +++ b/tests/multi-targets/libs/dylib/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "dylib" +version = "0.1.0" + +[lib] +crate-type = ["dylib"] diff --git a/tests/multi-targets/libs/dylib/src/lib.rs b/tests/multi-targets/libs/dylib/src/lib.rs new file mode 100644 index 00000000..65df08d6 --- /dev/null +++ b/tests/multi-targets/libs/dylib/src/lib.rs @@ -0,0 +1,2 @@ +fn f() { +} diff --git a/tests/multi-targets/libs/rlib/Cargo.lock b/tests/multi-targets/libs/rlib/Cargo.lock new file mode 100644 index 00000000..f7fe350e --- /dev/null +++ b/tests/multi-targets/libs/rlib/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "rlib" +version = "0.1.0" + diff --git a/tests/multi-targets/libs/rlib/Cargo.toml b/tests/multi-targets/libs/rlib/Cargo.toml new file mode 100644 index 00000000..da19b7c6 --- /dev/null +++ b/tests/multi-targets/libs/rlib/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "rlib" +version = "0.1.0" + +[lib] +crate-type = ["rlib"] diff --git a/tests/multi-targets/libs/rlib/src/lib.rs b/tests/multi-targets/libs/rlib/src/lib.rs new file mode 100644 index 00000000..65df08d6 --- /dev/null +++ b/tests/multi-targets/libs/rlib/src/lib.rs @@ -0,0 +1,2 @@ +fn f() { +} diff --git a/tests/multi-targets/libs/staticlib/Cargo.lock b/tests/multi-targets/libs/staticlib/Cargo.lock new file mode 100644 index 00000000..f7fe350e --- /dev/null +++ b/tests/multi-targets/libs/staticlib/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "rlib" +version = "0.1.0" + diff --git a/tests/multi-targets/libs/staticlib/Cargo.toml b/tests/multi-targets/libs/staticlib/Cargo.toml new file mode 100644 index 00000000..da19b7c6 --- /dev/null +++ b/tests/multi-targets/libs/staticlib/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "rlib" +version = "0.1.0" + +[lib] +crate-type = ["rlib"] diff --git a/tests/multi-targets/libs/staticlib/src/lib.rs b/tests/multi-targets/libs/staticlib/src/lib.rs new file mode 100644 index 00000000..65df08d6 --- /dev/null +++ b/tests/multi-targets/libs/staticlib/src/lib.rs @@ -0,0 +1,2 @@ +fn f() { +} diff --git a/tests/multi-targets/mystery.rs b/tests/multi-targets/mystery.rs index 850631e5..f735cbed 100644 --- a/tests/multi-targets/mystery.rs +++ b/tests/multi-targets/mystery.rs @@ -1 +1,4 @@ // This is an example of a Rust file that does not belong to any target. +fn main() { + println!("Hello Mystery"); +} diff --git a/tests/multi-targets/src/altmain.rs b/tests/multi-targets/src/altmain.rs index b4459935..5c792d5a 100644 --- a/tests/multi-targets/src/altmain.rs +++ b/tests/multi-targets/src/altmain.rs @@ -2,6 +2,7 @@ fn main() { println!("altmain"); } -fn warning_example() { -} -// ^WARN function is never used +/*BEGIN*/fn warning_example() { +}/*END*/ +// ~WARN function is never used +// ~NOTE(>=1.17.0) #[warn(dead_code)] diff --git a/tests/multi-targets/src/bin/bin2.rs b/tests/multi-targets/src/bin/bin2.rs index 8c1fd445..dbea9e5c 100644 --- a/tests/multi-targets/src/bin/bin2.rs +++ b/tests/multi-targets/src/bin/bin2.rs @@ -1,3 +1,5 @@ fn main() { - println!("bin1"); + let args: Vec = std::env::args().skip(1).collect(); + let result = args.join(" "); + println!("{}", result); } diff --git a/tests/multi-targets/src/bin/feats.rs b/tests/multi-targets/src/bin/feats.rs new file mode 100644 index 00000000..297805b6 --- /dev/null +++ b/tests/multi-targets/src/bin/feats.rs @@ -0,0 +1,14 @@ +fn main() { + print!("feats: "); + let mut v = Vec::new(); + if cfg!(feature="feat1") { + v.push("feat1"); + } + if cfg!(feature="feat2") { + v.push("feat2") + } + if cfg!(feature="feat3") { + v.push("feat3") + } + println!("{}", v.join(" ")); +} diff --git a/tests/multi-targets/src/bin/penv.rs b/tests/multi-targets/src/bin/penv.rs new file mode 100644 index 00000000..3174b3a1 --- /dev/null +++ b/tests/multi-targets/src/bin/penv.rs @@ -0,0 +1,5 @@ +fn main() { + for (key, value) in std::env::vars() { + println!("{}={}", key, value); + } +} diff --git a/tests/multi-targets/src/lib.rs b/tests/multi-targets/src/lib.rs index 8729d7cf..d8e3f210 100644 --- a/tests/multi-targets/src/lib.rs +++ b/tests/multi-targets/src/lib.rs @@ -4,7 +4,7 @@ pub fn libf1() { println!("libf1"); } -fn unused() { -} -// ^WARN function is never used - +/*BEGIN*/fn unused() { +}/*END*/ +// ~WARN function is never used +// ~NOTE(>=1.17.0) #[warn(dead_code)] diff --git a/tests/multi-targets/src/lmod1.rs b/tests/multi-targets/src/lmod1.rs index c4b1255f..b85830de 100644 --- a/tests/multi-targets/src/lmod1.rs +++ b/tests/multi-targets/src/lmod1.rs @@ -1,7 +1,8 @@ pub fn fmod1() { println!("fmod1"); d(); - // ^WARN deprecated +// ^WARN deprecated +// ^NOTE(>=1.17.0) #[warn(deprecated)] } #[deprecated] diff --git a/tests/multi-targets/src/main.rs b/tests/multi-targets/src/main.rs index 7569c1dc..6c0dd95d 100644 --- a/tests/multi-targets/src/main.rs +++ b/tests/multi-targets/src/main.rs @@ -1,3 +1,4 @@ + extern crate multi_targets; use multi_targets::*; diff --git a/tests/multi-targets/tests/common/helpers.rs b/tests/multi-targets/tests/common/helpers.rs index a92c107c..f3067e26 100644 --- a/tests/multi-targets/tests/common/helpers.rs +++ b/tests/multi-targets/tests/common/helpers.rs @@ -1,11 +1,13 @@ // Example of a module shared among test code. -pub fn helper() { +/*BEGIN*/pub fn helper() { -} -// ^WARN function is never used +}/*END*/ +// ~WARN function is never used +// ~NOTE(>=1.17.0) #[warn(dead_code)] -pub fn unused() { +/*BEGIN*/pub fn unused() { -} -// ^WARN function is never used +}/*END*/ +// ~WARN function is never used +// ~NOTE(>=1.17.0) #[warn(dead_code)] diff --git a/tests/rust_test_common.py b/tests/rust_test_common.py new file mode 100644 index 00000000..d7785b3a --- /dev/null +++ b/tests/rust_test_common.py @@ -0,0 +1,137 @@ +import sublime +import queue +import sys +import os +import unittest +import time +# Used for debugging. +from pprint import pprint + +# Depends on how you install the plugin. +plugin = sys.modules.get('sublime-rust', + sys.modules.get('Rust Enhanced', None)) +if not plugin: + raise ValueError('Couldn\'t find Rust Enhanced plugin.') +plugin_path = tuple(plugin.__path__)[0] +if plugin_path.endswith('.sublime-package'): + raise ValueError('Cannot run test with compressed package.') +rust_proc = plugin.rust.rust_proc +rust_thread = plugin.rust.rust_thread +cargo_settings = plugin.rust.cargo_settings +cargo_config = plugin.rust.cargo_config +target_detect = plugin.rust.target_detect +messages = plugin.rust.messages +util = plugin.rust.util +semver = plugin.rust.semver + + +def unescape(s): + # python 3.4 can use html.unescape() + return s.replace(' ', ' ')\ + .replace('&', '&')\ + .replace('<', '<')\ + .replace('>', '>') + + +class TestBase(unittest.TestCase): + + def setUp(self): + window = sublime.active_window() + # Clear any rust project settings. + data = window.project_data() + if 'cargo_build' in data.get('settings', {}): + del data['settings']['cargo_build'] + window.set_project_data(data) + self.settings = sublime.load_settings('RustEnhanced.sublime-settings') + self._orig_show_panel = self.settings.get('show_panel_on_build') + self.settings.set('show_panel_on_build', False) + plugin.cargo_build.ON_LOAD_MESSAGES_ENABLED = False + + def tearDown(self): + self.settings.set('show_panel_on_build', self._orig_show_panel) + plugin.cargo_build.ON_LOAD_MESSAGES_ENABLED = True + + def _get_rust_thread(self): + """Waits for a rust thread to get started and returns it.""" + for n in range(500): + t = rust_thread.THREADS.get(sublime.active_window().id()) + if t: + return t + time.sleep(0.01) + raise AssertionError('Rust thread never started.') + + def _run_build(self, command='build', **kwargs): + # Unfortunately, you can't pass arbitrary args when running 'build'. + # Although running cargo_exec directly isn't exactly the same as + # running 'build', it's close enough (we aren't using any options in + # the default .sublime-build file). + # window.run_command('build', {'variant': variant}) + window = sublime.active_window() + kwargs['command'] = command + window.run_command('cargo_exec', kwargs) + + def _with_open_file(self, filename, f, **kwargs): + """Opens filename (relative to the plugin) in a new view, calls + f(view) to perform the tests. + """ + window = sublime.active_window() + path = os.path.join(plugin_path, filename) + if not os.path.exists(path): + # Unfortunately there doesn't seem to be a good way to detect a + # failure to load. + raise ValueError('Can\'t find path %r' % path) + view = window.open_file(path) + q = queue.Queue() + + def async_test_view(): + try: + # Wait for view to finish loading. + for n in range(500): + if view.is_loading(): + time.sleep(0.01) + else: + break + else: + raise AssertionError('View never loaded.') + f(view, **kwargs) + except Exception as e: + q.put(e) + else: + q.put(None) + + try: + sublime.set_timeout_async(async_test_view, 0) + msg = q.get() + if msg: + raise msg + finally: + window.focus_view(view) + window.run_command('close_file') + + def _cargo_clean(self, view_or_path): + if isinstance(view_or_path, sublime.View): + path = os.path.dirname(view_or_path.file_name()) + else: + path = view_or_path + window = sublime.active_window() + rust_proc.check_output(window, + 'cargo clean'.split(), + path) + messages.clear_messages(window) + + +class AlteredSetting(object): + + """Utility to help with temporarily changing a setting.""" + + def __init__(self, name, value): + self.name = name + self.value = value + self.settings = sublime.load_settings('RustEnhanced.sublime-settings') + + def __enter__(self): + self.orig = self.settings.get(self.name) + self.settings.set(self.name, self.value) + + def __exit__(self, type, value, traceback): + self.settings.set(self.name, self.orig) diff --git a/tests/slow-build/Cargo.lock b/tests/slow-build/Cargo.lock new file mode 100644 index 00000000..3038bebe --- /dev/null +++ b/tests/slow-build/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "slow-build" +version = "0.1.0" + diff --git a/tests/slow-build/Cargo.toml b/tests/slow-build/Cargo.toml new file mode 100644 index 00000000..bd701e06 --- /dev/null +++ b/tests/slow-build/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "slow-build" +version = "0.1.0" +build = "build.rs" + +[dependencies] diff --git a/tests/slow-build/build.rs b/tests/slow-build/build.rs new file mode 100644 index 00000000..a4025503 --- /dev/null +++ b/tests/slow-build/build.rs @@ -0,0 +1,24 @@ +use std::thread; +use std::time::Duration; +use std::fs; + +fn touch(name: &str) { + let ents = fs::read_dir(".").unwrap(); + let nums = ents.filter_map(|e| { + let ent_name = e.unwrap().file_name().into_string().unwrap(); + if ent_name.starts_with(name) { + Some(ent_name[name.len()..].parse::().unwrap()) + } else { + None + } + }); + let max = nums.max().unwrap_or(0); + let fname = format!("{}{}", name, max+1); + fs::File::create(fname).unwrap(); +} + +fn main() { + touch("test-build-start-"); + thread::sleep(Duration::from_secs(3)); + touch("test-build-end-"); +} diff --git a/tests/slow-build/src/lib.rs b/tests/slow-build/src/lib.rs new file mode 100644 index 00000000..e69de29b diff --git a/tests/test_cargo_build.py b/tests/test_cargo_build.py new file mode 100644 index 00000000..e8ce9073 --- /dev/null +++ b/tests/test_cargo_build.py @@ -0,0 +1,444 @@ +"""Tests for Cargo build.""" + +import fnmatch +import os +import re +import sys + +from rust_test_common import * + +multi_target_root = os.path.join(plugin_path, + 'tests/multi-targets') + + +def exe(s): + return s + +if sys.platform == 'win32': + def exe(s): + return s + '.exe' + + +class TestCargoBuild(TestBase): + + def _run_build_wait(self, command='build', **kwargs): + self._run_build(command, **kwargs) + # Wait for it to finish. + self._get_rust_thread().join() + + def _get_build_output(self, window): + opanel = window.find_output_panel(plugin.rust.opanel.PANEL_NAME) + output = opanel.substr(sublime.Region(0, opanel.size())) + return output + + def setUp(self): + super(TestCargoBuild, self).setUp() + self._cargo_clean(multi_target_root) + + def test_regular_build(self): + """Test plain Cargo build.""" + self._with_open_file('tests/multi-targets/src/main.rs', + self._test_regular_build) + + def _test_regular_build(self, view): + self._run_build_wait() + path = os.path.join(multi_target_root, exe('target/debug/multi-targets')) + self.assertTrue(os.path.exists(path)) + + def test_build_with_target(self): + """Test Cargo build with target.""" + self._with_open_file('tests/multi-targets/src/main.rs', + self._test_build_with_target) + + def _test_build_with_target(self, view): + targets = [ + ('--bin bin1', [exe('bin1'), 'libmulti_targets.rlib']), + ('--bin bin2', [exe('bin2'), 'libmulti_targets.rlib']), + ('--bin otherbin', [exe('otherbin'), 'libmulti_targets.rlib']), + ('--bin multi-targets', [exe('multi-targets'), + 'libmulti_targets.rlib']), + ('--lib', ['libmulti_targets.rlib']), + # Not clear to me why it produces ex1-* files. + ('--example ex1', [exe('examples/ex1'), exe('examples/ex1-*'), + 'libmulti_targets.rlib']), + # I'm actually uncertain why Cargo builds all bins here. + ('--test test1', [exe('bin1'), exe('bin2'), exe('multi-targets'), + exe('otherbin'), exe('feats'), exe('penv'), + 'libmulti_targets.rlib', 'test1-*']), + # bench requires nightly + ] + window = view.window() + for target, expected_files in targets: + self._cargo_clean(multi_target_root) + window.run_command('cargo_set_target', {'variant': 'build', + 'target': target}) + self._run_build_wait() + debug = os.path.join(multi_target_root, 'target/debug') + files = os.listdir(debug) + files = files + [os.path.join('examples', x) for x in + os.listdir(os.path.join(debug, 'examples'))] + files = [x for x in files if + os.path.isfile(os.path.join(debug, x)) and + not x.startswith('.') and + not x.endswith('.pdb')] + files.sort() + expected_files.sort() + for file, expected_file in zip(files, expected_files): + if not fnmatch.fnmatch(file, expected_file): + raise AssertionError('Lists differ: %r != %r' % ( + files, expected_files)) + + def test_profile(self): + """Test changing the profile.""" + self._with_open_file('tests/multi-targets/src/main.rs', + self._test_profile) + + def _test_profile(self, view): + window = view.window() + window.run_command('cargo_set_profile', {'target': None, + 'profile': 'release'}) + self._run_build_wait() + self.assertTrue(os.path.exists( + os.path.join(multi_target_root, exe('target/release/multi-targets')))) + self.assertFalse(os.path.exists( + os.path.join(multi_target_root, 'target/debug'))) + + self._cargo_clean(multi_target_root) + window.run_command('cargo_set_profile', {'target': None, + 'profile': 'dev'}) + self._run_build_wait() + self.assertFalse(os.path.exists( + os.path.join(multi_target_root, exe('target/release/multi-targets')))) + self.assertTrue(os.path.exists( + os.path.join(multi_target_root, 'target/debug'))) + + def test_target_triple(self): + """Test target triple.""" + self._with_open_file('tests/multi-targets/src/main.rs', + self._test_target_triple) + + def _test_target_triple(self, view): + window = view.window() + # Use a fake triple, since we don't want to assume what you have + # installed. + window.run_command('cargo_set_triple', {'target': None, + 'target_triple': 'a-b-c'}) + settings = cargo_settings.CargoSettings(window) + settings.load() + cmd_info = cargo_settings.CARGO_COMMANDS['build'] + manifest_dir = util.find_cargo_manifest(view.file_name()) + cmd = settings.get_command(cmd_info, manifest_dir)['command'] + self.assertEqual(cmd, ['cargo', 'build', '--target', 'a-b-c', + '--message-format=json']) + + def test_toolchain(self): + """Test changing toolchain.""" + self._with_open_file('tests/multi-targets/src/main.rs', + self._test_toolchain) + + def _test_toolchain(self, view): + window = view.window() + # Variant + window.run_command('cargo_set_toolchain', {'which': 'variant', + 'variant': 'build', + 'toolchain': 'nightly'}) + settings = cargo_settings.CargoSettings(window) + settings.load() + cmd_info = cargo_settings.CARGO_COMMANDS['build'] + manifest_dir = util.find_cargo_manifest(view.file_name()) + cmd = settings.get_command(cmd_info, manifest_dir)['command'] + self.assertEqual(cmd, ['cargo', '+nightly', 'build', + '--message-format=json']) + + # Variant clear. + window.run_command('cargo_set_toolchain', {'which': 'variant', + 'variant': 'build', + 'toolchain': None}) + settings.load() + cmd_info = cargo_settings.CARGO_COMMANDS['build'] + manifest_dir = util.find_cargo_manifest(view.file_name()) + cmd = settings.get_command(cmd_info, manifest_dir)['command'] + self.assertEqual(cmd, ['cargo', 'build', + '--message-format=json']) + + # Target + window.run_command('cargo_set_toolchain', {'which': 'target', + 'target': '--bin bin1', + 'toolchain': 'nightly'}) + window.run_command('cargo_set_target', {'variant': 'build', + 'target': '--bin bin1'}) + settings.load() + manifest_dir = util.find_cargo_manifest(view.file_name()) + cmd = settings.get_command(cmd_info, manifest_dir)['command'] + self.assertEqual(cmd, ['cargo', '+nightly', 'build', '--bin', 'bin1', + '--message-format=json']) + + def test_auto_target(self): + """Test run with "auto" target.""" + self._with_open_file('tests/multi-targets/src/bin/bin1.rs', + self._test_auto_target) + + def _test_auto_target(self, view): + window = view.window() + window.run_command('cargo_set_target', {'variant': 'run', + 'target': 'auto'}) + self._run_build_wait('run') + output = self._get_build_output(window) + # (?m) enables multiline mode. + self.assertRegex(output, '(?m)^bin1$') + + def test_run_with_args(self): + """Test run with args.""" + self._with_open_file('tests/multi-targets/src/bin/bin2.rs', + self._test_run_with_args) + + def _test_run_with_args(self, view): + window = view.window() + # Curly braces to ensure it is not captured as JSON. + self._run_build_wait('run', + settings={'extra_run_args': '{this is a test}', + 'target': '--bin bin2'}) + output = self._get_build_output(window) + self.assertRegex(output, '(?m)^{this is a test}$') + + def test_test(self): + """Test "Test" variant.""" + self._with_open_file('tests/multi-targets/src/bin/bin1.rs', + self._test_test) + + def _test_test(self, view): + window = view.window() + self._run_build_wait('test') + output = self._get_build_output(window) + self.assertRegex(output, '(?m)^test sample_test1 \.\.\. ok$') + self.assertRegex(output, '(?m)^test sample_test2 \.\.\. ok$') + + def test_test_with_args(self): + """Test "Test (with args) variant.""" + self._with_open_file('tests/multi-targets/tests/test2.rs', + self._test_test_with_args) + + def _test_test_with_args(self, view): + window = view.window() + self._run_build_wait('test', + settings={'extra_run_args': 'sample_test2'}) + output = self._get_build_output(window) + self.assertNotRegex(output, '(?m)^test sample_test1 \.\.\. ') + self.assertRegex(output, '(?m)^test sample_test2 \.\.\. ok') + + def test_check(self): + """Test "Check" variant.""" + rustc_version = util.get_rustc_version(sublime.active_window(), + plugin_path) + if plugin.rust.semver.match(rustc_version, '<1.16.0'): + print('Skipping "Check" test, need rustc >= 1.16') + return + self._with_open_file('tests/error-tests/examples/err_ex.rs', + self._test_check) + + def _test_check(self, view): + self._run_build_wait('check', + settings={'target': '--example err_ex'}) + self._check_added_message(view.window(), view.file_name(), + r'not found in this scope') + + def test_bench(self): + """Test "Bench" variant.""" + self._with_open_file('tests/multi-targets/benches/bench1.rs', + self._test_bench) + + def _test_bench(self, view): + window = view.window() + window.run_command('cargo_set_toolchain', {'which': 'variant', + 'variant': 'bench', + 'toolchain': 'nightly'}) + self._run_build_wait('bench') + output = self._get_build_output(window) + self.assertRegex(output, '(?m)^test example1 \.\.\. bench:') + self.assertRegex(output, '(?m)^test example2 \.\.\. bench:') + + def test_clean(self): + """Test "Clean" variant.""" + self._with_open_file('tests/multi-targets/src/main.rs', + self._test_clean) + + def _test_clean(self, view): + self._run_build_wait() + target = os.path.join(multi_target_root, + exe('target/debug/multi-targets')) + self.assertTrue(os.path.exists(target)) + self._run_build_wait('clean') + self.assertFalse(os.path.exists(target)) + + def test_document(self): + """Test "Document" variant.""" + self._with_open_file('tests/multi-targets/src/lib.rs', + self._test_document) + + def _test_document(self, view): + target = os.path.join(multi_target_root, + 'target/doc/multi_targets/index.html') + self.assertFalse(os.path.exists(target)) + self._run_build_wait('doc') + self.assertTrue(os.path.exists(target)) + + def test_clippy(self): + """Test "Clippy" variant.""" + self._with_open_file('tests/error-tests/examples/clippy_ex.rs', + self._test_clippy) + + def _test_clippy(self, view): + window = view.window() + window.run_command('cargo_set_toolchain', {'which': 'variant', + 'variant': 'clippy', + 'toolchain': 'nightly'}) + self._run_build_wait('clippy') + # This is a relatively simple test to verify Clippy has run. + self._check_added_message(window, view.file_name(), r'char_lit_as_u8') + + def _check_added_message(self, window, filename, pattern): + msgs = messages.WINDOW_MESSAGES[window.id()] + path_msgs = msgs['paths'][filename] + for msg in path_msgs: + if re.search(pattern, unescape(msg['message'])): + break + else: + raise AssertionError('Failed to find %r' % pattern) + + def test_script(self): + """Test "Script" variant.""" + self._with_open_file('tests/multi-targets/mystery.rs', + self._test_script) + + def _test_script(self, view): + window = view.window() + self._run_build_wait('script') + output = self._get_build_output(window) + self.assertRegex(output, '(?m)^Hello Mystery$') + + def test_features(self): + """Test feature selection.""" + self._with_open_file('tests/multi-targets/src/bin/feats.rs', + self._test_features) + + def _test_features(self, view): + window = view.window() + window.run_command('cargo_set_target', {'variant': 'run', + 'target': '--bin feats'}) + self._run_build_wait('run') + output = self._get_build_output(window) + self.assertRegex(output, '(?m)^feats: feat1$') + + window.run_command('cargo_set_features', {'target': None, + 'no_default_features': True, + 'features': ''}) + self._run_build_wait('run') + output = self._get_build_output(window) + self.assertRegex(output, '(?m)^feats: $') + + window.run_command('cargo_set_features', {'target': None, + 'no_default_features': False, + 'features': 'feat3'}) + self._run_build_wait('run') + output = self._get_build_output(window) + self.assertRegex(output, '(?m)^feats: feat1 feat3$') + + window.run_command('cargo_set_features', {'target': None, + 'no_default_features': True, + 'features': 'feat2 feat3'}) + self._run_build_wait('run') + output = self._get_build_output(window) + self.assertRegex(output, '(?m)^feats: feat2 feat3$') + + window.run_command('cargo_set_features', {'target': None, + 'no_default_features': True, + 'features': 'ALL'}) + self._run_build_wait('run') + output = self._get_build_output(window) + self.assertRegex(output, '(?m)^feats: feat1 feat2 feat3$') + + def test_rust_env(self): + """Test setting rust_env.""" + self._with_open_file('tests/multi-targets/src/bin/penv.rs', + self._test_rust_env) + + def _test_rust_env(self, view): + window = view.window() + with AlteredSetting('rust_env', {'RUST_TEST_ENV': '1234567890'}): + window.run_command('cargo_set_target', {'variant': 'run', + 'target': '--bin penv'}) + self._run_build_wait('run') + output = self._get_build_output(window) + self.assertRegex(output, '(?m)^RUST_TEST_ENV=1234567890$') + + def test_build_env(self): + """Test setting build environment variables.""" + self._with_open_file('tests/multi-targets/src/bin/penv.rs', + self._test_build_env) + + def _test_build_env(self, view): + window = view.window() + settings = cargo_settings.CargoSettings(window) + settings.load() + settings.set_with_target(multi_target_root, '--bin penv', 'env', + {'RUST_BUILD_ENV_TEST': 'abcdef'}) + window.run_command('cargo_set_target', {'variant': 'run', + 'target': '--bin penv'}) + self._run_build_wait('run') + output = self._get_build_output(window) + self.assertRegex(output, '(?m)^RUST_BUILD_ENV_TEST=abcdef$') + + def test_auto_build(self): + """Test "auto" build.""" + tests = [ + # This should probably automatically use nightly? + ('benches/bench1.rs', r'may not be used on the stable release channel'), + ('examples/ex1.rs', r'(?m)^ex1$'), + ('src/bin/bin1.rs', r'(?m)^bin1$'), + ('src/altmain.rs', r'(?m)^altmain$'), + ('src/lib.rs', r'\[Running: cargo build --lib'), + ('src/lmod1.rs', r'\[Running: cargo build --lib'), + ('src/main.rs', r'(?m)^Hello$'), + ('tests/test1.rs', r'(?m)^test sample_test1 \.\.\. ok$'), + ] + for path, pattern in tests: + self._with_open_file('tests/multi-targets/' + path, + self._test_auto_build, pattern=pattern) + + def _test_auto_build(self, view, pattern=None): + window = view.window() + self._run_build_wait('auto') + output = self._get_build_output(window) + self.assertRegex(output, pattern) + + def test_ambiguous_auto_build(self): + """Test "auto" build with indeterminate target.""" + self._with_open_file('tests/multi-targets/tests/common/helpers.rs', + self._test_ambiguous_auto_build) + + def _test_ambiguous_auto_build(self, view): + window = view.window() + sqp = window.__class__.show_quick_panel + window.__class__.show_quick_panel = self._quick_panel + try: + self._test_ambiguous_auto_build2(view) + finally: + window.__class__.show_quick_panel = sqp + + def _quick_panel(self, items, on_done, flags=0, + selected_index=-1, on_highlighted=None): + self.assertEqual(items, self.quick_panel_items) + on_done(self.quick_panel_index) + + def _test_ambiguous_auto_build2(self, view): + window = view.window() + self.quick_panel_items = ['--test test1', '--test test2'] + self.quick_panel_index = 0 + self._run_build_wait('auto') + output = self._get_build_output(window) + self.assertRegex(output, r'\[Running: cargo test --test test1 ') + + self.quick_panel_index = 1 + self._run_build_wait('auto') + output = self._get_build_output(window) + self.assertRegex(output, r'\[Running: cargo test --test test2 ') diff --git a/tests/test_interrupt.py b/tests/test_interrupt.py new file mode 100644 index 00000000..98ad2c41 --- /dev/null +++ b/tests/test_interrupt.py @@ -0,0 +1,240 @@ +"""Tests to exercise interrupting rust threads.""" + +import sublime + +import glob +import os +import time +import types +from rust_test_common import * + + +pattern = os.path.normpath( + os.path.join(plugin_path, 'tests/slow-build/test-build')) + + +class TestInterrupt(TestBase): + + def setUp(self): + super(TestInterrupt, self).setUp() + self._cleanup() + self.terminated = [] + + def tearDown(self): + super(TestInterrupt, self).tearDown() + self._cleanup() + + def _cleanup(self): + [os.unlink(x) for x in self._files()] + + def _wrap_terminate(self, r_thread): + """Add wrapper around RustProc.terminate() to catch when it is + terminated.""" + def terminate(s): + self.terminated.append(s) + return r_thread.__class__.terminate(s) + r_thread.terminate = types.MethodType(terminate, r_thread) + + def test_slow_check(self): + """Test interrupting syntax check. + + This works by launching a thread to start the test, waiting 1 second, + then launching another thread which should interrupt the first. + + The slow-build crate has a build.rs which forces the build to take + about 3 seconds to complete. + + Unfortunately there is not a simple way to check if the build process + is running, so it just drops some files (like "test-build-start-#") to + indicate that it started and stopped. Not perfect, but it should + work. + + This test is sensitive to timings, so it may fail on a slow/busy + computer. If it's a problem, the sleeps can be made longer. + """ + self._with_open_file('tests/slow-build/src/lib.rs', + self._test_slow_check) + + def _test_slow_check(self, view): + self._cargo_clean(view) + + # Keep track of when a thread is terminated. + t1 = plugin.SyntaxCheckPlugin.RustSyntaxCheckThread(view) + t2 = plugin.SyntaxCheckPlugin.RustSyntaxCheckThread(view) + self._wrap_terminate(t1) + self._wrap_terminate(t2) + + # Start the syntax check threads. + t1.start() + + self._wait_for_start() + start = time.time() + + # Start a new thread to interrupt the first. + t2.start() + # Let the thread spin up. + time.sleep(0.5) + self.assertFalse(t1.is_alive()) + t1.join() + t2.join() + duration = time.time() - start + self.assertAlmostEqual(duration, 4.0, delta=1.0) + self.assertEqual(self.terminated, [t1]) + self.assertEqual(self._files(), + [pattern + '-start-1', + pattern + '-start-2', + pattern + '-end-1']) + + def test_build_cancel(self): + """Test manually canceling a build.""" + # So it doesn't hide the UnitTest output panel. + self._with_open_file('tests/slow-build/src/lib.rs', + self._test_build_cancel) + + def _test_build_cancel(self, view): + self._cargo_clean(view) + window = view.window() + self._run_build() + self._wait_for_start() + t = self._get_rust_thread() + self._wrap_terminate(t) + window.run_command('rust_cancel') + # Sleep long enough to make sure the build didn't continue running. + time.sleep(4) + self.assertEqual(self.terminated, [t]) + # Start, but no end. + self.assertEqual(self._files(), [pattern + '-start-1']) + + def test_syntax_check_cancel(self): + """Test manually canceling syntax check.""" + self._with_open_file('tests/slow-build/src/lib.rs', + self._test_syntax_check_cancel) + + def _test_syntax_check_cancel(self, view): + self._cargo_clean(view) + t = plugin.SyntaxCheckPlugin.RustSyntaxCheckThread(view) + self._wrap_terminate(t) + t.start() + self._wait_for_start() + view.window().run_command('rust_cancel') + # Sleep long enough to make sure the build didn't continue running. + time.sleep(4) + self.assertEqual(self.terminated, [t]) + # Start, but no end. + self.assertEqual(self._files(), [pattern + '-start-1']) + + def test_syntax_check_while_build(self): + """Test starting a syntax check while build is running.""" + self._with_open_file('tests/slow-build/src/lib.rs', + self._test_syntax_check_while_build) + + def _test_syntax_check_while_build(self, view): + self._cargo_clean(view) + self._run_build() + self._wait_for_start() + build_t = self._get_rust_thread() + self._wrap_terminate(build_t) + # Start a syntax check, it should not be allowed to proceed. + check_t = plugin.SyntaxCheckPlugin.RustSyntaxCheckThread(view) + self._wrap_terminate(check_t) + # This thread will silently exit without running. + check_t.start() + time.sleep(4) + self.assertEqual(self.terminated, []) + self.assertEqual(self._files(), + [pattern + '-start-1', + pattern + '-end-1']) + + def test_build_while_syntax_check(self): + """Test starting a build while a syntax check is running.""" + self._with_open_file('tests/slow-build/src/lib.rs', + self._test_build_while_syntax_check) + + def _test_build_while_syntax_check(self, view): + self._cargo_clean(view) + check_t = plugin.SyntaxCheckPlugin.RustSyntaxCheckThread(view) + self._wrap_terminate(check_t) + check_t.start() + self._wait_for_start() + # Should silently kill the syntax check thread. + self._run_build() + build_t = self._get_rust_thread() + self._wrap_terminate(build_t) + time.sleep(4) + self.assertEqual(self.terminated, [check_t]) + self.assertEqual(self._files(), + [pattern + '-start-1', + pattern + '-start-2', + pattern + '-end-1']) + + def test_build_with_save(self): + """Test starting a build with a dirty file.""" + self._with_open_file('tests/slow-build/src/lib.rs', + self._test_build_with_save) + + def _test_build_with_save(self, view): + self._cargo_clean(view) + # Trigger on_save for syntax checking. + view.run_command('save') + # Doing this immediately afterwards should cancel the syntax check + # before it gets a chance to do much. + self._run_build() + build_t = self._get_rust_thread() + self._wrap_terminate(build_t) + time.sleep(4) + self.assertEqual(self._files(), + [pattern + '-start-1', + pattern + '-end-1']) + # Clear dirty flag so that closing the view does not pop up a + # confirmation box. + view.run_command('revert') + + def test_concurrent_build(self): + """Test starting builds at the same time.""" + self._with_open_file('tests/slow-build/src/lib.rs', + self._test_concurrent_build) + + def _test_concurrent_build(self, view): + ok_value = True + + def ok_cancel_dialog(msg, ok_title=None): + return ok_value + + orig_ok_cancel_dialog = sublime.ok_cancel_dialog + sublime.ok_cancel_dialog = ok_cancel_dialog + try: + self._cargo_clean(view) + self._run_build() + self._wait_for_start() + build_t = self._get_rust_thread() + self._wrap_terminate(build_t) + # Start a second build. + self._run_build() + time.sleep(1) + self.assertEqual(self.terminated, [build_t]) + # Start again, but hit cancel. + ok_value = False + self._run_build() + time.sleep(4) + # Should not have interrupted. + self.assertEqual(self.terminated, [build_t]) + self.assertEqual(self._files(), + [pattern + '-start-1', + pattern + '-start-2', + pattern + '-end-1']) + finally: + sublime.ok_cancel_dialog = orig_ok_cancel_dialog + + def _wait_for_start(self): + for _ in range(50): + time.sleep(0.1) + if self._files() == [pattern + '-start-1']: + break + else: + raise AssertionError('Did not catch initial start: %r' % ( + self._files(),)) + + def _files(self): + files = glob.glob(pattern + '-*') + files.sort(key=os.path.getctime) + return files diff --git a/tests/test_syntax_check.py b/tests/test_syntax_check.py index 05aa5957..bb871ad2 100755 --- a/tests/test_syntax_check.py +++ b/tests/test_syntax_check.py @@ -1,118 +1,49 @@ -import os -import queue -import re -import sys -import time -import unittest -import sublime -from pprint import pprint -# Depends on how you install the plugin. -plugin = sys.modules.get('sublime-rust', sys.modules.get('Rust Enhanced', None)) -if not plugin: - raise ValueError('Couldn\'t find Rust Enhanced plugin.') -plugin_path = tuple(plugin.__path__)[0] -if plugin_path.endswith('.sublime-package'): - raise ValueError('Cannot run test with compressed package.') - """Tests to exercise the on-save syntax checking. This currently runs on Rust 1.15. """ -# TODO -# - manual config targets - -class TestSyntaxCheck(unittest.TestCase): - - def _with_open_file(self, filename, f): - """Opens filename (relative to the plugin) in a new view, calls - f(view) to perform the tests. - """ - window = sublime.active_window() - path = os.path.join(plugin_path, filename) - view = window.open_file(path) - q = queue.Queue() - - def async_test_view(): - try: - # Wait for view to finish loading. - for n in range(500): - if view.is_loading(): - time.sleep(0.01) - else: - break - else: - raise AssertionError('View never loaded.') - # Run the tests on this view. - f(view) - except Exception as e: - q.put(e) - else: - q.put(None) - try: - sublime.set_timeout_async(async_test_view, 0) - msg = q.get() - if msg: - raise msg - finally: - window.focus_view(view) - window.run_command('close_file') - - def test_multi_targets(self): - """Test automatic target detection.""" - - expected_targets = [ - # Exact target name matches. - ('src/lib.rs', [('src/lib.rs', '--lib')]), - ('src/main.rs', [('src/main.rs', '--bin multi-targets')]), - ('src/bin/bin1.rs', [('src/bin/bin1.rs', '--bin bin1')]), - ('src/bin/bin2.rs', [('src/bin/bin2.rs', '--bin bin2')]), - ('src/altmain.rs', [('src/altmain.rs', '--bin otherbin')]), - ('examples/ex1.rs', [('examples/ex1.rs', '--example ex1')]), - ('examples/ex2.rs', [('examples/ex2.rs', '--example ex2')]), - ('examples/exlib.rs', [('examples/exlib.rs', '--example exlib')]), - ('tests/test1.rs', [('tests/test1.rs', '--test test1')]), - ('tests/test2.rs', [('tests/test2.rs', '--test test2')]), - ('benches/bench1.rs', [('benches/bench1.rs', '--bench bench1')]), - ('benches/bench2.rs', [('benches/bench2.rs', '--bench bench2')]), - # Random module in src/, defaults to --lib. - ('src/lmod1.rs', [('src/lib.rs', '--lib')]), - # Target failure. Perhaps this should run rustc directly? - ('mystery.rs', []), - ('build.rs', []), - # Shared module in test, not possible to easily determine which - # test it belongs to. - ('tests/common/helpers.rs', [('tests/test1.rs', '--test test1'), - ('tests/test2.rs', '--test test2')]), - # proc-macro kind - ('pmacro/src/lib.rs', [('pmacro/src/lib.rs', '--lib')]), +import re +from rust_test_common import * - ] - for (path, targets) in expected_targets: - path = os.path.join('tests', 'multi-targets', path) - targets = [(os.path.normpath( - os.path.join(plugin_path, 'tests', 'multi-targets', x[0])), x[1]) for x in targets] - self._with_open_file(path, lambda view: self._test_multi_targets(view, targets)) - def _test_multi_targets(self, view, expected_targets): - expected_targets.sort() - # Check the targets match expectation. - e = plugin.SyntaxCheckPlugin.rustPluginSyntaxCheckEvent() - targets = e.determine_targets(view.settings(), view.file_name()) - targets.sort() - self.assertEqual(targets, expected_targets) +class TestSyntaxCheck(TestBase): + def setUp(self): + super(TestSyntaxCheck, self).setUp() + self.rustc_version = util.get_rustc_version(sublime.active_window(), + plugin_path) def test_messages(self): """Test message generation. Each of the listed files has comments that annotate where a message - should appear. The carets in front indicate the number of lines above - the comment where the last line of the message is. This allows for - multiple messages to be on the same line. For example: - // ^ERR expected 1 parameter - // ^^ERR this function takes 1 parameter + should appear. Single-line messages use carets to specify where the + message should appear on the previous line. Use multiple comments if + there are multiple messages. Example: + + // ^^^^ERR binary operation + // ^^^^NOTE an implementation of + + Multi-line messages use a marker to indicate where it starts and ends, + and then comment lines below starting with ~ specify the messages that + should appear for that region. Example: + + /*BEGIN*/struct S { + recursive: S + }/*END*/ + // ~ERR recursive type has infinite size + // ~ERR recursive type + // ~HELP insert indirection + + You can place restrictions on the message in parenthesis after the + level (comma separated). This can be a semver check, or the word + "test" to indicate that this message only shows up in a cfg(test) + block. Examples: + + // ^^^ERR(<1.16.0) error msg before 1.16 + // ^^^ERR(>=1.16.0,test) error msg after 1.16, test block only These tests are somewhat fragile, as new versions of Rust change the formatting of messages. Hopefully these examples are relatively @@ -128,73 +59,210 @@ def test_messages(self): 'error-tests/tests/arg-count-mismatch.rs', # "children" with spans 'error-tests/tests/binop-mul-bool.rs', - # This is currently broken. - #'error-tests/tests/const-err.rs', + # This is currently broken (-Zno-trans does not produce errors). + # 'error-tests/tests/const-err.rs', # Macro-expansion test. 'error-tests/tests/dead-code-ret.rs', # "code" test 'error-tests/tests/E0005.rs', # unicode in JSON 'error-tests/tests/test_unicode.rs', + # message with suggestion + 'error-tests/tests/cast-to-unsized-trait-object-suggestion.rs', # error in a cfg(test) section 'error-tests/src/lib.rs', + 'error-tests/tests/macro-expansion.rs', # Workspace tests. 'workspace/workspace1/src/lib.rs', 'workspace/workspace1/src/anothermod/mod.rs', 'workspace/workspace2/src/lib.rs', 'workspace/workspace2/src/somemod.rs', ] + methods = ['no-trans'] + if semver.match(self.rustc_version, '>=1.16.0'): + methods.append('check') + else: + print('Skipping check, need rust >= 1.16.') for path in to_test: path = os.path.join('tests', path) - self._with_open_file(path, self._test_messages) + self._with_open_file(path, self._test_messages, + methods=methods) + + def test_clippy_messages(self): + """Test clippy messages.""" + to_test = [ + 'tests/error-tests/examples/clippy_ex.rs', + ] + for path in to_test: + self._with_open_file(path, self._test_messages, methods=['clippy']) - def _test_messages(self, view): + def _test_messages(self, view, methods=None): # Trigger the generation of messages. - cwd = os.path.dirname(view.file_name()) - e = plugin.SyntaxCheckPlugin.rustPluginSyntaxCheckEvent() phantoms = [] - regions = [] + view_regions = [] + def collect_phantoms(v, key, region, content, layout, on_navigate): if v == view: phantoms.append((region, content)) + def collect_regions(v, key, regions, scope, icon, flags): if v == view: - regions.extend(regions) - e._add_phantom = collect_phantoms - e._add_regions = collect_regions + view_regions.extend(regions) + + m = plugin.rust.messages + orig_add_phantom = m._sublime_add_phantom + orig_add_regions = m._sublime_add_regions + m._sublime_add_phantom = collect_phantoms + m._sublime_add_regions = collect_regions + try: + for method in methods: + with AlteredSetting('rust_syntax_checking_method', method): + self._test_messages2(view, phantoms, view_regions, method) + phantoms.clear() + view_regions.clear() + finally: + m._sublime_add_phantom = orig_add_phantom + m._sublime_add_regions = orig_add_regions + + def _test_messages2(self, view, phantoms, regions, method): + e = plugin.SyntaxCheckPlugin.RustSyntaxCheckEvent() # Force Cargo to recompile. - e.run_cargo(['clean'], cwd=cwd) + self._cargo_clean(view) # os.utime(view.file_name()) 1 second resolution is not enough - e.on_post_save_async(view) - pattern = '(\^+)(WARN|ERR|HELP|NOTE) (.+)' - expected_messages = view.find_all(pattern) - for emsg_r in expected_messages: - row, col = view.rowcol(emsg_r.begin()) - text = view.substr(emsg_r) + e.on_post_save(view) + # Wait for it to finish. + self._get_rust_thread().join() + expected_messages = self._collect_expected_regions(view) + + def restriction_check(restrictions): + if not restrictions: + return True + checks = restrictions[1:-1].split(',') + for check in checks: + if check == 'test': + if method == 'check': + # 'cargo check' currently does not handle cfg(test) + # blocks (see + # https://github.com/rust-lang/cargo/issues/3431) + return False + else: + if not semver.match(self.rustc_version, check): + return False + return True + + # Check phantoms. + for emsg_info in expected_messages: + if restriction_check(emsg_info['restrictions']): + for i, (region, content) in enumerate(phantoms): + content = unescape(content) + # Phantom regions only apply to the last row. + r_row, _ = view.rowcol(region.end()) + emsg_row, _ = view.rowcol(emsg_info['end']) + if r_row == emsg_row and emsg_info['message'] in content: + self.assertIn(emsg_info['level_text'], content) + break + else: + raise AssertionError('Did not find expected message "%s:%s" for region %r:%r for file %r' % ( + emsg_info['level'], emsg_info['message'], + emsg_info['begin'], emsg_info['end'], + view.file_name())) + del phantoms[i] + if len(phantoms): + raise AssertionError('Got extra phantoms for %r: %r' % ( + view.file_name(), phantoms)) + + # Check regions. + found_regions = set() + region_set = {(r.begin(), r.end()) for r in regions} + + for emsg_info in expected_messages: + if restriction_check(emsg_info['restrictions']): + r = (emsg_info['begin'], emsg_info['end']) + if r in region_set: + found_regions.add(r) + else: + raise AssertionError('Did not find expected region %r,%r for file %r' % ( + emsg_info['begin'], emsg_info['end'], view.file_name())) + if len(region_set) != len(found_regions): + extra_regions = region_set - found_regions + raise AssertionError('Got extra regions for %r: %r' % ( + view.file_name(), extra_regions)) + + def _collect_expected_regions(self, view): + """Scans through the view looking for the markup that tells us where + error messages should appear. + + Returns a list of dictionaries with info about each message. + """ + result = [] + msg_level_text = { + 'WARN': 'warning', + 'ERR': 'error', + 'NOTE': 'note', + 'HELP': 'help', + } + # Multi-line spans. + region_map = {} # Map the last row number to a (begin,end) region. + pattern = r'(?s)/\*BEGIN\*/(.*?)/\*END\*/' + regions = view.find_all(pattern) + for region in regions: + row = view.rowcol(region.end())[0] + region_map[row] = (region.begin() + 9, region.end() - 7) + + pattern = r'// *~(WARN|ERR|HELP|NOTE)(\([^)]+\))? (.+)' + regions = view.find_all(pattern) + last_line = None # Used to handle multiple messages on the same line. + last_line_offset = 1 + for region in regions: + text = view.substr(region) m = re.match(pattern, text) - line_offset = len(m.group(1)) - msg_row = row - line_offset - msg_type = m.group(2) - msg_type_text = { - 'WARN': 'warning', - 'ERR': 'error', - 'NOTE': 'note', - 'HELP': 'help', - }[msg_type] - msg_content = m.group(3) - for i, (region, content) in enumerate(phantoms): - # python 3.4 can use html.unescape() - content = content.replace(' ', ' ')\ - .replace('&', '&')\ - .replace('<', '<')\ - .replace('>', '>') - r_row, r_col = view.rowcol(region.end()) - if r_row == msg_row and msg_content in content: - self.assertIn(msg_type_text, content) - break + row = view.rowcol(region.begin())[0] + if row - 1 == last_line: + last_line = row + row -= last_line_offset + last_line_offset += 1 else: - raise AssertionError('Did not find expected message "%s:%s" on line %r for file %r' % ( - msg_type, msg_content, msg_row, view.file_name())) - del phantoms[i] - if len(phantoms): - raise AssertionError('Got extra phantoms for %r: %r' % (view.file_name(), phantoms)) + last_line = row + last_line_offset = 1 + try: + actual_region = region_map[row - 1] + except KeyError: + raise AssertionError('Invalid test: %r did not have region on row %r' % ( + view.file_name(), row - 1)) + result.append({ + 'begin': actual_region[0], + 'end': actual_region[1], + 'level': m.group(1), + 'level_text': msg_level_text[m.group(1)], + 'restrictions': m.group(2), + 'message': m.group(3) + }) + + # Single-line spans. + last_line = None + last_line_offset = 1 + pattern = r'//( *)(\^+)(WARN|ERR|HELP|NOTE)(\([^)]+\))? (.+)' + regions = view.find_all(pattern) + for region in regions: + text = view.substr(region) + m = re.match(pattern, text) + row, col = view.rowcol(region.begin()) + if row - 1 == last_line: + last_line = row + row -= last_line_offset + last_line_offset += 1 + else: + last_line = row + last_line_offset = 1 + begin = view.text_point(row - 1, col + 2 + len(m.group(1))) + end = begin + len(m.group(2)) + result.append({ + 'begin': begin, + 'end': end, + 'level': m.group(3), + 'level_text': msg_level_text[m.group(3)], + 'restrictions': m.group(4), + 'message': m.group(5) + }) + + return result diff --git a/tests/test_target_detect.py b/tests/test_target_detect.py new file mode 100644 index 00000000..83ec4650 --- /dev/null +++ b/tests/test_target_detect.py @@ -0,0 +1,67 @@ +"""Tests for automatic target detection.""" + +from rust_test_common import * + +# TODO +# - manual config targets + + +class TestTargetDetect(TestBase): + + def test_multi_targets(self): + """Test automatic target detection.""" + + expected_targets = [ + # Exact target name matches. + ('src/lib.rs', [('src/lib.rs', '--lib')]), + ('src/main.rs', [('src/main.rs', '--bin multi-targets')]), + ('src/bin/bin1.rs', [('src/bin/bin1.rs', '--bin bin1')]), + ('src/bin/bin2.rs', [('src/bin/bin2.rs', '--bin bin2')]), + ('src/altmain.rs', [('src/altmain.rs', '--bin otherbin')]), + ('examples/ex1.rs', [('examples/ex1.rs', '--example ex1')]), + ('examples/ex2.rs', [('examples/ex2.rs', '--example ex2')]), + ('tests/test1.rs', [('tests/test1.rs', '--test test1')]), + ('tests/test2.rs', [('tests/test2.rs', '--test test2')]), + ('benches/bench1.rs', [('benches/bench1.rs', '--bench bench1')]), + ('benches/bench2.rs', [('benches/bench2.rs', '--bench bench2')]), + # Random module in src/, defaults to --lib. + ('src/lmod1.rs', [('src/lib.rs', '--lib')]), + # Target failure. Perhaps this should run rustc directly? + ('mystery.rs', []), + ('build.rs', []), + # Shared module in test, not possible to easily determine which + # test it belongs to. + ('tests/common/helpers.rs', [('tests/test1.rs', '--test test1'), + ('tests/test2.rs', '--test test2')]), + # proc-macro kind + ('pmacro/src/lib.rs', [('pmacro/src/lib.rs', '--lib')]), + # Different lib types. + ('libs/cdylib/src/lib.rs', [('libs/cdylib/src/lib.rs', '--lib')]), + ('libs/dylib/src/lib.rs', [('libs/dylib/src/lib.rs', '--lib')]), + ('libs/rlib/src/lib.rs', [('libs/rlib/src/lib.rs', '--lib')]), + ('libs/staticlib/src/lib.rs', [('libs/staticlib/src/lib.rs', '--lib')]), + ] + rustc_version = util.get_rustc_version(sublime.active_window(), + plugin_path) + if semver.match(rustc_version, '>=1.17.0'): + # Example libraries had issues before 1.17. + expected_targets.extend([ + ('examples/exlib.rs',[('examples/exlib.rs', '--example exlib')]), + ('examples/excdylib.rs',[('examples/excdylib.rs', '--example excdylib')]), + ]) + + for (path, targets) in expected_targets: + path = os.path.join('tests', 'multi-targets', path) + targets = [(os.path.normpath( + os.path.join(plugin_path, 'tests', 'multi-targets', x[0])), + x[1].split()) for x in targets] + self._with_open_file(path, + lambda view: self._test_multi_targets(view, targets)) + + def _test_multi_targets(self, view, expected_targets): + expected_targets.sort() + # Check the targets match expectation. + t = target_detect.TargetDetector(view.window()) + targets = t.determine_targets(view.file_name()) + targets.sort() + self.assertEqual(targets, expected_targets) diff --git a/tests/workspace/workspace1/src/anothermod/mod.rs b/tests/workspace/workspace1/src/anothermod/mod.rs index 12d1afc0..5964197e 100644 --- a/tests/workspace/workspace1/src/anothermod/mod.rs +++ b/tests/workspace/workspace1/src/anothermod/mod.rs @@ -1,5 +1,7 @@ fn f() { asdf(); - // ^ERR unresolved name - // ^^ERR unresolved name `asdf` +// ^^^^ERR(<1.16.0) unresolved name +// ^^^^ERR(<1.16.0) unresolved name `asdf` +// ^^^^ERR(>=1.16.0) not found in this scope +// ^^^^ERR(>=1.16.0) cannot find function } diff --git a/tests/workspace/workspace1/src/lib.rs b/tests/workspace/workspace1/src/lib.rs index afe3be30..99773532 100644 --- a/tests/workspace/workspace1/src/lib.rs +++ b/tests/workspace/workspace1/src/lib.rs @@ -1,8 +1,11 @@ mod anothermod; -struct S { +/*BEGIN*/struct S { +// ^^^^^^^^ERR(>=1.18.0) recursive type has infinite size +// ^^^^^^^^ERR(>=1.18.0) recursive type `S` has infinite size +// ^^^^^^^^HELP(>=1.18.0) insert indirection recursive: S -} -// ^ERR recursive type has infinite size -// ^^ERR recursive type -// ^^^HELP insert indirection +}/*END*/ +// ~ERR(<1.18.0) recursive type has infinite size +// ~ERR(<1.18.0) recursive type `S` has infinite size +// ~HELP(<1.18.0) insert indirection diff --git a/tests/workspace/workspace2/src/lib.rs b/tests/workspace/workspace2/src/lib.rs index 1009be60..a1b23eaf 100644 --- a/tests/workspace/workspace2/src/lib.rs +++ b/tests/workspace/workspace2/src/lib.rs @@ -5,8 +5,9 @@ trait Trait {} pub fn f() { let x = Box::new(0u32); let y: &Trait = x; - // ^ERR expected &Trait, found box - // ^^ERR mismatched types - // ^^^NOTE expected type `&Trait` - // ^^^^NOTE found type `Box` +// ^ERR expected &Trait, found +// ^ERR mismatched types +// ^NOTE expected type `&Trait` +// ^NOTE(<1.16.0) found type +// ^HELP(>=1.18.0) try with `&x` } diff --git a/tests/workspace/workspace2/src/somemod.rs b/tests/workspace/workspace2/src/somemod.rs index 19bb1fa0..7e6bd949 100644 --- a/tests/workspace/workspace2/src/somemod.rs +++ b/tests/workspace/workspace2/src/somemod.rs @@ -1,6 +1,8 @@ fn f() { someerr - // ^ERR unresolved name - // ^^ERR unresolved name `someerr` +// ^^^^^^^ERR(<1.16.0) unresolved name +// ^^^^^^^ERR(<1.16.0) unresolved name `someerr` +// ^^^^^^^ERR(>=1.16.0) not found in this scope +// ^^^^^^^ERR(>=1.16.0) cannot find value }