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.
+
+
+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:
+

### 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:
-
+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
}