diff --git a/.github/workflows/verify-implementations.yml b/.github/workflows/verify-implementations.yml new file mode 100644 index 0000000..d2a19ba --- /dev/null +++ b/.github/workflows/verify-implementations.yml @@ -0,0 +1,88 @@ +name: Verify Implementations + +on: + push: + branches: [ main ] + pull_request: + workflow_dispatch: + +permissions: + contents: read + +jobs: + plan01-rust: + name: Plan01 Rust Core DSP + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + - name: Run tests + working-directory: implementations/01-ultrasonic-data-transfer/core-dsp + run: cargo test --all-targets --all-features + + plan02-go: + name: Plan02 Signaling Server + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: '1.23.x' + - name: Run tests + working-directory: implementations/02-nearby-connections/nearby-card-drop/signaling-server + run: go test ./... + + plan03-rust: + name: Plan03 Fountain + Tools + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + - name: Run fountain-core tests + working-directory: implementations/03-animated-qr-visual-handshake/fountain-core + run: cargo test --all-targets --all-features + - name: Build replay benchmark + working-directory: implementations/03-animated-qr-visual-handshake/tools/replay-benchmark + run: cargo build --release + - name: Run QR frame generator smoke + run: | + python3 implementations/03-animated-qr-visual-handshake/tools/qr-frame-generator/generate_frames.py \ + --text "hello" --frame-size 3 --transfer-id test --output /tmp/qr_frames.txt + test -s /tmp/qr_frames.txt + + plan04-go: + name: Plan04 Relayer Go + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: '1.23.x' + - name: Run relayer unit tests + working-directory: implementations/04-web3-sbt-contacts/backend-relayer + run: go test ./... + - name: Run relayer HTTP e2e script + working-directory: implementations/04-web3-sbt-contacts + run: ./scripts/relayer_e2e.sh + + plan04-solidity: + name: Plan04 Solidity Foundry + runs-on: ubuntu-latest + env: + FOUNDRY_PROFILE: ci + steps: + - uses: actions/checkout@v5 + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + - name: Show forge version + run: forge --version + - name: Run forge build + working-directory: implementations/04-web3-sbt-contacts/contracts + run: forge build + - name: Run forge tests + working-directory: implementations/04-web3-sbt-contacts/contracts + run: forge test -vv diff --git a/.gitignore b/.gitignore index c8f23ea..9cae2ef 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,6 @@ spec&expectations.md +/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug +/implementations/01-ultrasonic-data-transfer/core-dsp/target +/implementations/03-animated-qr-visual-handshake/fountain-core/target +/implementations/02-nearby-connections/nearby-card-drop/signaling-server/signaling-server +/implementations/04-web3-sbt-contacts/backend-relayer/backend-relayer diff --git a/README.md b/README.md index 2a4143a..0bc4e2c 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,27 @@ # XDevice-infocard -This repository now organizes four implementation directions for cross-platform business-card exchange. +Cross-platform business-card exchange initiatives with plan docs and implementation scaffolds. -## Plan Folders +## Current State (2026-05-07) +- Parallel multi-agent completion round finished. +- Coordinator verification passed for all runnable Rust/Go modules. +- CI/CD pipeline is in place for cross-plan checks, including Foundry Solidity tests on GitHub runners. -1. `plans/01-ultrasonic-data-transfer` -- Focus: Near-field ultrasonic transfer with shared Rust DSP core. -- Detailed plan: `plans/01-ultrasonic-data-transfer/IMPLEMENTATION_PLAN.md` +## Completion Docs +- `docs/PARALLEL_COMPLETION_PROGRESS.md` +- `docs/COMPLETION_REPORT.md` +- `docs/CI_CD_PIPELINE.md` +- `docs/plans/IMPLEMENTATION_DASHBOARD.md` -2. `plans/02-nearby-connections` -- Focus: Google Nearby Connections with Flutter + native bridges. -- Detailed plan: `plans/02-nearby-connections/IMPLEMENTATION_PLAN.md` +## Plan Docs +- Canonical plans: `docs/plans` +- Progress tracker: `docs/plans/PROGRESS_TRACKER.md` -3. `plans/03-animated-qr-visual-handshake` -- Focus: Animated QR streaming with Rust fountain-code recovery. -- Detailed plan: `plans/03-animated-qr-visual-handshake/IMPLEMENTATION_PLAN.md` +## Implementations +- `implementations/01-ultrasonic-data-transfer` +- `implementations/02-nearby-connections` +- `implementations/03-animated-qr-visual-handshake` +- `implementations/04-web3-sbt-contacts` -4. `plans/04-web3-sbt-contacts` -- Focus: Web3 SBT identity/contact graph with Go relayer. -- Detailed plan: `plans/04-web3-sbt-contacts/IMPLEMENTATION_PLAN.md` - -## Source Note -The plan content is derived from `spec&expectations.md` and expanded into implementation-oriented execution documents. +## Source +Initial strategy and expectations are defined in `spec&expectations.md`. diff --git a/docs/AGENT_EXECUTION_STATUS.md b/docs/AGENT_EXECUTION_STATUS.md new file mode 100644 index 0000000..215d3b4 --- /dev/null +++ b/docs/AGENT_EXECUTION_STATUS.md @@ -0,0 +1,19 @@ +# Agent Execution Status + +Date: 2026-05-07 +Coordinator: Main agent + +## Objective +Complete remaining high-priority implementation tasks in parallel across all 4 plans, then verify and document outcomes. + +## Worker Allocation +- Worker Plan 01: `implementations/01-ultrasonic-data-transfer` +- Worker Plan 02: `implementations/02-nearby-connections` +- Worker Plan 03: `implementations/03-animated-qr-visual-handshake` +- Worker Plan 04: `implementations/04-web3-sbt-contacts` + +## Live Status +- Plan 01 worker: Completed (FSK-like modem + tests) +- Plan 02 worker: Completed (Flutter scaffold + bridge schema + signaling extensions) +- Plan 03 worker: Completed (frame generator + replay benchmark + tests) +- Plan 04 worker: Completed (EIP-712-like signable flow + tests) diff --git a/docs/CI_CD_PIPELINE.md b/docs/CI_CD_PIPELINE.md new file mode 100644 index 0000000..12dab3d --- /dev/null +++ b/docs/CI_CD_PIPELINE.md @@ -0,0 +1,41 @@ +# CI/CD Pipeline + +## Goal +Remove local-environment blockers by shifting verification to deterministic CI jobs. + +## Workflow +- File: `.github/workflows/verify-implementations.yml` +- Triggers: + - `push` to `main` + - `pull_request` + - `workflow_dispatch` + +## Jobs +1. `plan01-rust` +- Runs `cargo test` for `implementations/01-ultrasonic-data-transfer/core-dsp`. + +2. `plan02-go` +- Runs `go test ./...` for signaling server. + +3. `plan03-rust` +- Runs `cargo test` for `fountain-core`. +- Builds replay benchmark tool. +- Runs QR frame generator smoke check. + +4. `plan04-go` +- Runs `go test ./...` for backend relayer. +- Runs bind-based relayer E2E script (`scripts/relayer_e2e.sh`) in GitHub runner. + +5. `plan04-solidity` +- Installs Foundry with `foundry-rs/foundry-toolchain@v1`. +- Runs `forge build` and `forge test` for contracts. + +## Local Fallback Scripts +- Solidity without local Foundry install: + - `implementations/04-web3-sbt-contacts/scripts/solidity_test_via_docker.sh` +- Relayer E2E without port binding: + - `implementations/04-web3-sbt-contacts/scripts/relayer_e2e_no_bind.sh` + +## Blockers Addressed +- `forge/solc` missing locally: covered by CI Foundry job and Docker script. +- sandbox port-bind restriction locally: covered by CI bind-capable E2E and local no-bind fallback script. diff --git a/docs/COMPLETION_REPORT.md b/docs/COMPLETION_REPORT.md new file mode 100644 index 0000000..8e741a6 --- /dev/null +++ b/docs/COMPLETION_REPORT.md @@ -0,0 +1,59 @@ +# Completion Report (Final Parallel Round) + +Date: 2026-05-07 +Coordinator: Main agent + +## High-Level Result +All requested unfinished tasks were implemented concurrently where non-conflicting and then verified centrally. + +## Plan 01 (Ultrasonic) +Completed in repo: +- FSK-like tone modem with selectable demodulation method (`Correlator` and `Goertzel`). +- Adaptive threshold/noise-floor handling. +- Extended tests for noise tolerance, corruption behavior, demod path consistency. +- UniFFI generation helper script + integration checklist docs. + +Verification: +- `cargo test` PASS (14 tests). + +## Plan 02 (Nearby) +Completed in repo: +- Flutter skeleton metadata/doc flow (`pubspec`, app/docs artifacts). +- Machine-readable bridge contract schema + matrix docs. +- Dart method-channel adapter stub aligned to contract. +- Signaling server lifecycle features: offer/answer/session polling/session delete, TTL expiry, cleanup endpoint + tests. + +Verification: +- `go test ./...` PASS. + +## Plan 03 (Visual/Fountain) +Completed in repo: +- Codec upgraded from single-parity to deterministic mixed-repair symbol strategy with peeling decode support. +- Added scanner/player contract docs and payload parser tool. +- Replay benchmark enhanced for multiple drop-rate recovery reporting. +- Added tests for multi-loss recovery and payload-end zero-byte correctness. + +Verification: +- `cargo test` PASS (11 tests). + +## Plan 04 (Web3/SBT) +Completed in repo: +- Deterministic EIP-712 digest utilities. +- RPC abstraction + mock/in-memory default and integration wiring in relayer. +- Stronger signable payload validation and submit flow checks. +- Expanded tests for digest determinism, validation failures, and RPC integration behavior. +- Foundry config/tests and CI path already added previously. + +Verification: +- `go test ./...` PASS. + +## CI/CD and Blocker Mitigation +Implemented: +- GitHub Actions workflow for cross-plan verification, including Foundry job. +- Docker fallback script for Solidity tests when local `forge/solc` absent. +- No-bind relayer verification script for sandbox environments. + +## Remaining External Constraints (Not code gaps) +- Local execution of Solidity tests requires `forge/solc` installed (CI covers this path). +- Bind-based local HTTP E2E depends on environment permission to open listening ports. +- True production sign-off still requires physical iOS/Android device validation. diff --git a/docs/PARALLEL_COMPLETION_PROGRESS.md b/docs/PARALLEL_COMPLETION_PROGRESS.md new file mode 100644 index 0000000..30d54b4 --- /dev/null +++ b/docs/PARALLEL_COMPLETION_PROGRESS.md @@ -0,0 +1,23 @@ +# Parallel Completion Progress + +Date: 2026-05-07 +Coordinator: Main agent + +## Objective +Drive all remaining unfinished tasks to completion as far as technically feasible in-repo, using parallel non-conflicting workers. + +## Worker Outcomes +- Plan 01 worker: Completed (Goertzel demod + adaptive threshold + UniFFI helper) +- Plan 02 worker: Completed (Flutter skeleton artifacts + bridge schema + signaling TTL/cleanup) +- Plan 03 worker: Completed (LT-like mixed repair symbols + peeling decode + tooling) +- Plan 04 worker: Completed (EIP-712 digest + RPC abstraction + integration tests) + +## Coordinator Verification +- `implementations/01-ultrasonic-data-transfer/core-dsp`: `cargo test` PASS (14 passed) +- `implementations/02-nearby-connections/nearby-card-drop/signaling-server`: `go test ./...` PASS +- `implementations/03-animated-qr-visual-handshake/fountain-core`: `cargo test` PASS (11 passed) +- `implementations/04-web3-sbt-contacts/backend-relayer`: `go test ./...` PASS + +## Notes +- This round completed all in-repo engineering tasks that were feasible without external hardware/network dependencies. +- Remaining gaps are execution-environment dependent (mobile device runtime verification, local forge availability, sandbox port-binding limits). diff --git a/docs/plans/01-ultrasonic-data-transfer/EXECUTION_BREAKDOWN.md b/docs/plans/01-ultrasonic-data-transfer/EXECUTION_BREAKDOWN.md new file mode 100644 index 0000000..fd5465b --- /dev/null +++ b/docs/plans/01-ultrasonic-data-transfer/EXECUTION_BREAKDOWN.md @@ -0,0 +1,116 @@ +# Execution Breakdown - Plan 01 Ultrasonic Data Transfer + +## Planning Assumptions +- Team shape: 1 DSP engineer, 1 iOS engineer, 1 Android engineer, 1 QA engineer (shared). +- Work calendar: 5 working days per week. +- Estimates below are elapsed working days with 20% buffer already included. + +## Phase 0 - Setup and Baseline Alignment +- Estimation: 2 days +- Dependencies: + - Final approval of `IMPLEMENTATION_PLAN.md` scope. + - Access to 2 iOS and 2 Android physical devices. +- Entry criteria: + - Plan 01 accepted by engineering + QA leads. + - Target devices and OS versions listed. +- Tasks: + - Create `core-dsp` crate skeleton and module stubs (`framing`, `protocol`, `modulator`, `demodulator`). + - Set fixed coding conventions (sample rate constants, naming, logging redaction policy). + - Add CI jobs for Rust unit tests and mobile binding compile checks. + - Prepare initial benchmark fixture folder (`docs/benchmarks/raw-fixtures`). +- Exit criteria: + - Repository structure created and builds on CI. + - First “hello-frame” encode/decode smoke test passes in Rust. + +## Phase 1 - Frame Protocol and DSP Encode/Decode MVP +- Estimation: 6 days +- Dependencies: + - Phase 0 complete. +- Entry criteria: + - Frame field definitions approved. + - Baseline sample rates selected (44.1kHz and 48kHz). +- Tasks: + - Implement frame serializer/deserializer with strict validation and CRC32 verification. + - Implement FSK modulation pipeline with deterministic symbol timing. + - Implement FFT-based demodulation and symbol classifier for clean-channel input. + - Create golden fixtures: payload sizes 1KB, 4KB, 8KB across both sample rates. + - Add property-based tests for frame parser and sequence ordering. +- Exit criteria: + - Rust-only round-trip pass rate >= 99.5% using synthetic/noiseless fixtures. + - Decoder rejects malformed headers, bad CRC, invalid sequence values. + +## Phase 2 - Session Protocol and Reliability Controls +- Estimation: 4 days +- Dependencies: + - Phase 1 complete. +- Entry criteria: + - MVP encode/decode stable in deterministic test fixtures. +- Tasks: + - Implement session state machine: `DISCOVER -> HANDSHAKE -> TX -> VERIFY -> ACK -> COMPLETE`. + - Add packet retransmit policy (max retry count, ack timeout backoff). + - Add session nonce and replay protection checks. + - Add payload encryption boundary interface (AES-GCM assumed upstream). + - Implement state reset and duplicate packet suppression. +- Exit criteria: + - Integration tests confirm successful transfer with injected packet loss up to 10%. + - Session timeout and retransmit behavior match protocol rules. + +## Phase 3 - iOS/Android FFI and Audio Pipeline Integration +- Estimation: 7 days +- Dependencies: + - Phase 1 and 2 complete. + - UniFFI generation pipeline available. +- Entry criteria: + - Stable Rust APIs frozen for first mobile integration (`encode`, `ingest`, `poll_frame`, `reset_session`). +- Tasks: + - Generate and integrate UniFFI bindings for Swift and Kotlin. + - Implement iOS AVFoundation capture/playback graph with Rust bridge. + - Implement Android AudioRecord/AudioTrack thread pipeline with JNI bridge. + - Add conversion guards (PCM int16 <-> f32 normalization). + - Implement mobile permission and interruption handling (calls, route changes). +- Exit criteria: + - Both platforms can send/receive 1KB payload successfully on local loopback and device-to-device tests. + - Byte-level parity checks pass between Rust direct decode and mobile pipeline decode. + +## Phase 4 - Device Tuning and Noise Robustness +- Estimation: 5 days +- Dependencies: + - Phase 3 complete. +- Entry criteria: + - End-to-end transfer works on at least one iOS model and one Android model. +- Tasks: + - Calibrate gain normalization and detection threshold by device profile. + - Tune buffer sizes for 44.1kHz and 48kHz modes. + - Add adaptive threshold mode for moderate ambient noise. + - Run controlled noise tests (quiet room, office chatter, fan noise). + - Capture failure traces and classify root causes (sync loss, CRC fail, timeout). +- Exit criteria: + - 1KB/4KB/8KB transfer success >= 99% at 0.5m in quiet conditions. + - >= 95% success in moderate noise profile. + +## Phase 5 - Performance Validation and Release Gate +- Estimation: 3 days +- Dependencies: + - Phase 4 complete. +- Entry criteria: + - QA test matrix complete with no unresolved P0/P1 defects. +- Tasks: + - Run benchmark suite and collect median/p95 transfer times. + - Verify target: 4KB transfer <= 3.5s median on mid-tier devices. + - Finalize production checklist (security redaction, crash-free run, retry behavior). + - Publish benchmark and pass/fail report in `docs/benchmarks`. +- Exit criteria: + - All acceptance gates in `TEST_STRATEGY.md` pass. + - Go/No-Go review signed by engineering + QA. + +## Cross-Phase Dependency Graph +1. Phase 0 -> required for all other phases. +2. Phase 1 -> blocks Phase 2 and Phase 3. +3. Phase 2 -> required before robust device testing in Phase 4. +4. Phase 3 -> required before Phase 4. +5. Phase 4 -> required before Phase 5. + +## Total Delivery Estimate +- Total elapsed estimate: 27 working days. +- Critical path: Phase 0 -> 1 -> 2 -> 3 -> 4 -> 5. +- Recommended checkpoint cadence: end-of-phase demo and risk review. diff --git a/plans/01-ultrasonic-data-transfer/IMPLEMENTATION_PLAN.md b/docs/plans/01-ultrasonic-data-transfer/IMPLEMENTATION_PLAN.md similarity index 100% rename from plans/01-ultrasonic-data-transfer/IMPLEMENTATION_PLAN.md rename to docs/plans/01-ultrasonic-data-transfer/IMPLEMENTATION_PLAN.md diff --git a/docs/plans/01-ultrasonic-data-transfer/RISK_REGISTER.md b/docs/plans/01-ultrasonic-data-transfer/RISK_REGISTER.md new file mode 100644 index 0000000..84073d3 --- /dev/null +++ b/docs/plans/01-ultrasonic-data-transfer/RISK_REGISTER.md @@ -0,0 +1,35 @@ +# Risk Register - Plan 01 Ultrasonic Data Transfer + +## Rating Model +- Likelihood: Low / Medium / High +- Impact: Low / Medium / High +- Priority heuristic: Highest attention to `High-High` and `Medium-High`. + +## Top Risks + +| ID | Risk | Likelihood | Impact | Mitigation | Trigger / Early Warning | +|---|---|---|---|---|---| +| R1 | Device speaker/mic frequency response varies, causing decode failures in 18-20kHz band | High | High | Build per-device calibration profiles, adaptive thresholding, and fallback tone spacing profile | Success rate drops below 95% on any target device in quiet environment | +| R2 | Background noise and AGC behavior distort symbols | High | High | Add robust preamble detection, dynamic noise floor estimation, and retransmit policy tuning | Rising CRC mismatch and sync-loss counts in office/fan tests | +| R3 | iOS/Android audio pipeline differences break deterministic behavior | Medium | High | Enforce shared Rust logic for framing/protocol, add byte-parity tests for both bindings, standardize PCM normalization | Parity test mismatch between mobile decode and Rust direct decode | +| R4 | Latency exceeds 3.5s median for 4KB payload | Medium | High | Optimize symbol duration, chunk size, buffering, and retransmit backoff; profile CPU hot paths in demodulation | Median transfer time trend >3.5s in nightly benchmarks | +| R5 | Session retry policy causes stalls or premature failures | Medium | Medium | Validate timeout/retry constants using packet-loss simulation; add bounded exponential backoff | Sessions terminate with retry exhaustion under moderate noise before reaching max logical retries | +| R6 | FFI boundary bugs (memory/ownership/marshaling) create crashes | Medium | High | Keep FFI API minimal, add stress tests for repeated ingest/poll/reset, run sanitizers where available | Crash signatures concentrated in JNI/Swift bridge functions | +| R7 | Replay or tampering concerns if nonce/checks are inconsistent | Low | High | Enforce session nonce checks in protocol layer and verify aggregate checksum on complete | Duplicate/old session IDs accepted by receiver in integration tests | +| R8 | Logging or telemetry leaks sensitive contact payload data | Low | High | Redaction-by-default logging policy, lint checks for forbidden payload log patterns | Any raw payload bytes found in test logs or crash reports | +| R9 | Audio interruptions (calls/route changes) leave session unrecoverable | Medium | Medium | Implement pause/resume from last ACKed frame and deterministic state reset APIs | Transfer fails to recover in interruption test scenarios | +| R10 | Schedule slip due to device lab availability constraints | Medium | Medium | Lock device matrix early, reserve QA slots weekly, parallelize fixture-based testing while waiting for devices | Missed weekly device test window or blocked access to required OS versions | + +## Active Monitoring Plan +- Weekly risk review during phase checkpoint. +- Daily automated metrics ingestion: + - Decode success rate by device and environment. + - CRC fail rate and retransmit count distribution. + - Transfer latency median/p95 trends. +- Escalation rule: + - Any `High impact` risk with active trigger for 2 consecutive days becomes release blocker. + +## Contingency Actions +1. If R1/R2 persist at end of Phase 4: ship with constrained supported-device list and documented compatibility table. +2. If R4 persists near release: reduce max payload from 8KB to 4KB for Phase 1 GA and queue optimization follow-up. +3. If R6 or R8 occurs in pre-release: block release until crash/privacy issue is verified fixed and regression-tested. diff --git a/docs/plans/01-ultrasonic-data-transfer/TECH_SPEC.md b/docs/plans/01-ultrasonic-data-transfer/TECH_SPEC.md new file mode 100644 index 0000000..613c81c --- /dev/null +++ b/docs/plans/01-ultrasonic-data-transfer/TECH_SPEC.md @@ -0,0 +1,132 @@ +# Technical Specification - Ultrasonic SonicCard Transfer + +## 1. Scope +Defines the implementation-level protocol, frame format, module interfaces, data flow, and error handling for Plan 01. + +## 2. Audio and Signal Parameters +- Carrier band: 18,000-20,000 Hz. +- Supported sample rates: 44,100 Hz and 48,000 Hz. +- Channel: mono. +- Sample format across FFI boundary: `f32` normalized to [-1.0, 1.0]. +- Initial modulation: binary FSK with two tones per symbol. +- Symbol duration target: 10 ms (configurable by profile). + +## 3. Session Protocol +- States: + - `IDLE` + - `DISCOVER` + - `HANDSHAKE` + - `TRANSMIT` + - `VERIFY` + - `ACK_WAIT` + - `COMPLETE` + - `FAILED` +- Sequence: + 1. Sender emits `DISCOVER` frame repeatedly for `discover_window_ms`. + 2. Receiver responds with `HANDSHAKE_ACK` containing session nonce. + 3. Sender transmits data frames in order (`seq` ascending). + 4. Receiver validates frame CRC and sequence; sends ACK/NACK bitmap. + 5. Sender retransmits missing frames until complete or retry limit reached. + 6. Receiver emits `TRANSFER_COMPLETE` with aggregate checksum. + +## 4. Frame Format (On-Wire) +All multi-byte fields are little-endian. + +| Field | Size (bytes) | Description | +|---|---:|---| +| Preamble | 4 | Fixed sync bytes `0xAA55AA55` | +| Version | 1 | Protocol version (`0x01`) | +| Frame Type | 1 | `DISCOVER`, `HANDSHAKE`, `DATA`, `ACK`, `NACK`, `COMPLETE`, `ERROR` | +| Session ID | 8 | Random per transfer | +| Packet ID | 4 | Random per packet stream | +| Sequence | 2 | Frame index starting at 0 | +| Total Frames | 2 | Total frame count for payload | +| Payload Length | 2 | Bytes in payload section | +| Flags | 1 | Bits: encrypted, final-frame, reserved | +| Payload | 0..512 | Frame body (chunked payload or control body) | +| CRC32 | 4 | CRC over `Version..Payload` | + +Frame size target: +- Max encoded payload per `DATA` frame: 512 bytes. +- Max physical frame bytes (excluding modulation overhead): 541 bytes. + +## 5. Payload Chunking Rules +- App payload max: 8KB. +- Split into chunks of up to 512 bytes. +- `Total Frames = ceil(payload_len / 512)`. +- Last chunk may be shorter; exact length in `Payload Length`. +- Missing or duplicate sequence numbers are handled by ACK/NACK bitmap. + +## 6. Module Interfaces + +### `framing.rs` +- Responsibility: + - Serialize/deserialize frame structs. + - CRC32 compute/verify. +- Core APIs: + - `fn encode_frame(frame: &Frame) -> Result, FrameError>` + - `fn decode_frame(bytes: &[u8]) -> Result` + +### `protocol.rs` +- Responsibility: + - Session state machine and retry policy. + - Sequence bookkeeping. +- Core APIs: + - `fn on_event(event: ProtocolEvent) -> Vec` + - `fn pending_retransmits(now_ms: u64) -> Vec` + +### `modulator.rs` +- Responsibility: + - Convert frame bytes into PCM samples using FSK symbols. +- Core APIs: + - `fn modulate(frame_bytes: &[u8], cfg: ModemConfig) -> Result, ModemError>` + +### `demodulator.rs` +- Responsibility: + - Stream ingest PCM -> detect symbols -> reconstruct frame bytes. +- Core APIs: + - `fn ingest(samples: &[f32]) -> DemodStatus` + - `fn poll_frame() -> Option>` + +### `lib.rs` (FFI boundary) +- Responsibility: + - Stable external API for Swift/Kotlin clients. +- Required API: + - `encode(payload: Vec) -> Vec` + - `ingest(samples: Vec) -> DecodeState` + - `poll_frame() -> Option>` + - `reset_session(session_id: u64)` + +## 7. End-to-End Data Flow +1. Mobile sender app serializes vCard bytes and encrypts payload (AES-GCM external module). +2. Rust protocol module chunks payload into `DATA` frames. +3. Framing module builds wire frame + CRC. +4. Modulator converts bytes to ultrasonic PCM. +5. Mobile playback pushes PCM to speaker. +6. Receiver microphone captures PCM, forwards buffers to Rust demodulator. +7. Demodulator reconstructs bytes, framing validates CRC. +8. Protocol module assembles chunks and emits ACK/NACK. +9. On completion, receiver returns reassembled payload to app layer. + +## 8. Error Handling +- Error classes: + - `FrameError`: bad preamble, unsupported version, CRC mismatch, invalid field. + - `ModemError`: unsupported sample rate, symbol decode underflow, tone detection ambiguity. + - `ProtocolError`: timeout, retry exhausted, session mismatch, replay detected. + - `IOBridgeError`: audio interruption, permission denial, FFI marshaling mismatch. +- Handling policy: + - CRC mismatch -> NACK specific sequence. + - Sequence gap -> buffer out-of-order window and request retransmit. + - Repeated demod sync loss -> trigger re-handshake. + - Retry exhaustion -> fail session with error code and telemetry marker. + - Permission/route interruption -> pause transfer and resume from last ACKed frame. + +## 9. Logging and Privacy Constraints +- Never log raw vCard payload bytes. +- Log only session IDs (hashed), frame counts, retry counts, and error codes. +- Redact nonce and encryption metadata from user-visible logs. + +## 10. Extension Points (Post-Phase 1) +- Optional PSK profile behind feature flag. +- Reed-Solomon FEC stage between framing and modulation. +- Device-specific EQ profile table for problematic microphones/speakers. diff --git a/docs/plans/01-ultrasonic-data-transfer/TEST_STRATEGY.md b/docs/plans/01-ultrasonic-data-transfer/TEST_STRATEGY.md new file mode 100644 index 0000000..05c7bd7 --- /dev/null +++ b/docs/plans/01-ultrasonic-data-transfer/TEST_STRATEGY.md @@ -0,0 +1,105 @@ +# Test Strategy - Plan 01 Ultrasonic Data Transfer + +## 1. Objectives +- Validate protocol correctness, cross-platform determinism, and real-device reliability. +- Gate release with measurable thresholds tied to Plan 01 targets. + +## 2. Test Layers + +### Unit Tests (Rust Core) +- Scope: + - Frame encoding/decoding and CRC validation. + - Protocol state transitions and retry logic. + - Symbol mapping/demapping for FSK. +- Required cases: + - Valid frame decode for each frame type. + - Invalid preamble/version/length rejection. + - CRC corruption detection. + - Sequence reordering and duplicate suppression. +- Gate: + - `>= 95%` line coverage on `framing.rs` and `protocol.rs`. + - 0 failing unit tests in CI. + +### Integration Tests (Rust + FFI) +- Scope: + - End-to-end encode -> modulate -> demodulate -> decode in process. + - Swift/Kotlin bindings parity for fixed fixtures. +- Required cases: + - 1KB, 4KB, 8KB payload transfer with both sample rates. + - Mixed chunk sizes and final-frame short chunk. + - Session reset and restart after timeout. +- Gate: + - Byte-for-byte payload equality across Rust, iOS, Android decode outputs. + - Pass rate `>= 99%` in synthetic low-noise pipeline over 1,000 runs. + +### Device Tests (Real Hardware) +- Scope: + - Physical speaker/microphone path on target devices. + - Permission flow, interruptions, and route changes. +- Matrix minimum: + - iOS: 2 models (latest major iOS and one previous major). + - Android: 2 models (mid-tier + flagship). + - Distances: 0.2m, 0.5m, 1.0m. + - Environments: quiet room, office chatter, fan noise. +- Required cases: + - First-time permission denied then granted. + - Incoming call/audio focus interruption mid-transfer. + - Retransmit behavior under induced packet loss. +- Gate: + - 0.5m quiet: success `>= 99%` for 1KB/4KB/8KB. + - 0.5m moderate noise: success `>= 95%`. + - No unrecovered crashes/ANRs during 500 transfer cycles. + +### Performance Tests +- Scope: + - Transfer latency and CPU impact. + - Retransmit overhead under noise. +- Metrics: + - End-to-end transfer latency (median, p95). + - Decode CPU time per second of audio. + - Retransmit count distribution. +- Gate: + - 4KB payload median transfer time `<= 3.5s` on mid-tier device. + - p95 transfer time `<= 5.0s` at 0.5m quiet. + - Sustained CPU utilization under test cap defined by platform team. + +## 3. Test Data and Fixtures +- Deterministic payload fixtures: + - `fixture_1kb_vcard.bin` + - `fixture_4kb_vcard.bin` + - `fixture_8kb_vcard.bin` +- Audio fixtures: + - Clean synthetic encoded streams. + - Noise-mixed variants (SNR buckets: 30dB, 20dB, 10dB). +- Corruption fixtures: + - Bit flips in header and payload. + - Dropped and duplicated frame sequences. + +## 4. Automation Plan +- CI per pull request: + - Rust unit + integration tests. + - FFI generation and compile check for iOS/Android bindings. +- Nightly: + - Extended randomized fuzz tests for frame parser. + - Benchmark replay for trend monitoring. +- Pre-release: + - Full device matrix run with signed report. + +## 5. Acceptance Gates by Milestone +1. Milestone A (Core complete) +- All Rust unit/integration tests green. +- Synthetic pass rate `>= 99.5%` noiseless. + +2. Milestone B (Mobile integration complete) +- iOS + Android parity tests green. +- Device loopback on each platform stable for 100 cycles. + +3. Milestone C (Release candidate) +- Device matrix passes all reliability gates. +- Performance targets met (`4KB <= 3.5s median`). +- No open P0/P1 defects. + +## 6. Exit Criteria for Plan 01 +- Every gate above is met and documented. +- Benchmark and failure analysis artifacts are published under `docs/benchmarks`. +- Engineering + QA sign-off recorded. diff --git a/docs/plans/02-nearby-connections/EXECUTION_BREAKDOWN.md b/docs/plans/02-nearby-connections/EXECUTION_BREAKDOWN.md new file mode 100644 index 0000000..7302a76 --- /dev/null +++ b/docs/plans/02-nearby-connections/EXECUTION_BREAKDOWN.md @@ -0,0 +1,138 @@ +# Execution Breakdown + +## Goal +Ship Plan 02 (Nearby Card Drop) as a production-ready Flutter app with Android/iOS Nearby bridges, deterministic session lifecycle, and an optional Go signaling fallback. + +## Delivery Window +- Target duration: 5 weeks +- Start assumption: Week 1 begins immediately after plan approval. +- Release candidate date gate: end of Week 5. + +## Workstreams +- WS1 App Core (Flutter domain + UI) +- WS2 Native Bridge (Android/iOS) +- WS3 Transfer Protocol + Resilience +- WS4 Optional Signaling Service (Go) +- WS5 QA, Observability, and Release Readiness + +## Milestones and Exit Gates + +### Milestone M1: Contracts + App Skeleton (Week 1) +Deliverables +- Flutter module scaffolding under `app/lib`: + - `core/nearby_adapter.dart` + - `state/session_state_machine.dart` + - `features/discovery/`, `features/transfer/` +- Domain contracts for handshake/chunk/receipt. +- Mock adapter for simulator/local deterministic runs. + +Actionable API contracts +- `abstract class NearbyAdapter`: + - `Stream events();` + - `Future startDiscovery(DiscoveryConfig config);` + - `Future startAdvertising(AdvertisingConfig config);` + - `Future requestConnection(String endpointId, HandshakePayload payload);` + - `Future acceptConnection(String endpointId);` + - `Future rejectConnection(String endpointId, {String? reason});` + - `Future sendChunk(String endpointId, TransferChunk chunk);` + - `Future disconnect(String endpointId);` + - `Future stopAll();` +- DTOs (JSON-serializable): + - `HandshakePayload {appVersion, protocolVersion, endpointId, nonce, pubKey}` + - `TransferChunk {sessionId, chunkIndex, totalChunks, bytesBase64, crc32}` + - `TransferReceipt {sessionId, status, errorCode, digestSha256}` + +Exit gates (must pass) +- 100% compile/build green on Flutter analyzer and unit tests. +- State machine transitions tested for all happy-path states. +- Mock adapter can run a full transfer simulation in CI in < 20s. + +### Milestone M2: Native Bridge Alpha (Week 2-3) +Deliverables +- Android Nearby integration: + - Discovery, advertising, connection lifecycle callbacks. +- iOS Nearby integration parity (capability-gated if API differences). +- Unified event bridge into Dart stream. + +Bridge event schema (native -> Dart) +- `NearbyEvent` envelope: + - `type`: `DISCOVERY_FOUND | DISCOVERY_LOST | CONNECTION_INITIATED | CONNECTION_RESULT | AUTH_CODE | PAYLOAD_PROGRESS | PAYLOAD_RECEIVED | DISCONNECTED | ERROR` + - `sessionId` + - `endpointId` + - `timestampMs` + - `payload` (event-specific map) + +Exit gates +- Android: 3-device physical test, discovery success >= 95% in 30 trials. +- iOS: 3-device physical test, discovery success >= 90% in 30 trials. +- Event schema conformance tests: 0 decoding failures in 500 replayed events. + +### Milestone M3: Protocol Hardening (Week 3-4) +Deliverables +- Chunking/reassembly with checksum validation. +- Retry + timeout rules integrated into state machine. +- UI flow finalized: discover -> authenticate -> transferring -> verifying -> complete/fail. + +Protocol constants (initial) +- `MAX_CHUNK_BYTES = 32 * 1024` +- `ACK_TIMEOUT_MS = 2000` +- `CHUNK_RETRY_LIMIT = 3` +- `CONNECTION_RETRY_LIMIT = 2` +- `SESSION_TIMEOUT_MS = 45000` + +Exit gates +- Transfer completion >= 98% for 1 MB payload in same-room tests (n=100). +- Transfer completion >= 95% for 5 MB payload (n=50). +- Corrupted chunk detection = 100% in fault injection tests. + +### Milestone M4: Optional Signaling Fallback (Week 4) +Deliverables +- Go WebSocket signaling server: + - Session create/join/hint events. +- Feature-flagged client fallback path. + +Server API (v1) +- `GET /healthz` -> `200 {"status":"ok"}` +- `GET /readyz` -> `200` when ws loop and in-memory session store ready +- `WS /v1/signal?session_id=&peer_id=` +- WS messages: + - `offer_hint`, `answer_hint`, `peer_presence`, `session_close`, `error` + +Feature flag +- `nearby.signaling.enabled` (default `false`) + +Exit gates +- When enabled, fallback connection success improves by >= 20% in constrained-network scenario tests. +- No regression in direct nearby mode metrics. + +### Milestone M5: Release Readiness (Week 5) +Deliverables +- QA matrix completion (Android/iOS versions, foreground/background, permission states). +- Observability dashboards and alerts. +- Operational runbook and rollback steps. + +Release quality gates +- Crash-free sessions >= 99.5% over 7-day beta window. +- End-to-end transfer success >= 97% across device matrix. +- P95 discovery-to-connect latency <= 8s. +- P95 total transfer time (1 MB) <= 12s. + +## RACI (Lean) +- Mobile Lead: WS1/WS3 owner, release sign-off. +- Android Engineer: WS2 Android owner. +- iOS Engineer: WS2 iOS owner. +- Backend Engineer: WS4 owner. +- QA Lead: WS5 owner, gate enforcement. +- PM: milestone governance and scope control. + +## Dependency Checklist +- Google Nearby SDK versions locked and documented. +- iOS/Android runtime permissions copy reviewed. +- Feature-flag service/remote config available. +- Analytics pipeline accepts session-scoped metrics. + +## Definition of Done +- All milestone exit gates passed. +- All P1/P0 defects closed. +- State machine spec and test strategy fully traceable to implementation. +- Rollback path validated in staging. diff --git a/plans/02-nearby-connections/IMPLEMENTATION_PLAN.md b/docs/plans/02-nearby-connections/IMPLEMENTATION_PLAN.md similarity index 100% rename from plans/02-nearby-connections/IMPLEMENTATION_PLAN.md rename to docs/plans/02-nearby-connections/IMPLEMENTATION_PLAN.md diff --git a/docs/plans/02-nearby-connections/RISK_REGISTER.md b/docs/plans/02-nearby-connections/RISK_REGISTER.md new file mode 100644 index 0000000..fbba1cf --- /dev/null +++ b/docs/plans/02-nearby-connections/RISK_REGISTER.md @@ -0,0 +1,35 @@ +# Risk Register + +## Scale +- Probability: `Low | Medium | High` +- Impact: `Low | Medium | High` +- Exposure score: `1-9` (Probability x Impact mapping) + +## Active Risks + +| ID | Risk | Probability | Impact | Exposure | Owner | Mitigation | Trigger | Contingency | +|---|---|---|---|---:|---|---|---|---| +| R-01 | Android/iOS Nearby API behavior divergence causes inconsistent session events | High | High | 9 | Mobile Lead | Define strict event envelope + replay tests + platform adapters with normalization layer | Event ordering mismatch in integration tests | Force platform-specific guard branches and ship with narrowed supported flows | +| R-02 | Permission model differences reduce discovery/connect success | High | High | 9 | Android+iOS Engineers | Preflight permission checks, contextual prompts, denied-state UX path, telemetry by permission status | Discovery success < 90% in matrix | Block transfer entry until permission health passes and provide explicit remediation UI | +| R-03 | Chunk loss in noisy environments degrades transfer completion rate | Medium | High | 6 | Mobile Lead | Chunk retry policy, adaptive backoff, transfer timeout tuning, chunk-level metrics | Success rate < 95% for 5 MB tests | Reduce chunk size and enable signaling fallback for affected cohorts | +| R-04 | Integrity check false positives due to serialization mismatch | Medium | High | 6 | Protocol Owner | Canonical byte encoding spec, cross-platform golden vectors, digest tests | Digest mismatch > 0.5% in staging | Hotfix to canonical serializer and enforce protocol version bump | +| R-05 | Signaling fallback increases complexity and introduces regression risk | Medium | Medium | 4 | Backend Engineer | Feature-flag default off, isolate fallback path, dedicated regression suite | Direct-mode metrics regress after enabling flag | Disable flag remotely and route users to direct mode only | +| R-06 | Battery drain from continuous discovery/advertising harms UX | Medium | Medium | 4 | QA Lead | Discovery session timeout, adaptive scan intervals, background throttling | Battery drain > 8%/20 min test | Ship with conservative scan duty cycle and stricter idle stop | +| R-07 | Security weakness in auth code confirmation leads to accidental mispairing | Low | High | 3 | Security Champion | Mandatory 4-digit code confirmation, mismatch lockout, audit logs without PII | Any field report of wrong-recipient transfer | Disable transfer without explicit dual confirmation and release patch | +| R-08 | Observability gaps delay root-cause analysis in beta | Medium | Medium | 4 | SRE/Platform | Session-scoped structured logs + required transition fields + dashboard before beta | >10% failures with unknown cause | Hold rollout and add missing instrumentation before resume | +| R-09 | CI device matrix instability blocks release confidence | Medium | Medium | 4 | QA Lead | Reserve stable physical devices, nightly retries, flaky-test quarantine policy | >5% non-deterministic e2e failures | Manual certification run with trace capture and targeted infra fixes | +| R-10 | Protocol version drift between app builds causes connection failures | Medium | High | 6 | Mobile Lead | Enforce `protocolVersion` compatibility checks at handshake + release coordination | Spike in `ERR_PROTOCOL_MISMATCH` | Temporary compatibility shim for N-1 version, then force upgrade | + +## Risk Review Cadence +- Weekly risk review during execution (every Monday). +- 48-hour review before each milestone gate. +- Daily review during release-candidate week. + +## Quantitative Risk Thresholds +- Any risk with exposure >= 6 requires explicit mitigation task in sprint board. +- Any triggered high-impact risk (`Impact=High`) blocks milestone closure until containment is verified. + +## Ownership Rules +- Each risk must have one directly accountable owner. +- Mitigation tasks must include due date and measurable outcome. +- Closed risks remain logged with closure evidence. diff --git a/docs/plans/02-nearby-connections/STATE_MACHINE_SPEC.md b/docs/plans/02-nearby-connections/STATE_MACHINE_SPEC.md new file mode 100644 index 0000000..f601823 --- /dev/null +++ b/docs/plans/02-nearby-connections/STATE_MACHINE_SPEC.md @@ -0,0 +1,128 @@ +# State Machine Spec + +## Purpose +Define deterministic session behavior for Nearby Card Drop including transition rules, errors, and retries. + +## Session Identity +- `sessionId`: UUID generated at transfer initiation. +- `endpointId`: Nearby endpoint identifier (peer-scoped). +- State machine key: `sessionId`. + +## States +- `IDLE`: no active nearby operation. +- `DISCOVERING`: discovery/advertising active. +- `CONNECTING`: connection request/accept in progress. +- `AUTHENTICATING`: 4-digit short code confirmation pending. +- `TRANSFERRING`: chunk send/receive active. +- `VERIFYING`: digest/checksum validation in progress. +- `COMPLETED`: transfer succeeded; terminal. +- `FAILED`: transfer failed; terminal with retry path. +- `CANCELLED`: user cancelled; terminal. + +## Events +- `START_DISCOVERY` +- `STOP_DISCOVERY` +- `ENDPOINT_FOUND(endpointId)` +- `CONNECT_REQUESTED(endpointId)` +- `CONNECTION_ACCEPTED(endpointId)` +- `CONNECTION_REJECTED(reason)` +- `CONNECTION_LOST(reason)` +- `AUTH_CODE_RECEIVED(code)` +- `AUTH_CONFIRMED` +- `AUTH_DECLINED` +- `TRANSFER_STARTED(totalChunks, digest)` +- `CHUNK_SENT(index)` +- `CHUNK_ACK_TIMEOUT(index)` +- `CHUNK_RECEIVED(index)` +- `TRANSFER_FINISHED` +- `VERIFY_OK` +- `VERIFY_FAIL(reason)` +- `SESSION_TIMEOUT` +- `USER_CANCEL` +- `RETRY_REQUESTED` +- `FATAL_ERROR(code, detail)` + +## Transition Table +1. `IDLE` + `START_DISCOVERY` -> `DISCOVERING` +2. `DISCOVERING` + `ENDPOINT_FOUND` -> `DISCOVERING` (cache endpoint) +3. `DISCOVERING` + `CONNECT_REQUESTED` -> `CONNECTING` +4. `DISCOVERING` + `STOP_DISCOVERY` -> `IDLE` +5. `CONNECTING` + `CONNECTION_ACCEPTED` -> `AUTHENTICATING` +6. `CONNECTING` + `CONNECTION_REJECTED` -> `FAILED` +7. `CONNECTING` + `SESSION_TIMEOUT` -> `FAILED` +8. `AUTHENTICATING` + `AUTH_CONFIRMED` -> `TRANSFERRING` +9. `AUTHENTICATING` + `AUTH_DECLINED` -> `FAILED` +10. `AUTHENTICATING` + `SESSION_TIMEOUT` -> `FAILED` +11. `TRANSFERRING` + `TRANSFER_FINISHED` -> `VERIFYING` +12. `TRANSFERRING` + `CONNECTION_LOST` -> `FAILED` (retry-eligible) +13. `TRANSFERRING` + `SESSION_TIMEOUT` -> `FAILED` +14. `VERIFYING` + `VERIFY_OK` -> `COMPLETED` +15. `VERIFYING` + `VERIFY_FAIL` -> `FAILED` +16. `*` + `USER_CANCEL` -> `CANCELLED` +17. `*` + `FATAL_ERROR` -> `FAILED` +18. `FAILED` + `RETRY_REQUESTED` -> `DISCOVERING` (if retry budget remains) +19. `FAILED` + `RETRY_REQUESTED` -> `IDLE` (if retry budget exhausted) + +## Guard Conditions +- `CONNECT_REQUESTED` allowed only when endpoint has been seen within last 10s. +- `AUTH_CONFIRMED` allowed only if both sides show identical 4-digit code. +- `TRANSFER_FINISHED` valid only if `receivedChunkCount == totalChunks`. +- `VERIFY_OK` valid only if local digest equals expected digest from handshake. + +## Retry Rules + +### Connection retry +- Budget: `CONNECTION_RETRY_LIMIT = 2` +- Backoff: `1s`, `2s` (linear) +- Trigger: `CONNECTION_REJECTED` with retryable reason or `CONNECTION_LOST` before transfer start. +- Non-retryable: permission denied, unsupported protocol version. + +### Chunk retry +- Budget per chunk: `CHUNK_RETRY_LIMIT = 3` +- Timeout: `ACK_TIMEOUT_MS = 2000` +- Backoff: `250ms`, `500ms`, `1000ms` +- On exhaustion: emit `FATAL_ERROR(CHUNK_RETRY_EXHAUSTED)`. + +### Session retry +- Budget: `SESSION_RETRY_LIMIT = 1` +- Eligible terminal states: `FAILED` caused by transient transport errors only. + +## Error States and Codes +- `ERR_PERMISSION_DENIED`: required OS permissions missing. +- `ERR_ADAPTER_UNAVAILABLE`: Nearby service unavailable. +- `ERR_PROTOCOL_MISMATCH`: incompatible `protocolVersion`. +- `ERR_AUTH_TIMEOUT`: auth code not confirmed in timeout window. +- `ERR_AUTH_MISMATCH`: user codes differ. +- `ERR_CHUNK_TIMEOUT`: chunk ack timeout. +- `ERR_CHUNK_RETRY_EXHAUSTED`: repeated chunk failures. +- `ERR_DIGEST_MISMATCH`: payload integrity failure. +- `ERR_SESSION_TIMEOUT`: session exceeded wall-clock timeout. +- `ERR_USER_CANCELLED`: user cancelled operation. + +## Timeouts +- Discovery passive timeout: 30s (UI prompts refresh/continue). +- Connect timeout: 10s. +- Authenticate timeout: 20s. +- Transfer idle timeout: 8s without chunk progress. +- Session hard timeout: 45s. + +## Side Effects by State +- `DISCOVERING`: start discovery + advertising; clear stale endpoints. +- `CONNECTING`: freeze endpoint list; show connection progress UI. +- `AUTHENTICATING`: render shared 4-digit code, require explicit user action. +- `TRANSFERRING`: persist per-chunk progress and retry counters. +- `VERIFYING`: compute SHA-256 digest and CRC verification summary. +- `COMPLETED`: emit success metric + receipt; disconnect cleanly. +- `FAILED`: emit error metric + reason; disconnect and cleanup. +- `CANCELLED`: disconnect and purge session buffers. + +## Instrumentation Requirements +Each transition log line must include: +- `sessionId` +- `fromState` +- `toState` +- `event` +- `endpointId` +- `errorCode` (nullable) +- `retryCount` +- `timestampMs` diff --git a/docs/plans/02-nearby-connections/TEST_STRATEGY.md b/docs/plans/02-nearby-connections/TEST_STRATEGY.md new file mode 100644 index 0000000..1df7a08 --- /dev/null +++ b/docs/plans/02-nearby-connections/TEST_STRATEGY.md @@ -0,0 +1,118 @@ +# Test Strategy + +## Objective +Validate Plan 02 delivery quality with traceable coverage from state machine rules to user outcomes. + +## Test Scope +- Flutter domain/state machine logic +- Android/iOS native bridge event correctness +- End-to-end transfer behavior +- Failure handling and retry semantics +- Optional signaling fallback behavior + +## Test Pyramid +- Unit tests: 60% +- Integration tests: 25% +- End-to-end/device tests: 15% + +## Environments +- Local simulator/emulator with mock adapter +- Physical device lab: + - Android: latest-2 major versions + - iOS: latest-2 major versions +- Staging backend (if signaling enabled) + +## Test Matrix (Minimum) +- Android -> Android (3 device pairs) +- iOS -> iOS (3 device pairs) +- Android -> iOS (4 cross-platform pairs) +- Foreground/Background transitions during transfer +- Permissions states: + - all granted + - bluetooth denied + - location/nearby denied + +## Coverage Requirements +- State transitions: 100% transition-path coverage from `STATE_MACHINE_SPEC.md`. +- Retry branches: 100% for connection and chunk retry logic. +- Data contract serialization/deserialization: 100% for required fields. +- Native event decoding: 0 unhandled event types. + +## Test Suites + +### Unit +- `session_state_machine_test.dart` + - Valid and invalid transitions + - Guard condition enforcement + - Timeout transitions +- `transfer_protocol_test.dart` + - Chunk split/reassembly + - CRC32 and SHA-256 verification + - Retry budget exhaustion +- `contracts_test.dart` + - DTO schema compatibility and version checks + +Pass gate +- >= 90% line coverage in `app/lib/state` and `app/lib/core`. + +### Integration +- Flutter <-> native bridge contract tests + - Event envelope parsing + - Event ordering constraints + - Endpoint lifecycle mapping +- Mock-native replay tests + - Replays of recorded callback sequences + - Fault injections for dropped callbacks + +Pass gate +- 500-event replay run with 0 decode errors and 0 state deadlocks. + +### End-to-End +- Happy path card transfer: + - 1 MB payload, 100 runs, success >= 98% +- Stress path: + - 5 MB payload, 50 runs, success >= 95% +- Recovery path: + - forced disconnect mid-transfer, recovery succeeds within retry policy >= 90% + +Pass gate +- P95 discovery-to-connect <= 8s +- P95 total transfer time (1 MB) <= 12s + +## Non-Functional Tests +- Battery impact: 20-minute repeated discovery/connect cycles. + - Gate: battery drain <= 8% on reference devices. +- Memory pressure test: repeated 5 MB transfers for 30 cycles. + - Gate: no OOM, no unbounded memory growth. +- Background behavior: + - App pause/resume during `TRANSFERRING` and `VERIFYING`. + +## Failure Injection Plan +- Inject wrong auth code. +- Drop every Nth chunk ack. +- Corrupt a single chunk CRC. +- Simulate adapter unavailable event. +- Simulate permissions revoked mid-session. + +Expected result +- Session terminates into correct `FAILED` code with cleanup complete. + +## CI/CD Gating +- PR checks required: + - unit tests + - integration tests + - static analysis/lint +- Nightly checks: + - extended replay/fault-injection suite +- Release-candidate checks: + - full physical-device matrix + +## Defect Policy +- `P0`: data corruption/security issue/crash loop; blocks release. +- `P1`: transfer failure > gate threshold; blocks release. +- `P2`: non-critical UX inconsistency; can ship with mitigation. + +## Exit Criteria +- All quality gates green. +- No open P0/P1 defects. +- Observability metrics validate target SLOs over 7-day beta. diff --git a/docs/plans/03-animated-qr-visual-handshake/CODEC_SPEC.md b/docs/plans/03-animated-qr-visual-handshake/CODEC_SPEC.md new file mode 100644 index 0000000..d993c2a --- /dev/null +++ b/docs/plans/03-animated-qr-visual-handshake/CODEC_SPEC.md @@ -0,0 +1,121 @@ +# Fountain Codec Specification (Plan 03) + +## Purpose +Define the on-frame fountain chunk schema and deterministic encode/decode behavior for animated QR transport. + +## Protocol Version +- `protocol_version`: `0x01` (Phase 1) +- Any incompatible wire-format or decode-semantic change must increment this value. + +## Terminology +- Source block: Original payload split into fixed-size blocks. +- Symbol: XOR combination of one or more source blocks, identified by `symbol_index` and `symbol_seed`. +- Frame: One QR payload carrying one serialized symbol chunk. + +## Source Payload Constraints (Phase 1) +- Payload size: `1KB` to `250KB` (hard cap). +- Recommended profile sizes for QA gates: `4KB`, `16KB`, `32KB`, `64KB`. +- Payload must be encrypted before fountain encoding. + +## Fountain Chunk Schema (Binary) +Byte order: network/big-endian. + +1. `protocol_version` (`u8`) +2. `flags` (`u8`) +- bit0: `is_completion_marker` +- bit1: `is_system_frame` +- bit2-7: reserved (must be 0 in v1) +3. `transfer_id` (`u128`) +- Random per session; must never repeat for active concurrent sessions. +4. `payload_sha256` (`[u8; 32]`) +- Hash of full plaintext or encrypted payload (must be consistent across sender/receiver policy). +5. `total_source_blocks` (`u16`) +- Number of source blocks in original payload. +6. `source_block_size` (`u16`) +- Default `512` bytes; last block may be shorter. +7. `symbol_index` (`u32`) +- Monotonic at sender, wraps disallowed in v1. +8. `symbol_seed` (`u64`) +- Seed for deterministic degree + block-selection generation. +9. `symbol_degree` (`u8`) +- Number of source blocks XORed for this symbol; must be `>=1`. +10. `symbol_len` (`u16`) +- Symbol payload bytes. +11. `symbol_bytes` (`[u8; symbol_len]`) +12. `symbol_crc16` (`u16`) +- CRC-16/CCITT-FALSE over fields `1..11`. + +## Envelope for QR String +- Binary chunk is encoded with base64url (no padding) for portability. +- Final QR string format: + - `XDI:1:` +- Prefix rules: + - `XDI` constant magic. + - `1` is schema envelope version (independent of protocol byte). + +## Sender Encode Flow +1. Validate payload size and compute `payload_sha256`. +2. Split payload into source blocks with configured `source_block_size`. +3. Generate base symbol budget: +- `target_symbols = ceil(total_source_blocks * redundancy_factor)` +- Default `redundancy_factor = 1.5`. +4. For each `symbol_index`: +- Derive `symbol_seed` from `(transfer_id, symbol_index)` via deterministic PRNG. +- Sample degree from robust distribution profile. +- Select unique source block indices deterministically from seed. +- XOR selected blocks into `symbol_bytes`. +- Build binary chunk and append CRC16. +- Serialize into envelope and emit as QR frame. +5. After normal symbols, emit completion marker frames (same transfer metadata, `is_completion_marker=1`) every `N=12` frames. + +## Receiver Decode Flow +1. Scan QR and parse envelope prefix/version. +2. base64url decode payload; parse binary fields. +3. Validate: +- `protocol_version` supported. +- Reserved bits are zero. +- `transfer_id` matches active session. +- CRC16 valid. +- `symbol_len` sane for active profile. +4. Drop duplicates by `(transfer_id, symbol_index)`. +5. Reconstruct symbol equation from `symbol_seed` and `symbol_degree`. +6. Feed equation into decoder (peeling + fallback Gaussian elimination). +7. Update completion estimate: `recovered_source_blocks / total_source_blocks`. +8. On full recovery: +- Reassemble payload. +- Verify `payload_sha256` exact match. +- Emit transfer success event only after hash pass. + +## Completion Criteria +Transfer is complete only when all are true: +1. Decoder solved all source blocks. +2. Reassembled payload length matches expected. +3. SHA-256 matches `payload_sha256` from chunk metadata. +4. No unresolved contradictions in decode graph. + +## Failure and Recovery Rules +- CRC failure: drop frame, increment `crc_error_count`. +- Protocol mismatch: reject frame, increment `unsupported_version_count`. +- Transfer mismatch: ignore unless app explicitly supports multi-session. +- Hash mismatch after solved graph: mark transfer failed; restart session. +- Decoder stall timeout: if no rank increase for `1.2s`, request continued playback/replay. + +## Interop/Determinism Requirements +- PRNG algorithm and seed derivation must be identical across platforms (Rust reference implementation is canonical). +- `symbol_seed` must fully determine degree and selected indices. +- Floating-point operations are forbidden in degree/index generation. + +## Performance Requirements +- Serialize + encode overhead per symbol: <= `0.3ms` median on modern mobile CPU class. +- Decoder ingest path: sustain >= `45` symbols/s on mid-tier device. +- Decoder false completion probability: effectively `0` (guarded by SHA-256 validation). + +## Validation Checklist +1. Golden vectors: +- Fixed transfer id + payload -> fixed first 256 symbols. +2. Round-trip tests: +- Out-of-order ingest and duplicate-heavy streams. +3. Corruption tests: +- Bit flips in header and payload must fail CRC/hash checks. +4. Stress tests: +- 10,000 random sessions with configured loss models. diff --git a/docs/plans/03-animated-qr-visual-handshake/EXECUTION_BREAKDOWN.md b/docs/plans/03-animated-qr-visual-handshake/EXECUTION_BREAKDOWN.md new file mode 100644 index 0000000..f72dd4b --- /dev/null +++ b/docs/plans/03-animated-qr-visual-handshake/EXECUTION_BREAKDOWN.md @@ -0,0 +1,108 @@ +# Plan 03 Execution Breakdown + +## Goal +Deliver a production-ready Phase 1 visual handshake path for medium business-card payloads, from sender animation to receiver reconstruction, with deterministic Rust codec behavior and measurable mobile decode reliability. + +## Workstreams +1. Codec Core (Rust) +- Build LT-style fountain encoder/decoder with deterministic PRNG per `(transfer_id, symbol_seed)`. +- Implement symbol deduplication, out-of-order ingestion, and completion detection. +- Export stable API surface for mobile bindings. + +2. Frame Schema + QR Packaging +- Finalize binary chunk schema and base45/base64url transport envelope. +- Add frame-level integrity (CRC-16) and payload-level SHA-256 validation. +- Define QR size/ECC defaults and payload budget per frame. + +3. Sender Animation Pipeline +- Implement frame scheduler (target 24/30 FPS profiles). +- Add redundancy profile controls (`1.25x`, `1.5x`, `1.75x`). +- Emit completion marker frames and restart behavior for late scanners. + +4. Mobile Scanner Pipelines +- iOS: AVCapture + Vision/OpenCV decode loop with adaptive frame skip. +- Android: CameraX + ML Kit decode loop with backpressure controls. +- Feed parsed symbols into decoder with de-dup and session filtering. + +5. Verification + Benchmarking +- Deterministic vectors, simulated frame-loss tests, and optical scenario tests. +- Collect throughput, completion rate, and latency metrics by device class. +- Publish benchmark summary and recommended default profiles. + +## Milestones and Exit Criteria +1. M1: Codec MVP Complete +- Exit criteria: + - `encode -> shuffle/drop/duplicate -> decode` succeeds at 30% random frame loss for payloads 4KB, 16KB, 64KB. + - Decoder rejects corrupted symbol CRC and never reports false success. + - Deterministic vectors stable across 3 consecutive CI runs. + +2. M2: Wire Format Frozen +- Exit criteria: + - `CODEC_SPEC.md` fields implemented exactly and version-gated. + - Max encoded frame payload size documented and enforced. + - Backward-incompatible changes blocked unless `protocol_version` increments. + +3. M3: Sender + Scanner Loop Operational +- Exit criteria: + - End-to-end transfer succeeds on at least 1 iOS + 1 Android pair for 16KB payload. + - Progress feedback appears within 1.0s from first decodable frame. + - Duplicate-frame rate does not cause decoder stall. + +4. M4: Performance Gate +- Exit criteria: + - Completion success >= 95% under office light + mild shake at 40cm for 16KB payload. + - Effective throughput >= 50KB/s under good lighting at 30 FPS. + - P95 completion time for 32KB payload <= 2.8s on mid-tier 2023+ phones. + +5. M5: Release Readiness +- Exit criteria: + - Test matrix in `TEST_STRATEGY.md` executed with logged results. + - All high-severity risks in `RISK_REGISTER.md` are mitigated or explicitly accepted. + - Rollout config includes per-device profile defaults and fallback behavior. + +## Sequenced Implementation Plan +1. Week 1: Codec foundations +- Implement symbol generation, degree selection, and decode graph/reduction. +- Add symbol/header structs and binary serialization tests. +- Add deterministic seeds and test vector fixtures. + +2. Week 2: Codec hardening + schema lock +- Add CRC validation and payload hash completion checks. +- Freeze frame schema and parser behavior (strict/lenient fields). +- Add failure-mode tests (truncated frame, wrong transfer id, stale session). + +3. Week 3: Sender frame player +- Implement frame generation with tunable FPS and redundancy. +- Add frame pacing telemetry (`generated_fps`, `display_fps`, drop count). +- Implement completion marker cadence and replay loop. + +4. Week 4: Mobile ingestion +- Integrate iOS and Android scanner loops. +- Add decode queue, duplicate suppression cache, and timeout reset logic. +- Surface progress UI from decoder completion ratio estimates. + +5. Week 5: Stress/optimization +- Run optical and motion matrix. +- Tune QR version/ECC/FPS per device tier. +- Lock default operational profile and document rollout checklist. + +## Quality/Performance Targets +- Decoder correctness: 0 false-positive completion in 10,000 randomized trials. +- Frame-loss resilience: decode success at <= 30% random loss and <= 15% burst loss (burst length up to 8 frames). +- UX latency: first meaningful progress in < 1.0s; final integrity verification in < 150ms after last required symbol. +- Resource budgets: + - iOS CPU: <= 35% average during scan on A15-class device. + - Android CPU: <= 40% average during scan on Snapdragon 7-class device. + - Memory: decoder working set <= 32MB for 64KB payload profile. + +## Validation Steps (Release Gate) +1. Run deterministic codec vectors and randomized property tests. +2. Run replay-benchmark tool with loss profiles `0%`, `10%`, `20%`, `30%`, burst `8`. +3. Run device optical matrix: distances `20/40/70cm`, light `low/office/daylight`, motion `static/mild/aggressive`. +4. Verify completion hash checks and mismatch handling UX. +5. Publish benchmark table with pass/fail against targets. + +## Ownership and Handoff +- Worker 3 scope: plan docs/spec/testing/risk artifacts only. +- Implementation owners consume these docs as normative references for code and QA. +- Any protocol changes require coordinated update to `CODEC_SPEC.md`, vectors, and test gates in same PR. diff --git a/plans/03-animated-qr-visual-handshake/IMPLEMENTATION_PLAN.md b/docs/plans/03-animated-qr-visual-handshake/IMPLEMENTATION_PLAN.md similarity index 100% rename from plans/03-animated-qr-visual-handshake/IMPLEMENTATION_PLAN.md rename to docs/plans/03-animated-qr-visual-handshake/IMPLEMENTATION_PLAN.md diff --git a/docs/plans/03-animated-qr-visual-handshake/RISK_REGISTER.md b/docs/plans/03-animated-qr-visual-handshake/RISK_REGISTER.md new file mode 100644 index 0000000..c8f3753 --- /dev/null +++ b/docs/plans/03-animated-qr-visual-handshake/RISK_REGISTER.md @@ -0,0 +1,115 @@ +# Risk Register (Plan 03 Animated QR Visual Handshake) + +## Scoring Model +- Likelihood: `1 (low)` to `5 (high)` +- Impact: `1 (low)` to `5 (high)` +- Risk score: `Likelihood x Impact` +- Severity bands: + - `P0`: score >= 20 + - `P1`: 12-19 + - `P2`: 6-11 + - `P3`: <= 5 + +## Active Risks +1. Decoder false completion or data corruption acceptance +- ID: `R-001` +- Score: `2 x 5 = 10 (P2)` +- Trigger: Completion event emitted without strict payload hash verification. +- Impact: Silent contact-card corruption. +- Mitigation: + - Enforce SHA-256 match as hard completion gate. + - Add 10,000-trial randomized no-false-success test gate. +- Validation: 0 false success in randomized/fuzz suites. +- Contingency: Block release and revert protocol change introducing regression. + +2. High frame-loss environments cause decode stalls +- ID: `R-002` +- Score: `4 x 4 = 16 (P1)` +- Trigger: Burst loss or motion blur reduces unique symbol throughput. +- Impact: Transfer timeout and poor UX. +- Mitigation: + - Default redundancy 1.5x with profile bump to 1.75x on weak conditions. + - Completion markers + replay loop every 12 frames. + - Adaptive scanner frame skip/backpressure tuning. +- Validation: >=95% completion at 30% random loss in target condition. +- Contingency: Auto-switch to low-FPS high-redundancy profile. + +3. Cross-platform nondeterminism in symbol generation +- ID: `R-003` +- Score: `3 x 5 = 15 (P1)` +- Trigger: Different PRNG or index sampling behavior between Rust and mobile bindings. +- Impact: Decoder incompatibility across devices. +- Mitigation: + - Rust codec as canonical implementation. + - Golden vectors for first 256 symbols across platforms. + - Ban floating-point math in selection path. +- Validation: Exact vector match in CI for iOS/Android bindings. +- Contingency: Disable noncanonical path and ship Rust FFI-only mode. + +4. QR payload density too high for real-world camera decode +- ID: `R-004` +- Score: `4 x 4 = 16 (P1)` +- Trigger: Oversized frame payload causes scanner decode failures in low light. +- Impact: Throughput collapse, high failure rate. +- Mitigation: + - Cap frame payload size per QR version/ECC profile. + - Maintain per-device profile table for version + ECC + FPS. + - Validate with full optical matrix before defaults are locked. +- Validation: Completion/throughput gates met at 20/40/70cm. +- Contingency: Reduce symbol bytes/frame and increase redundancy. + +5. CPU/thermal throttling on mid-tier devices +- ID: `R-005` +- Score: `3 x 4 = 12 (P1)` +- Trigger: Sustained scanning at high FPS overheats device, dropping decode quality. +- Impact: Latency spikes, session failures. +- Mitigation: + - Backpressure-aware frame processing. + - Tiered FPS profile (24 FPS fallback). + - 30-minute soak tests with thermal telemetry. +- Validation: CPU/memory gates plus no crash in soak tests. +- Contingency: Auto-throttle FPS when processing lag exceeds threshold. + +6. Session collision or stale-frame contamination +- ID: `R-006` +- Score: `2 x 4 = 8 (P2)` +- Trigger: Reused transfer IDs or late frames from previous session. +- Impact: Decode confusion and potential hash mismatch. +- Mitigation: + - 128-bit random transfer IDs. + - Strict session filtering and idle timeout reset. +- Validation: Session-mismatch tests and replay contamination tests pass. +- Contingency: Force new session generation and clear decode buffers. + +7. Security/privacy leak via debug frame storage +- ID: `R-007` +- Score: `2 x 5 = 10 (P2)` +- Trigger: Raw camera frames stored unintentionally. +- Impact: Exposure of sensitive card data. +- Mitigation: + - Debug frame capture off by default. + - Explicit opt-in with auto-expiry and local-only storage. + - Ensure payload encrypted pre-encoding. +- Validation: Storage audit in QA, no frame persistence in default mode. +- Contingency: Remove debug storage feature from release build. + +8. Incomplete observability blocks root-cause analysis +- ID: `R-008` +- Score: `3 x 3 = 9 (P2)` +- Trigger: Missing telemetry for CRC/session/hash/decode-rank events. +- Impact: Slow incident response and tuning. +- Mitigation: + - Standard metric schema and error counters. + - Persist benchmark artifacts for all gate runs. +- Validation: Required metrics present in test artifacts. +- Contingency: Halt tuning decisions until telemetry baseline is restored. + +## Risk Review Cadence +- Weekly risk review during implementation. +- Immediate review on any P0/P1 incident. +- Update risk scores after each major benchmark cycle. + +## Release Risk Policy +- No open P0 risks. +- P1 risks require mitigation evidence and explicit acceptance owner. +- All unresolved risks must include contingency + rollback notes. diff --git a/docs/plans/03-animated-qr-visual-handshake/TEST_STRATEGY.md b/docs/plans/03-animated-qr-visual-handshake/TEST_STRATEGY.md new file mode 100644 index 0000000..ae7e18e --- /dev/null +++ b/docs/plans/03-animated-qr-visual-handshake/TEST_STRATEGY.md @@ -0,0 +1,101 @@ +# Test Strategy (Plan 03 Animated QR Visual Handshake) + +## Objectives +- Prove deterministic codec correctness. +- Validate end-to-end decode reliability under realistic optical and motion conditions. +- Enforce measurable performance and quality gates before release. + +## Test Levels +1. Unit tests (Rust codec) +- Symbol serialization/deserialization. +- CRC generation/validation. +- Deterministic seed -> degree/index mapping. +- Duplicate/invalid symbol handling. + +2. Property and fuzz tests +- Random payloads and transfer IDs. +- Random symbol order, duplicates, and loss injection. +- Corrupted header/payload bit flips. + +3. Integration tests +- Sender frame generator -> scanner parser -> decoder loop. +- Session reset and retry flows. +- Completion marker handling. + +4. Device/system tests +- Real camera-based scan in target distance/light/motion matrix. +- iOS + Android cross-device interop. + +5. Performance/soak tests +- Sustained transfer loop for 30 minutes. +- CPU/memory budgets during repeated sessions. + +## Core Test Matrix +Dimensions: +- Payload sizes: `4KB`, `16KB`, `32KB`, `64KB`. +- Frame loss: `0%`, `10%`, `20%`, `30%` random; burst loss length `4` and `8`. +- Distance: `20cm`, `40cm`, `70cm`. +- Lighting: `low`, `office`, `bright daylight`. +- Motion: `static`, `mild shake`, `aggressive shake`. +- Devices: minimum `3 iOS + 3 Android` models. + +## Pass/Fail Quality Gates +1. Correctness gate +- 100% pass on deterministic golden vectors. +- 0 false-success decode (hash mismatch accepted as success) in 10,000 randomized trials. + +2. Reliability gate +- >= 99% completion at <= 20% random loss for 16KB and 32KB payloads (office light, mild shake, 40cm). +- >= 95% completion at 30% random loss for 16KB payload (same condition). + +3. Performance gate +- Good lighting throughput >= 50KB/s at 30 FPS profile. +- P95 completion time: + - 16KB <= 1.8s + - 32KB <= 2.8s + - 64KB <= 5.5s +- First progress feedback latency < 1.0s. + +4. Resource gate +- iOS scan CPU average <= 35%; Android <= 40%. +- Memory peak during 64KB decode <= 32MB incremental working set. +- No crash/leak in 30-minute soak run. + +## Validation Procedure +1. Offline codec validation +- Run unit/property/fuzz suites. +- Produce summary with trial counts and failure categories. + +2. Replay benchmark validation +- Use recorded frame streams with controlled synthetic loss. +- Compare decode rank progression versus expected curves. + +3. Optical test execution +- Run full distance/light/motion matrix on each device pair. +- Record completion rate, median and P95 completion time, and error counts. + +4. Regression validation +- Re-run golden vectors and 16KB/32KB critical scenarios for each protocol or scanner change. + +## Required Test Artifacts +- `golden_vectors.json` (fixed transfer sessions and expected symbols/hash). +- Benchmark CSV/JSON containing: + - `device_model`, `os_version`, `payload_size`, `fps`, `redundancy_factor`, `loss_profile`, `completion`, `completion_time_ms`, `throughput_kbps`, `cpu_avg`, `mem_peak_mb`. +- Failure logs with categorized reason: + - `crc_error`, `unsupported_version`, `session_mismatch`, `decoder_stall`, `hash_mismatch`. + +## CI and Release Gates +- CI required checks: + - Rust unit/property tests. + - Determinism vectors. + - Replay loss simulation suite. +- Release-blocking conditions: + - Any correctness gate failure. + - Reliability below target on two consecutive runs. + - Untriaged high-severity defect in decode or integrity path. + +## Sign-off Criteria +Release sign-off requires all: +1. All quality gates pass with stored artifacts. +2. No open P0/P1 issues in risk register without explicit acceptance. +3. Documented default runtime profile (`fps`, `ecc`, `redundancy`) per device tier. diff --git a/docs/plans/04-web3-sbt-contacts/CONTRACT_AND_REPLAYER_SPEC.md b/docs/plans/04-web3-sbt-contacts/CONTRACT_AND_REPLAYER_SPEC.md new file mode 100644 index 0000000..7aa2422 --- /dev/null +++ b/docs/plans/04-web3-sbt-contacts/CONTRACT_AND_REPLAYER_SPEC.md @@ -0,0 +1,260 @@ +# Contract And Relayer Spec (Plan 04) + +## 1. Scope +This document defines: +- on-chain contract interfaces/events for `SBTProfile` and `ConnectionGraph` +- relayer REST APIs +- end-to-end nonce + signature + submission flow + +Phase 1 excludes cross-chain messaging and zk privacy overlays. + +## 2. Chain and Signature Standards +- Token standard: ERC-5192 (minimal soulbound NFT interface) +- Signature standard: EIP-712 typed data +- Signature algo: secp256k1 (`eth_signTypedData_v4` compatible) +- Replay boundary: domain separator + per-handshake nonce + expiry + +## 3. Smart Contract API + +## 3.1 `SBTProfile` (Proposed) + +### State +- `mapping(address => uint256) public profileTokenIdOf` +- `mapping(uint256 => string) private _tokenCid` +- `uint256 public nextTokenId` + +### Roles +- `DEFAULT_ADMIN_ROLE`: admin controls (pause, role grants) +- `MINTER_ROLE`: allowlisted minter (optional if self-mint only) + +### External Methods +- `function mintProfile(address to, string calldata cid) external returns (uint256 tokenId)` +- `function updateProfileCID(uint256 tokenId, string calldata cid) external` +- `function tokenURI(uint256 tokenId) public view returns (string memory)` +- `function locked(uint256 tokenId) external view returns (bool)` + +### Behavior Rules +- one active profile token per wallet in Phase 1. +- transfer/approval operations MUST revert (soulbound). +- `locked(tokenId)` MUST always return `true` once minted. + +### Events +- `event ProfileMinted(address indexed owner, uint256 indexed tokenId, string cid)` +- `event ProfileCIDUpdated(uint256 indexed tokenId, string oldCid, string newCid)` + +### Custom Errors +- `error ProfileAlreadyExists(address owner)` +- `error Unauthorized()` +- `error InvalidCID()` + +## 3.2 `ConnectionGraph` (Proposed) + +### State +- `mapping(bytes32 => bool) public nonceUsed` +- `mapping(bytes32 => bool) public connectionRecorded` + - key: `keccak256(abi.encodePacked(min(a,b), max(a,b), encounterHash))` + +### Typed Data Struct +`HandshakeAttestation`: +- `address initiator` +- `address responder` +- `bytes32 encounterHash` +- `bytes32 nonce` +- `uint256 deadline` + +Type hash: +- `keccak256("HandshakeAttestation(address initiator,address responder,bytes32 encounterHash,bytes32 nonce,uint256 deadline)")` + +### External Methods +- `function recordConnection(HandshakeAttestation calldata a, bytes calldata sigInitiator, bytes calldata sigResponder) external` + +### Validation Rules +- `block.timestamp <= deadline` +- `nonceUsed[a.nonce] == false` +- recovered signer from `sigInitiator` equals `a.initiator` +- recovered signer from `sigResponder` equals `a.responder` +- `a.initiator != a.responder` +- both addresses must own profile SBT tokens (Phase 1 gating) +- duplicate pair+encounter writes MUST revert + +### State Effects +- mark nonce consumed +- mark connection key consumed +- emit connection event + +### Events +- `event ConnectionRecorded(address indexed initiator, address indexed responder, bytes32 indexed nonce, bytes32 encounterHash, uint256 timestamp)` + +### Custom Errors +- `error NonceAlreadyUsed(bytes32 nonce)` +- `error SignatureInvalid(address expected)` +- `error SignatureExpired(uint256 deadline, uint256 nowTs)` +- `error SelfConnectionNotAllowed()` +- `error DuplicateConnection(bytes32 key)` +- `error ProfileRequired(address wallet)` + +## 4. Relayer API Specification + +Base path: `/v1` +Format: JSON over HTTPS +Auth (Phase 1): wallet signatures only; optional API key for partner channels. + +## 4.1 `POST /handshake/prepare` +Create canonical typed-data payload and server nonce. + +Request: +```json +{ + "initiator": "0x...", + "responder": "0x...", + "encounter_hash": "0x...", + "chain_id": 11155111 +} +``` + +Response (200): +```json +{ + "handshake_id": "hs_01J...", + "nonce": "0x...32bytes", + "deadline": 1760000000, + "typed_data": { + "domain": { + "name": "XDeviceConnectionGraph", + "version": "1", + "chainId": 11155111, + "verifyingContract": "0xConnectionGraph" + }, + "types": {"HandshakeAttestation": ["..."]}, + "primaryType": "HandshakeAttestation", + "message": {"...": "..."} + } +} +``` + +Validation and constraints: +- verify address format + checksum normalization. +- reject if initiator == responder. +- issue cryptographically random nonce (32 bytes). +- default deadline: now + 5 minutes. +- persist state: `issued` with TTL. + +## 4.2 `POST /handshake/submit` +Accept both signatures, verify, and relay transaction. + +Request: +```json +{ + "handshake_id": "hs_01J...", + "attestation": { + "initiator": "0x...", + "responder": "0x...", + "encounter_hash": "0x...", + "nonce": "0x...", + "deadline": 1760000000 + }, + "sig_initiator": "0x...", + "sig_responder": "0x...", + "idempotency_key": "7f0e..." +} +``` + +Response (202): +```json +{ + "relay_id": "rl_01J...", + "tx_hash": "0x...", + "status": "pending" +} +``` + +Server checks before broadcast: +- handshake exists and not expired/consumed. +- attestation payload exact-match with issued typed-data. +- both signatures recover expected signers. +- nonce not already used in local store. +- rate-limit and abuse checks pass. + +Post-broadcast behavior: +- mark handshake `consumed` atomically with relay enqueue. +- record tx hash and confirmation target. +- retry replacement tx if pending beyond threshold. + +## 4.3 `GET /tx/:hash` +Response: +```json +{ + "tx_hash": "0x...", + "status": "pending|confirmed|failed|replaced", + "block_number": 12345, + "confirmations": 8, + "revert_reason": null +} +``` + +## 4.4 `GET /profile/:address` +Response: +```json +{ + "address": "0x...", + "token_id": "42", + "cid": "bafy...", + "minted_at_block": 120000 +} +``` + +## 4.5 `GET /connections/:address` +Query: `cursor`, `limit` (max 100) + +Response: +```json +{ + "items": [ + { + "counterparty": "0x...", + "encounter_hash": "0x...", + "timestamp": 1760000000, + "tx_hash": "0x..." + } + ], + "next_cursor": "..." +} +``` + +## 5. Nonce and Signature Lifecycle +1. Client A/B agree encounter context off-chain (QR/BLE), derive `encounter_hash`. +2. App calls `POST /handshake/prepare` with A/B addresses + encounter hash. +3. Relayer returns canonical typed data with unique nonce and short deadline. +4. Both wallets sign the exact same EIP-712 message. +5. App submits payload + two signatures to `POST /handshake/submit`. +6. Relayer re-verifies signatures, nonce freshness, and anti-abuse constraints. +7. Relayer sends `recordConnection(...)` transaction. +8. On receipt/event, indexer writes canonical connection row. +9. Any replay of same nonce is rejected off-chain and on-chain. + +## 6. Security Requirements +- Nonce entropy: CSPRNG, 256-bit. +- Nonce TTL: <= 5 minutes (configurable, default 300s). +- Clock skew tolerance: <= 30s server-side. +- Idempotency: required for client retries on submit. +- Domain pinning: chainId + verifyingContract must match configured environment. +- Reorg policy: only mark final after `N` confirmations (default 8 on EVM L2, 12 on L1). +- Relayer key management: KMS/HSM-backed signing, quarterly rotation minimum. + +## 7. Failure Modes and Responses +- Invalid signature: `400 SIGNATURE_INVALID` +- Expired nonce/deadline: `400 NONCE_EXPIRED` +- Duplicate submit/idempotent replay: `200/202` with existing relay record +- Nonce already consumed on-chain: `409 NONCE_USED` +- Tx reverted: `422 TX_REVERTED` +- Chain unavailable: `503 RPC_UNAVAILABLE` + +## 8. Observability Requirements +- Metrics: + - `handshake_prepare_total`, `handshake_submit_total` + - `signature_verify_fail_total` + - `nonce_expired_total`, `nonce_replay_blocked_total` + - `relay_tx_pending_seconds`, `relay_tx_fail_total` +- Structured logs include: + - `handshake_id`, `relay_id`, `tx_hash`, `chain_id`, `error_code` +- Tracing across API -> relay queue -> chain submit -> indexer consume. diff --git a/docs/plans/04-web3-sbt-contacts/EXECUTION_BREAKDOWN.md b/docs/plans/04-web3-sbt-contacts/EXECUTION_BREAKDOWN.md new file mode 100644 index 0000000..e26b637 --- /dev/null +++ b/docs/plans/04-web3-sbt-contacts/EXECUTION_BREAKDOWN.md @@ -0,0 +1,138 @@ +# Execution Breakdown (Plan 04) + +## Goal +Deliver a production-ready Phase 1 Web3 contact protocol with: +- ERC-5192 profile SBT contracts +- connection attestation contract +- Go relayer + indexer +- mobile signing/submit integration +- staged rollout with measurable guardrails + +## Workstreams and Owners +- Smart Contracts: Solidity engineer + security reviewer +- Relayer/API: Go backend engineer +- Indexer/Data: backend + data engineer +- Mobile dApp: React Native engineer +- DevSecOps: SRE/security engineer +- Program Control: tech lead / PM + +## Milestones (6 Weeks) + +### Week 1: Specification Freeze +- Finalize contract interfaces, events, errors, and role model. +- Finalize EIP-712 domain and typed-data schema. +- Define relayer API request/response contracts and error codes. +- Define chain targets (staging + prod), RPC providers, and confirmation policy. +- Exit criteria: + - `CONTRACT_AND_REPLAYER_SPEC.md` approved by backend + mobile + contracts owners. + - Threat model review completed (replay, frontrun, spam, key compromise). + +### Week 2: Contract MVP + Unit Tests +- Implement `SBTProfile.sol` with ERC-5192 locked semantics. +- Implement `ConnectionGraph.sol` write path with nonce binding and duplicate prevention. +- Add Foundry tests for minting rules, lock behavior, signature validation, replay protection. +- Exit criteria: + - Unit test coverage >= 90% of contract branches. + - Gas report generated for core methods. + +### Week 3: Relayer MVP + Integration Harness +- Implement `POST /v1/handshake/prepare` and `POST /v1/handshake/submit`. +- Server-side EIP-712 verification for both participants. +- Relayer transaction submission, pending tracking, and retry/backoff. +- Add Redis/Postgres nonce state (`issued`, `consumed`, `expired`). +- Exit criteria: + - Deterministic replay rejection verified. + - 99% success in synthetic submission tests (excluding chain outage). + +### Week 4: Indexer + Query APIs +- Implement event consumers for profile and connection events. +- Persist canonical projections to Postgres. +- Implement `GET /v1/tx/:hash`, `GET /v1/profile/:address`, `GET /v1/connections/:address`. +- Add backfill/reorg handling and lag metrics. +- Exit criteria: + - Reorg-safe indexing validated in testnet reorg simulation. + - Query APIs satisfy pagination/consistency requirements. + +### Week 5: Mobile Integration + Staging Soak +- Integrate WalletConnect flow and EIP-712 signing. +- Wire handshake prepare/submit/status UX states. +- Run staging soak tests with synthetic high-rate handshakes. +- Configure rate limits, abuse detection, and alerting. +- Exit criteria: + - End-to-end handshake success >= 98% in staging. + - p95 relayer prepare/submit latency < 300ms (chain confirmation excluded). + +### Week 6: Security Hardening + Controlled Launch +- Internal security review + external audit fixes. +- Finalize runbook: relayer key rotation, incident response, and rollback. +- Progressive rollout gates (1%, 10%, 50%, 100%). +- Exit criteria: + - All critical/high audit findings resolved or formally accepted. + - Go/No-Go decision documented with KPI evidence. + +## Detailed Execution Tasks + +### Contracts +- Implement: + - profile mint/update policy + - non-transferability/locked checks + - connection attestation write function + - strict events + custom errors +- Security tasks: + - domain separator chain binding + - nonce uniqueness and expiry validation + - input normalization (address ordering for connection pairs) + +### Relayer +- Implement: + - nonce issuance and TTL + - signature validation for initiator/responder + - sponsorship policy (who qualifies for gas subsidy) + - tx broadcasting, confirmation, replacement policy +- Security tasks: + - per-IP and per-wallet throttling + - idempotency key support on submit endpoint + - hot key isolation (KMS/HSM signer) + +### Indexer +- Implement: + - finalized and pending event processing modes + - dedupe by `(tx_hash, log_index)` + - reorg rollback depth and replay +- Reliability tasks: + - dead-letter queue for malformed events + - checkpointing and resumable consumers + +### Mobile +- Implement: + - deterministic typed-data rendering before sign + - dual-sign handshake flow + - explicit pending/confirmed/failed states +- Security tasks: + - verify domain fields match expected chain + contracts + - prevent blind signing by displaying decoded fields + +## Rollout Plan +- Stage A (Internal): team wallets only, capped at 1k handshakes/day. +- Stage B (Pilot): allowlist cohorts, capped sponsorship budget. +- Stage C (Public): open registration with dynamic rate limits. +- Rollback triggers: + - replay bypass observed + - subsidy drain anomaly + - chain/index mismatch > defined threshold + +## Operational Readiness Checklist +- Secrets in managed KMS; no plaintext private keys in env files. +- On-call alerting configured for: + - API error rate + - tx stuck pending + - indexer lag + - sponsorship spend spikes +- Dashboards: relayer SLO, chain confirmation times, failed signature ratios. +- Runbooks tested via game-day drills. + +## Definition of Done +- Contracts deployed to staging and production with verified source. +- Relayer and indexer passing CI, load tests, and security checks. +- Mobile flow validated on iOS/Android with target wallets. +- Documentation complete: API, incident response, rollback, and risk register. diff --git a/plans/04-web3-sbt-contacts/IMPLEMENTATION_PLAN.md b/docs/plans/04-web3-sbt-contacts/IMPLEMENTATION_PLAN.md similarity index 100% rename from plans/04-web3-sbt-contacts/IMPLEMENTATION_PLAN.md rename to docs/plans/04-web3-sbt-contacts/IMPLEMENTATION_PLAN.md diff --git a/docs/plans/04-web3-sbt-contacts/RISK_REGISTER.md b/docs/plans/04-web3-sbt-contacts/RISK_REGISTER.md new file mode 100644 index 0000000..bd51e03 --- /dev/null +++ b/docs/plans/04-web3-sbt-contacts/RISK_REGISTER.md @@ -0,0 +1,41 @@ +# Risk Register (Plan 04) + +## Scale +- Likelihood: Low / Medium / High +- Impact: Low / Medium / High / Critical +- Priority: P0 (highest) to P3 (lowest) + +## Active Risks + +| ID | Risk | Likelihood | Impact | Priority | Owner | Detection Signal | Mitigation | Contingency / Rollback Trigger | +|---|---|---|---|---|---|---|---|---| +| R-01 | Nonce replay bypass allows duplicate or forged connections | Medium | Critical | P0 | Smart Contract Lead | Repeat nonce seen in logs or chain events | Dual enforcement: off-chain nonce state + on-chain `nonceUsed`; short TTL; strict typed-data match | Immediate relayer pause if replay confirmed; rotate nonce namespace and patch contracts/relayer | +| R-02 | Signature validation mismatch across wallets (EIP-712 incompatibility) | Medium | High | P0 | Mobile Lead | Elevated `SIGNATURE_INVALID` by wallet type/version | Canonical typed-data generator; wallet compatibility matrix; preflight signer checks | Disable affected wallet versions via feature flag; fallback supported wallets only | +| R-03 | Relayer key compromise drains gas sponsorship | Low | Critical | P0 | Security/SRE | Unusual tx volume/spend; unknown destination patterns | KMS/HSM signer, no raw private key, strict IAM, spend caps, anomaly alerts | Revoke signer immediately, rotate key, disable sponsorship until postmortem complete | +| R-04 | Chain congestion causes long pending tx and poor UX | High | High | P1 | Backend Lead | `pending > threshold`, confirmation SLA breach | Dynamic fee strategy, replacement tx policy, multi-RPC routing | Shift to degraded mode with explicit pending notices; temporarily throttle new submissions | +| R-05 | Indexer reorg handling bug leads to incorrect connection history | Medium | High | P1 | Data/Indexer Lead | Divergence between chain and DB projections | Confirmations threshold, checkpoint rollback, idempotent replay by block range | Freeze query endpoints to last known consistent checkpoint and run backfill repair | +| R-06 | Sybil/spam wallets abuse free relay service | High | High | P1 | Abuse Prevention Owner | Rate-limit hits and subsidy spend spike | Per-IP/per-wallet rate limits, allowlist stage, anomaly scoring | Tighten limits, require API key/challenge, suspend sponsorship for offenders | +| R-07 | CID metadata contains sensitive data leakage | Medium | High | P1 | Product Security | Security review finds PII in sample metadata | Enforce schema validation, client-side warnings, encrypted payload pointers | Block updates with policy violations; purge indexed metadata cache | +| R-08 | Smart contract logic bug in soulbound constraints | Low | Critical | P0 | Smart Contract Lead | Audit findings, failing invariants | Internal + external audits, invariant tests, formal checks on transfer lock properties | Halt mint path with pause role; deploy patched version and migrate | +| R-09 | API abuse leads to relayer outage (DoS) | Medium | High | P1 | SRE Lead | Elevated 5xx, CPU saturation, queue growth | WAF, global concurrency limits, circuit breakers, autoscaling | Enable emergency strict limits and queue backpressure mode | +| R-10 | Dependency/RPC provider outage reduces availability | Medium | Medium | P2 | Platform Lead | Provider error rate > threshold | Multi-provider failover, health checks, timeout budgets | Route to backup provider set; if full outage, fail closed with clear status | +| R-11 | Regulatory/privacy concerns for storing encounter-derived hashes | Medium | High | P1 | Compliance Owner | Legal review flags data classification issue | Store only blinded hashes; no raw location/time; retention policy | Disable offending fields via schema version bump; update policy and re-consent | +| R-12 | Inadequate incident response delays containment | Medium | High | P1 | Engineering Manager | Slow MTTR in drills or incidents | On-call rotations, runbooks, game-day drills, clear severity matrix | Freeze rollout progression until runbook gaps are closed | + +## Rollout Risk Controls +- Stage-gate progression is blocked unless prior stage KPIs and risk actions are complete. +- Mandatory Go/No-Go review at each gate (1% -> 10% -> 50% -> 100%). +- Error-budget policy: + - rollback if handshake success < 98% for 30 minutes + - rollback if replay/security anomaly confirmed + - rollback if sponsorship spend exceeds daily cap by >20% + +## Residual Risks (Accepted for Phase 1) +- No cross-chain portability. +- Limited privacy model (hash blinding only, no zk proofs). +- Wallet ecosystem variability may still produce edge-case signature UX failures. + +## Review Cadence +- Weekly risk review during build phase. +- Daily risk check during rollout week. +- Post-incident review within 48 hours for Sev-1/Sev-2 events. diff --git a/docs/plans/04-web3-sbt-contacts/TEST_STRATEGY.md b/docs/plans/04-web3-sbt-contacts/TEST_STRATEGY.md new file mode 100644 index 0000000..b19c12b --- /dev/null +++ b/docs/plans/04-web3-sbt-contacts/TEST_STRATEGY.md @@ -0,0 +1,130 @@ +# Test Strategy (Plan 04) + +## Objectives +- prove correctness of soulbound profile and handshake recording +- prevent replay/signature abuse +- validate relayer reliability under realistic load +- enforce rollout gates with measurable pass/fail criteria + +## Test Pyramid +- Unit tests: contract logic, signature parsing, nonce store +- Integration tests: relayer + test chain + DB +- End-to-end tests: mobile signing flow through confirmation +- Non-functional tests: load, reorg resilience, fault injection, security checks + +## 1. Contract Test Plan (Foundry) + +## 1.1 SBTProfile +- mint success with valid CID +- mint rejects second profile for same owner +- transfer/approve methods revert (soulbound enforcement) +- `locked(tokenId)` returns true +- update CID allowed only for owner/authorized role + +## 1.2 ConnectionGraph +- record succeeds with valid dual signatures and active SBTs +- reject when signatures mismatch signer +- reject when deadline expired +- reject self-connection +- reject duplicate pair+encounter hash +- reject nonce replay +- emit event fields exactly as specified + +## 1.3 Property/Fuzz Tests +- fuzz address ordering and duplicate-key generation +- fuzz nonce uniqueness and consumed-state transitions +- fuzz deadline boundary (`now-1`, `now`, `now+1`) + +## 1.4 Coverage and Quality Gates +- branch coverage >= 90% +- zero high-severity static-analysis issues (Slither/Mythril equivalent) +- gas snapshots checked into CI for regression alerts + +## 2. Relayer/API Test Plan (Go) + +## 2.1 Unit Tests +- typed-data canonicalization and hash stability +- signature recovery and normalization +- nonce store transitions: `issued -> consumed|expired` +- idempotency key semantics +- error mapping to API status codes + +## 2.2 Integration Tests +- `prepare` then `submit` happy path produces tx hash +- duplicate `submit` with same idempotency key is safe/reused +- expired handshake rejected +- chain RPC timeout triggers retry policy +- tx revert path captured and surfaced in `GET /tx/:hash` + +## 2.3 Database/Indexer Tests +- event ingest and projection consistency +- dedupe by `(tx_hash, log_index)` +- reorg simulation rollback + replay +- cursor pagination deterministic ordering + +## 3. End-to-End Mobile Flow +- wallet connection and chain mismatch handling +- dual sign flow (initiator/responder) +- handshake submit and pending UX state +- confirmation polling and final success rendering +- recoverable failure UX (expired nonce, rate limit, revert) + +## 4. Security Test Plan +- replay attack attempts (re-submit same nonce/signatures) +- typed-data tampering between prepare and submit +- malicious domain substitution attempts +- flood/spam tests for rate limiting by IP/wallet +- abuse test for sponsorship budget exhaustion +- secret scanning and dependency vulnerability checks in CI + +## 5. Performance and Reliability + +## 5.1 Load Targets +- `POST /handshake/prepare`: 200 rps sustained, p95 < 300ms +- `POST /handshake/submit`: 100 rps sustained, p95 < 300ms (without chain confirmation) +- indexer lag average < 2 blocks + +## 5.2 Soak Test +- 24-hour continuous synthetic handshakes +- randomized signer pairs and nonce churn +- success rate >= 99.5% relay submission + +## 5.3 Fault Injection +- RPC provider outage failover +- DB failover and reconnect recovery +- delayed confirmations and replacement transaction flow + +## 6. Environments and Data +- Local: Anvil/Hardhat + ephemeral Postgres/Redis +- CI: deterministic seeded tests + coverage gates +- Staging: public testnet + production-like infra limits +- Production canary: allowlisted wallets only + +Test data requirements: +- deterministic wallets for fixtures +- synthetic encounter hashes only (no raw location payloads) +- redact PII from logs and test artifacts + +## 7. Release Gates +- Gate 1 (contracts): all unit/fuzz/security checks pass +- Gate 2 (relayer): integration + security replay suite pass +- Gate 3 (staging): 24h soak + KPI thresholds pass +- Gate 4 (production): canary error budget not exceeded for 72h + +## 8. CI/CD Execution +- On every PR: + - Solidity lint, unit, fuzz, gas snapshot diff + - Go lint, unit, race detector, integration (mocked RPC) +- On merge to main: + - full integration with testnet + - security scans and dependency audits +- Nightly: + - reorg/fault-injection suite + - staged load benchmark trend report + +## 9. Exit Criteria +Plan 04 is test-complete when: +- all release gates pass +- no open critical/high security findings +- performance targets are met in staging +- runbooks validated during at least one incident simulation diff --git a/docs/plans/IMPLEMENTATION_DASHBOARD.md b/docs/plans/IMPLEMENTATION_DASHBOARD.md new file mode 100644 index 0000000..276f240 --- /dev/null +++ b/docs/plans/IMPLEMENTATION_DASHBOARD.md @@ -0,0 +1,147 @@ +# Implementation Dashboard + +Last updated: 2026-05-07 +Coordinator: Main agent +Mode: Parallel multi-agent implementation + +## Objective +Implement executable scaffolds for all 4 plans under `implementations/` with non-conflicting ownership. + +## Worker Ownership +- Worker A: `implementations/01-ultrasonic-data-transfer` +- Worker B: `implementations/02-nearby-connections` +- Worker C: `implementations/03-animated-qr-visual-handshake` +- Worker D: `implementations/04-web3-sbt-contacts` + +## Status +- Worker A: Completed (Rust core-dsp scaffold + tests) +- Worker B: Completed (Flutter/Dart + Go signaling scaffold) +- Worker C: Completed (Rust scaffold + tests) +- Worker D: Completed (Solidity + Go + infra scaffold) + +## Completion Criteria +- Each folder contains a coherent project skeleton. +- Core runtime stubs exist (Rust/Go/Solidity/Dart where applicable). +- Each implementation has a local README with setup instructions. + +## Verification Sweep (2026-05-07) +- `implementations/01-ultrasonic-data-transfer/core-dsp` + - `cargo check`: PASS + - `cargo test`: PASS (1 passed, 0 failed) +- `implementations/03-animated-qr-visual-handshake/fountain-core` + - `cargo check`: PASS + - `cargo test`: PASS (1 passed, 0 failed) +- `implementations/02-nearby-connections/nearby-card-drop/signaling-server` + - `go build ./...`: PASS +- `implementations/04-web3-sbt-contacts/backend-relayer` + - `go build ./...`: PASS + +## Continuation Batch (2026-05-07) +- Plan 01 (`core-dsp`): upgraded frame format with protocol version + checksum validation, improved demodulator rounding behavior. +- Plan 02 (`nearby-card-drop`): implemented guarded Dart state transitions in `nearby_state_machine.dart` (removed invalid switch fallthrough pattern). +- Plan 03 (`fountain-core`): added `transfer_id` to symbols and stricter decode validation (consistent transfer/total/sequence checks). +- Plan 04 (`backend-relayer`): replaced placeholder request flow with in-memory prepared-request tracking, nonce generation, input validation, expiry checks, and deterministic tx hash generation. + +### Verification +- `implementations/01-ultrasonic-data-transfer/core-dsp`: `cargo test` PASS +- `implementations/03-animated-qr-visual-handshake/fountain-core`: `cargo test` PASS +- `implementations/04-web3-sbt-contacts/backend-relayer`: `go build ./...` PASS + +## Completion Reality Check +- Fully production-complete for all 4 plans: **Not yet**. +- Current status: scaffolds + MVP core logic increments are complete; platform-specific native integrations, full protocol/security hardening, contract tests, and end-to-end cross-device QA are still pending. + +## Continuation Batch 2 (2026-05-07) +- Plan 01: added framing negative tests (checksum/version/length) and full-byte modulate-demodulate roundtrip test. +- Plan 02: added signaling server endpoint method guards + tests; expanded Dart state machine with connected/reset transitions and clearer context reset semantics. +- Plan 03: hardened decoder duplicate handling and added coverage for incomplete/mixed/out-of-order/duplicate cases. +- Plan 04: added backend-relayer API tests (happy path + error matrix) and contract test strategy doc under `contracts/test/README.md`. + +### Verification +- `implementations/01-ultrasonic-data-transfer/core-dsp`: `cargo test` PASS (5 passed) +- `implementations/03-animated-qr-visual-handshake/fountain-core`: `cargo test` PASS (6 passed) +- `implementations/02-nearby-connections/nearby-card-drop/signaling-server`: `go test ./...` PASS +- `implementations/04-web3-sbt-contacts/backend-relayer`: `go test ./...` PASS + +## Remaining To Reach Full Completion +- Plan 01: real DSP modulation/demodulation (FSK/FFT), UniFFI generation/integration validation on iOS/Android. +- Plan 02: actual Flutter app wiring and native Nearby SDK bridge implementation (Android/iOS code, not just contracts/docs). +- Plan 03: true fountain/LT coding implementation and QR frame generator/scanner runtime integration. +- Plan 04: executable Solidity tests, deployment scripts, real chain RPC relaying and signature verification. + +## Continuation Batch 3 (2026-05-07) +- Plan 01 (`core-dsp`): added binary payload APIs (`encode_payload_bytes` / `decode_payload_bytes`) and roundtrip binary test coverage. +- Plan 03 (`fountain-core`): introduced parity symbol model to recover one missing data chunk; decoder upgraded for parity-aware reconstruction. +- Plan 04 (`backend-relayer`): added transaction status tracking map and `GET /v1/tx/{hash}` endpoint with tests. + +### Verification +- `implementations/01-ultrasonic-data-transfer/core-dsp`: `cargo test` PASS (6 passed) +- `implementations/03-animated-qr-visual-handshake/fountain-core`: `cargo test` PASS (7 passed) +- `implementations/04-web3-sbt-contacts/backend-relayer`: `go test ./...` PASS + +### Notes +- Go test in sandbox requires writable cache path, executed with `GOCACHE=/tmp/go-build-cache`. + +## Continuation Batch 4 (2026-05-07) +- Plan 01 (`core-dsp`): moved from byte-to-sample mapping to bit-symbol modulation/demodulation using configurable samples-per-bit derived from `sample_rate_hz/symbol_rate_bps`. +- Plan 03 (`fountain-core`): added explicit `payload_len` metadata in symbols and decoder now truncates reconstructed payload by declared length (instead of trimming trailing zero bytes), preserving legitimate binary endings. +- Plan 04 (`backend-relayer`): transaction status now records operation and exposes it via `GET /v1/tx/{hash}`. + +### Verification +- `implementations/01-ultrasonic-data-transfer/core-dsp`: `cargo test` PASS (6 passed) +- `implementations/03-animated-qr-visual-handshake/fountain-core`: `cargo test` PASS (7 passed) +- `implementations/04-web3-sbt-contacts/backend-relayer`: `go test ./...` PASS + +## Continuation Batch 5 (2026-05-07) +- Plan 04 contracts: added executable Foundry test files and config: + - `contracts/foundry.toml` + - `contracts/test/SBTProfile.t.sol` + - `contracts/test/ConnectionGraph.t.sol` +- Plan 04 relayer runtime: made bind address configurable via `RELAYER_ADDR` (default `127.0.0.1:18080`). +- Plan 04 ops: added local E2E script `scripts/relayer_e2e.sh` that builds, starts, runs prepare/submit/status flow, and validates output. + +### Verification +- `implementations/04-web3-sbt-contacts/backend-relayer`: `go test ./...` PASS +- `implementations/04-web3-sbt-contacts/scripts/relayer_e2e.sh`: cannot complete in this sandbox due to listener restriction (`bind: operation not permitted`). +- `forge test`: not executed in this environment (`forge` not installed). + +## Continuation Batch 6 (2026-05-07) +- Repository hygiene: expanded `.gitignore` to exclude generated build artifacts for Rust/Go outputs across implementations. +- Plan 04 relayer: added replay/idempotency test ensuring `requestId` is single-use (`second submit` fails with not found/already submitted). + +### Verification +- `implementations/04-web3-sbt-contacts/backend-relayer`: `go test ./...` PASS + +## Continuation Batch 7 (2026-05-07) +- Plan 02 signaling server: upgraded from bare endpoint stubs to in-memory session signaling flow. + - `/signal/offer` now validates JSON and stores `sessionId` offer SDP. + - `/signal/answer` now validates JSON and requires existing offer for the same `sessionId`. +- Plan 02 tests: added end-to-end offer/answer happy path and answer-without-offer negative test. +- Plan 01 protocol tests: added decode invalid-frame and non-UTF8 payload rejection tests. + +### Verification +- `implementations/02-nearby-connections/nearby-card-drop/signaling-server`: `go test ./...` PASS +- `implementations/01-ultrasonic-data-transfer/core-dsp`: `cargo test` PASS (8 passed) + +## Continuation Batch 8 (2026-05-07) +- Plan 02 signaling server: added polling endpoint `GET /signal/session/{sessionId}` to inspect whether offer/answer are present and which peers provided them. +- Plan 02 tests: added session polling happy-path and error-path coverage. +- Plan 03 tests: added decoder validation for mixed `payload_len` metadata and `total=0` invalid symbols. + +### Verification +- `implementations/02-nearby-connections/nearby-card-drop/signaling-server`: `go test ./...` PASS +- `implementations/03-animated-qr-visual-handshake/fountain-core`: `cargo test` PASS (9 passed) + +## Continuation Batch 9 (2026-05-07) +- Plan 02 signaling server: added session lifecycle delete endpoint on existing route: + - `DELETE /signal/session/{sessionId}` removes session state. + - `GET/DELETE` allowlist now enforced on `/signal/session/*`. +- Plan 02 tests: added delete lifecycle tests (delete, post-delete fetch, second delete not-found). +- Plan 04 relayer: hardened input validation: + - `prepare` now restricts operations to allowlist (`connect`, `exchange`). + - `submit` now validates signature hex content (`0x` prefixed and valid hex). +- Plan 04 tests: added unsupported operation and invalid-hex signature cases. + +### Verification +- `implementations/02-nearby-connections/nearby-card-drop/signaling-server`: `go test ./...` PASS +- `implementations/04-web3-sbt-contacts/backend-relayer`: `go test ./...` PASS diff --git a/docs/plans/PROGRESS_TRACKER.md b/docs/plans/PROGRESS_TRACKER.md new file mode 100644 index 0000000..4ada1ed --- /dev/null +++ b/docs/plans/PROGRESS_TRACKER.md @@ -0,0 +1,52 @@ +# Multi-Agent Progress Tracker + +Last updated: 2026-05-07 +Coordinator: Main agent + +## Overall Status +- Scope: Expand all 4 plans in `docs/plans` into actionable execution packages. +- Execution mode: Parallel multi-agent delivery with non-overlapping ownership. +- Current state: Completed for all 4 plans. + +## Agent Assignment and Outcomes + +| Agent | Owned Folder | Status | Deliverables | +|---|---|---|---| +| Worker 1 | `01-ultrasonic-data-transfer` | Completed | `EXECUTION_BREAKDOWN.md`, `TECH_SPEC.md`, `TEST_STRATEGY.md`, `RISK_REGISTER.md` | +| Worker 2 | `02-nearby-connections` | Completed | `EXECUTION_BREAKDOWN.md`, `STATE_MACHINE_SPEC.md`, `TEST_STRATEGY.md`, `RISK_REGISTER.md` | +| Worker 3 | `03-animated-qr-visual-handshake` | Completed | `EXECUTION_BREAKDOWN.md`, `CODEC_SPEC.md`, `TEST_STRATEGY.md`, `RISK_REGISTER.md` | +| Worker 4 | `04-web3-sbt-contacts` | Completed | `EXECUTION_BREAKDOWN.md`, `CONTRACT_AND_REPLAYER_SPEC.md`, `TEST_STRATEGY.md`, `RISK_REGISTER.md` | + +## Folder-Level Completion Checklist + +### 01-ultrasonic-data-transfer +- [x] Baseline implementation plan exists +- [x] Execution breakdown added +- [x] Technical spec added +- [x] Test strategy added +- [x] Risk register added + +### 02-nearby-connections +- [x] Baseline implementation plan exists +- [x] Execution breakdown added +- [x] State machine spec added +- [x] Test strategy added +- [x] Risk register added + +### 03-animated-qr-visual-handshake +- [x] Baseline implementation plan exists +- [x] Execution breakdown added +- [x] Codec spec added +- [x] Test strategy added +- [x] Risk register added + +### 04-web3-sbt-contacts +- [x] Baseline implementation plan exists +- [x] Execution breakdown added +- [x] Contract/relayer spec added +- [x] Test strategy added +- [x] Risk register added + +## Notes +- All work was constrained to `docs/plans` folders per ownership to avoid edit conflicts. +- `README.md` was updated by the main agent to reflect the canonical `docs/plans` structure. diff --git a/implementations/01-ultrasonic-data-transfer/README.md b/implementations/01-ultrasonic-data-transfer/README.md new file mode 100644 index 0000000..79048b0 --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/README.md @@ -0,0 +1,69 @@ +# sonic-card-exchange (Plan 01 Scaffold) + +Starter repository scaffold for ultrasonic card exchange experiments. + +## Layout + +- `core-dsp/`: Rust DSP/protocol crate (framing, modulation, demodulation, protocol) +- `clients/ios/`: iOS integration notes for future UniFFI-generated bindings +- `clients/android/`: Android integration notes for future UniFFI-generated bindings +- `docs/`: QA and validation templates + +## Build + +```bash +cd core-dsp +cargo check +cargo test +``` + +## Run (current state) + +No runtime app is included yet. This scaffold focuses on a compilable DSP core crate and integration docs. + +## Current Modem Path (Plan 01) + +- `core-dsp` now uses a lightweight FSK-like bit modem: +- bit `0` maps to a tone near `18.0 kHz` +- bit `1` maps to a tone near `19.5 kHz` +- modulation emits a sine tone per bit-symbol at configured `sample_rate_hz / symbol_rate_bps` +- demodulation compares per-symbol energy at both tones and selects the stronger bin +- demodulation supports selectable detection method: + - correlator (original) + - Goertzel (DFT-window style single-bin detector) +- adaptive noise-floor thresholding is now included to stabilize ambiguous symbol decisions + +This keeps the existing Rust API signatures unchanged while replacing sign-level modulation/detection. + +## Known Limits + +- No preamble/sync word yet; decode assumes perfect symbol alignment. +- No forward error correction; corruption is observable as raw bit errors. +- No clock drift correction. +- Frequencies are fixed constants and not yet configurable by API. +- Carrier sensing, AGC, and channel estimation are not implemented. + +## Plan01 Status + +### Completed in repo + +1. FSK-like modulation/demodulation path in `core-dsp`. +2. Selectable demod method (`Correlator` and `Goertzel`) by config. +3. Basic adaptive threshold/noise-floor logic for ambiguous symbol handling. +4. UniFFI helper script: `core-dsp/scripts/generate-uniffi.sh`. +5. Cross-platform integration checklist: `docs/uniffi-integration-checklist.md`. + +### Still external / pending + +1. Preamble + sync detection for frame start recovery. +2. CRC/FEC and BER-oriented robustness metrics. +3. Configurable tone profiles and symbol timing guard options. +4. Full iOS/Android binary packaging and app-level audio pipeline wiring. +5. Device-lab validation for latency/BER across environments. + +## Next implementation milestones + +1. Add preamble plus sync detection to support frame start recovery. +2. Add CRC/FEC path and error-rate metrics in tests. +3. Add configurable tone profiles and symbol timing guard options. +4. Add waveform playback/capture harnesses in iOS and Android clients. diff --git a/implementations/01-ultrasonic-data-transfer/clients/android/README.md b/implementations/01-ultrasonic-data-transfer/clients/android/README.md new file mode 100644 index 0000000..e4b3641 --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/clients/android/README.md @@ -0,0 +1,19 @@ +# Android Integration Notes + +## Goal +Integrate `core-dsp` via UniFFI-generated Kotlin bindings for encode/decode flows. + +## In-repo helper path + +1. Run `core-dsp/scripts/generate-uniffi.sh kotlin` to generate Kotlin/JNI bindings. +2. Follow `docs/uniffi-integration-checklist.md` for ABI packaging/linking steps. +3. Package Rust library for Android ABIs (arm64-v8a, armeabi-v7a, x86_64). +4. Wire encode/decode API into microphone/speaker pipeline. + +## Expected API surface + +- `encodePayload(payload: String): ByteArray` +- `decodePayload(frame: ByteArray): String` + +## Status +Generation helper and checklist are committed. ABI packaging and app wiring are still pending. diff --git a/implementations/01-ultrasonic-data-transfer/clients/ios/README.md b/implementations/01-ultrasonic-data-transfer/clients/ios/README.md new file mode 100644 index 0000000..6394970 --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/clients/ios/README.md @@ -0,0 +1,19 @@ +# iOS Integration Notes + +## Goal +Integrate `core-dsp` via UniFFI-generated Swift bindings for encode/decode flows. + +## In-repo helper path + +1. Run `core-dsp/scripts/generate-uniffi.sh swift` to generate Swift bindings. +2. Follow `docs/uniffi-integration-checklist.md` for packaging/linking steps. +3. Package Rust static library or XCFramework for iOS consumption. +4. Wire encode/decode API into audio capture/playback pipeline. + +## Expected API surface + +- `encodePayload(payload: String) -> Data` +- `decodePayload(frame: Data) throws -> String` + +## Status +Generation helper and checklist are committed. Platform packaging and app wiring are still pending. diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/Cargo.lock b/implementations/01-ultrasonic-data-transfer/core-dsp/Cargo.lock new file mode 100644 index 0000000..04655bf --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "core-dsp" +version = "0.1.0" diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/Cargo.toml b/implementations/01-ultrasonic-data-transfer/core-dsp/Cargo.toml new file mode 100644 index 0000000..62e7f70 --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "core-dsp" +version = "0.1.0" +edition = "2021" +description = "Starter DSP core for sonic card exchange" +license = "MIT" + +[lib] +name = "core_dsp" +path = "src/lib.rs" + +[dependencies] + diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/build.rs b/implementations/01-ultrasonic-data-transfer/core-dsp/build.rs new file mode 100644 index 0000000..ac41af6 --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/build.rs @@ -0,0 +1,4 @@ +fn main() { + // Placeholder for future UniFFI scaffolding generation. + println!("cargo:rerun-if-changed=uniffi/uniffi.udl"); +} diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/scripts/generate-uniffi.sh b/implementations/01-ultrasonic-data-transfer/core-dsp/scripts/generate-uniffi.sh new file mode 100755 index 0000000..82527bd --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/scripts/generate-uniffi.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +CRATE_DIR="$ROOT_DIR" +UDL_FILE="$CRATE_DIR/uniffi/uniffi.udl" +OUT_DIR="${OUT_DIR:-$CRATE_DIR/uniffi/generated}" +LANG="${1:-all}" + +if ! command -v uniffi-bindgen >/dev/null 2>&1; then + echo "uniffi-bindgen is required. Install with: cargo install uniffi_bindgen_cli" >&2 + exit 1 +fi + +mkdir -p "$OUT_DIR" + +case "$LANG" in + all) + uniffi-bindgen generate "$UDL_FILE" --language swift --out-dir "$OUT_DIR/swift" + uniffi-bindgen generate "$UDL_FILE" --language kotlin --out-dir "$OUT_DIR/kotlin" + ;; + swift|kotlin) + uniffi-bindgen generate "$UDL_FILE" --language "$LANG" --out-dir "$OUT_DIR/$LANG" + ;; + *) + echo "Usage: $0 [all|swift|kotlin]" >&2 + exit 2 + ;; +esac + +echo "UniFFI bindings generated at: $OUT_DIR" diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/src/demodulator.rs b/implementations/01-ultrasonic-data-transfer/core-dsp/src/demodulator.rs new file mode 100644 index 0000000..095cbdd --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/src/demodulator.rs @@ -0,0 +1,181 @@ +use std::f32::consts::TAU; + +const BIT0_FREQ_HZ: f32 = 18_000.0; +const BIT1_FREQ_HZ: f32 = 19_500.0; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum DemodMethod { + Correlator, + Goertzel, +} + +#[derive(Debug, Clone)] +pub struct DemodulatorConfig { + pub sample_rate_hz: u32, + pub symbol_rate_bps: u32, + pub demod_method: DemodMethod, + pub adaptive_threshold_enabled: bool, + pub noise_floor_alpha: f32, + pub noise_floor_scale: f32, + pub min_energy_gap: f32, +} + +impl Default for DemodulatorConfig { + fn default() -> Self { + Self { + sample_rate_hz: 48_000, + symbol_rate_bps: 1_200, + demod_method: DemodMethod::Correlator, + adaptive_threshold_enabled: true, + noise_floor_alpha: 0.1, + noise_floor_scale: 2.0, + min_energy_gap: 1.0, + } + } +} + +pub fn demodulate_samples(samples: &[f32], config: &DemodulatorConfig) -> Vec { + let samples_per_bit = (config.sample_rate_hz / config.symbol_rate_bps.max(1)).max(1) as usize; + if samples_per_bit == 0 { + return Vec::new(); + } + + let sample_rate = config.sample_rate_hz.max(1) as f32; + let bit_count = samples.len() / samples_per_bit; + let mut bits = Vec::with_capacity(bit_count); + let mut noise_floor = 0.0_f32; + let mut last_bit = 0_u8; + for i in 0..bit_count { + let start = i * samples_per_bit; + let end = start + samples_per_bit; + let symbol = &samples[start..end]; + let energy_0 = tone_energy(symbol, sample_rate, BIT0_FREQ_HZ, config.demod_method); + let energy_1 = tone_energy(symbol, sample_rate, BIT1_FREQ_HZ, config.demod_method); + let bit = classify_symbol(energy_0, energy_1, config, &mut noise_floor, last_bit); + bits.push(bit); + last_bit = bit; + } + + let byte_count = bits.len() / 8; + let mut out = Vec::with_capacity(byte_count); + for i in 0..byte_count { + let mut byte = 0_u8; + for bit in 0..8 { + byte = (byte << 1) | bits[i * 8 + bit]; + } + out.push(byte); + } + out +} + +fn classify_symbol( + energy_0: f32, + energy_1: f32, + config: &DemodulatorConfig, + noise_floor: &mut f32, + last_bit: u8, +) -> u8 { + let (strong_energy, weak_energy, strong_bit) = if energy_1 >= energy_0 { + (energy_1, energy_0, 1_u8) + } else { + (energy_0, energy_1, 0_u8) + }; + + if !config.adaptive_threshold_enabled { + return strong_bit; + } + + let alpha = config.noise_floor_alpha.clamp(0.0, 1.0); + *noise_floor = (1.0 - alpha) * *noise_floor + alpha * weak_energy; + let required_gap = config.min_energy_gap.max(0.0) + config.noise_floor_scale.max(0.0) * *noise_floor; + let gap = strong_energy - weak_energy; + + if gap < required_gap { + last_bit + } else { + strong_bit + } +} + +fn tone_energy( + symbol_samples: &[f32], + sample_rate_hz: f32, + target_freq_hz: f32, + method: DemodMethod, +) -> f32 { + match method { + DemodMethod::Correlator => tone_energy_correlator(symbol_samples, sample_rate_hz, target_freq_hz), + DemodMethod::Goertzel => tone_energy_goertzel(symbol_samples, sample_rate_hz, target_freq_hz), + } +} + +fn tone_energy_correlator(symbol_samples: &[f32], sample_rate_hz: f32, target_freq_hz: f32) -> f32 { + let phase_step = TAU * target_freq_hz / sample_rate_hz; + let mut i_acc = 0.0_f32; + let mut q_acc = 0.0_f32; + + for (n, &s) in symbol_samples.iter().enumerate() { + let phase = phase_step * n as f32; + i_acc += s * phase.cos(); + q_acc -= s * phase.sin(); + } + i_acc * i_acc + q_acc * q_acc +} + +fn tone_energy_goertzel(symbol_samples: &[f32], sample_rate_hz: f32, target_freq_hz: f32) -> f32 { + let omega = TAU * target_freq_hz / sample_rate_hz; + let coeff = 2.0 * omega.cos(); + let mut s_prev = 0.0_f32; + let mut s_prev2 = 0.0_f32; + + for &x in symbol_samples { + let s = x + coeff * s_prev - s_prev2; + s_prev2 = s_prev; + s_prev = s; + } + + s_prev2 * s_prev2 + s_prev * s_prev - coeff * s_prev * s_prev2 +} + +#[cfg(test)] +mod tests { + use super::{classify_symbol, DemodMethod, DemodulatorConfig}; + + #[test] + fn adaptive_threshold_holds_last_bit_when_symbol_is_ambiguous() { + let cfg = DemodulatorConfig::default(); + let mut noise_floor = 10.0_f32; + let bit = classify_symbol(100.0, 104.0, &cfg, &mut noise_floor, 0); + assert_eq!(0, bit); + } + + #[test] + fn non_adaptive_threshold_keeps_stronger_bit() { + let cfg = DemodulatorConfig { + adaptive_threshold_enabled: false, + ..DemodulatorConfig::default() + }; + let mut noise_floor = 10.0_f32; + let bit = classify_symbol(100.0, 104.0, &cfg, &mut noise_floor, 0); + assert_eq!(1, bit); + } + + #[test] + fn goertzel_and_correlator_agree_on_clear_tone() { + let cfg = DemodulatorConfig::default(); + let symbol_len = (cfg.sample_rate_hz / cfg.symbol_rate_bps.max(1)).max(1) as usize; + let sample_rate = cfg.sample_rate_hz as f32; + let tone = 19_500.0_f32; + let mut symbol = Vec::with_capacity(symbol_len); + for n in 0..symbol_len { + let phase = std::f32::consts::TAU * tone * (n as f32 / sample_rate); + symbol.push(0.8 * phase.sin()); + } + + let e_corr = super::tone_energy(&symbol, sample_rate, tone, DemodMethod::Correlator); + let e_goertzel = super::tone_energy(&symbol, sample_rate, tone, DemodMethod::Goertzel); + assert!(e_corr > 0.0); + let rel_err = (e_corr - e_goertzel).abs() / e_corr; + assert!(rel_err < 0.05, "expected methods to be close, rel_err={rel_err}"); + } +} diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/src/framing.rs b/implementations/01-ultrasonic-data-transfer/core-dsp/src/framing.rs new file mode 100644 index 0000000..1db1331 --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/src/framing.rs @@ -0,0 +1,101 @@ +pub const PREAMBLE: [u8; 2] = [0xAA, 0x55]; +pub const PROTOCOL_VERSION: u8 = 1; + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum FramingError { + FrameTooShort, + InvalidPreamble, + InvalidVersion, + LengthMismatch, + ChecksumMismatch, +} + +pub fn frame_payload(payload: &[u8]) -> Vec { + let checksum = checksum32(payload); + let mut frame = Vec::with_capacity(2 + 1 + 2 + payload.len() + 4); + frame.extend_from_slice(&PREAMBLE); + frame.push(PROTOCOL_VERSION); + frame.extend_from_slice(&(payload.len() as u16).to_le_bytes()); + frame.extend_from_slice(payload); + frame.extend_from_slice(&checksum.to_le_bytes()); + frame +} + +pub fn deframe_payload(frame: &[u8]) -> Result, FramingError> { + if frame.len() < 9 { + return Err(FramingError::FrameTooShort); + } + + if frame[0..2] != PREAMBLE { + return Err(FramingError::InvalidPreamble); + } + + if frame[2] != PROTOCOL_VERSION { + return Err(FramingError::InvalidVersion); + } + + let declared_len = u16::from_le_bytes([frame[3], frame[4]]) as usize; + let actual_len = frame.len() - 9; + if declared_len != actual_len { + return Err(FramingError::LengthMismatch); + } + + let payload = &frame[5..(5 + declared_len)]; + let declared_checksum = u32::from_le_bytes([ + frame[5 + declared_len], + frame[6 + declared_len], + frame[7 + declared_len], + frame[8 + declared_len], + ]); + let actual_checksum = checksum32(payload); + if declared_checksum != actual_checksum { + return Err(FramingError::ChecksumMismatch); + } + + Ok(payload.to_vec()) +} + +fn checksum32(data: &[u8]) -> u32 { + let mut sum: u32 = 0; + for &b in data { + sum = sum.wrapping_add(b as u32); + } + sum +} + +#[cfg(test)] +mod tests { + use super::{deframe_payload, frame_payload, FramingError}; + + #[test] + fn rejects_checksum_mismatch() { + let payload = b"sonic"; + let mut frame = frame_payload(payload); + let last = frame.len() - 1; + frame[last] ^= 0x01; + + let err = deframe_payload(&frame).expect_err("checksum corruption should fail"); + assert_eq!(err, FramingError::ChecksumMismatch); + } + + #[test] + fn rejects_version_mismatch() { + let payload = b"sonic"; + let mut frame = frame_payload(payload); + frame[2] = frame[2].wrapping_add(1); + + let err = deframe_payload(&frame).expect_err("version mismatch should fail"); + assert_eq!(err, FramingError::InvalidVersion); + } + + #[test] + fn rejects_length_mismatch() { + let payload = b"sonic"; + let mut frame = frame_payload(payload); + // Declared length field starts at byte index 3 (LE u16). + frame[3] = frame[3].wrapping_add(1); + + let err = deframe_payload(&frame).expect_err("length mismatch should fail"); + assert_eq!(err, FramingError::LengthMismatch); + } +} diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/src/lib.rs b/implementations/01-ultrasonic-data-transfer/core-dsp/src/lib.rs new file mode 100644 index 0000000..0f1bd1a --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/src/lib.rs @@ -0,0 +1,90 @@ +pub mod demodulator; +pub mod framing; +pub mod modulator; +pub mod protocol; + +pub use demodulator::{demodulate_samples, DemodMethod, DemodulatorConfig}; +pub use modulator::{modulate_bytes, ModulatorConfig}; +pub use protocol::{ + decode_payload, decode_payload_bytes, encode_payload, encode_payload_bytes, ProtocolError, +}; + +#[cfg(test)] +mod tests { + use std::f32::consts::TAU; + + use super::{ + decode_payload, decode_payload_bytes, demodulate_samples, encode_payload, encode_payload_bytes, + modulate_bytes, DemodMethod, DemodulatorConfig, ModulatorConfig, + }; + + #[test] + fn round_trip_payload() { + let input = "hello-sonic"; + let frame = encode_payload(input).expect("encode should succeed"); + let output = decode_payload(&frame).expect("decode should succeed"); + assert_eq!(input, output); + } + + #[test] + fn round_trip_modulate_demodulate_bytes() { + let input: Vec = (0..=255).collect(); + let samples = modulate_bytes(&input, &ModulatorConfig::default()); + let output = demodulate_samples(&samples, &DemodulatorConfig::default()); + assert_eq!(input, output); + } + + #[test] + fn round_trip_binary_payload() { + let input: Vec = (0..=255).rev().collect(); + let frame = encode_payload_bytes(&input).expect("encode should succeed"); + let output = decode_payload_bytes(&frame).expect("decode should succeed"); + assert_eq!(input, output); + } + + #[test] + fn demodulate_tolerates_moderate_deterministic_noise() { + let input = b"fsk-noise-check"; + let mut samples = modulate_bytes(input, &ModulatorConfig::default()); + for (i, s) in samples.iter_mut().enumerate() { + let noise = ((i as u32).wrapping_mul(1_103_515_245).wrapping_add(12_345) % 1000) as f32 + / 1000.0; + *s += (noise - 0.5) * 0.35; + } + let output = demodulate_samples(&samples, &DemodulatorConfig::default()); + assert_eq!(input.to_vec(), output); + } + + #[test] + fn goertzel_demod_path_round_trip() { + let input = b"goertzel-demod-path"; + let samples = modulate_bytes(input, &ModulatorConfig::default()); + let cfg = DemodulatorConfig { + demod_method: DemodMethod::Goertzel, + ..DemodulatorConfig::default() + }; + let output = demodulate_samples(&samples, &cfg); + assert_eq!(input.to_vec(), output); + } + + #[test] + fn demodulate_exposes_bit_errors_under_heavy_corruption() { + let input: Vec = vec![0b1000_0000, 0b0101_0101, 0b1100_0011]; + let mut samples = modulate_bytes(&input, &ModulatorConfig::default()); + let cfg = ModulatorConfig::default(); + let samples_per_bit = (cfg.sample_rate_hz / cfg.symbol_rate_bps.max(1)).max(1) as usize; + let sample_rate = cfg.sample_rate_hz as f32; + let wrong_freq_hz = 18_000.0_f32; + + for n in 0..samples_per_bit { + let phase = TAU * wrong_freq_hz * (n as f32 / sample_rate); + samples[n] = 0.8 * phase.sin(); + } + let output = demodulate_samples(&samples, &DemodulatorConfig::default()); + assert_eq!(input.len(), output.len()); + assert!( + output != input, + "expected at least one decoded bit to differ after heavy corruption" + ); + } +} diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/src/modulator.rs b/implementations/01-ultrasonic-data-transfer/core-dsp/src/modulator.rs new file mode 100644 index 0000000..7cac86b --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/src/modulator.rs @@ -0,0 +1,47 @@ +use std::f32::consts::TAU; + +#[derive(Debug, Clone)] +pub struct ModulatorConfig { + pub sample_rate_hz: u32, + pub symbol_rate_bps: u32, +} + +impl Default for ModulatorConfig { + fn default() -> Self { + Self { + sample_rate_hz: 48_000, + symbol_rate_bps: 1_200, + } + } +} + +pub fn modulate_bytes(payload: &[u8], config: &ModulatorConfig) -> Vec { + modulate_bytes_with_config(payload, config) +} + +const BIT0_FREQ_HZ: f32 = 18_000.0; +const BIT1_FREQ_HZ: f32 = 19_500.0; +const TONE_AMPLITUDE: f32 = 0.8; + +fn modulate_bytes_with_config(payload: &[u8], config: &ModulatorConfig) -> Vec { + let samples_per_bit = (config.sample_rate_hz / config.symbol_rate_bps.max(1)).max(1) as usize; + let mut samples = Vec::with_capacity(payload.len() * 8 * samples_per_bit); + let sample_rate = config.sample_rate_hz.max(1) as f32; + let mut phase = 0.0_f32; + + for byte in payload { + for bit_idx in (0..8).rev() { + let bit = (byte >> bit_idx) & 1; + let freq_hz = if bit == 1 { BIT1_FREQ_HZ } else { BIT0_FREQ_HZ }; + let phase_step = TAU * (freq_hz / sample_rate); + for _ in 0..samples_per_bit { + samples.push(TONE_AMPLITUDE * phase.sin()); + phase += phase_step; + if phase >= TAU { + phase -= TAU; + } + } + } + } + samples +} diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/src/protocol.rs b/implementations/01-ultrasonic-data-transfer/core-dsp/src/protocol.rs new file mode 100644 index 0000000..140644c --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/src/protocol.rs @@ -0,0 +1,55 @@ +use crate::framing::{deframe_payload, frame_payload, FramingError}; + +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum ProtocolError { + InvalidFrame, + InvalidUtf8, + PayloadTooLarge, +} + +impl From for ProtocolError { + fn from(_: FramingError) -> Self { + ProtocolError::InvalidFrame + } +} + +const MAX_PAYLOAD_LEN: usize = u16::MAX as usize; + +pub fn encode_payload(payload: &str) -> Result, ProtocolError> { + let raw = payload.as_bytes(); + encode_payload_bytes(raw) +} + +pub fn decode_payload(frame: &[u8]) -> Result { + let raw = decode_payload_bytes(frame)?; + String::from_utf8(raw).map_err(|_| ProtocolError::InvalidUtf8) +} + +pub fn encode_payload_bytes(payload: &[u8]) -> Result, ProtocolError> { + if payload.len() > MAX_PAYLOAD_LEN { + return Err(ProtocolError::PayloadTooLarge); + } + Ok(frame_payload(payload)) +} + +pub fn decode_payload_bytes(frame: &[u8]) -> Result, ProtocolError> { + deframe_payload(frame).map_err(|_| ProtocolError::InvalidFrame) +} + +#[cfg(test)] +mod tests { + use super::{decode_payload, decode_payload_bytes, encode_payload_bytes, ProtocolError}; + + #[test] + fn decode_payload_bytes_rejects_invalid_frame() { + let err = decode_payload_bytes(&[0x00, 0x01, 0x02]).expect_err("should fail"); + assert_eq!(err, ProtocolError::InvalidFrame); + } + + #[test] + fn decode_payload_rejects_non_utf8_payload() { + let frame = encode_payload_bytes(&[0xff, 0xfe, 0xfd]).expect("encode should work"); + let err = decode_payload(&frame).expect_err("should fail utf8 decode"); + assert_eq!(err, ProtocolError::InvalidUtf8); + } +} diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/.rustc_info.json b/implementations/01-ultrasonic-data-transfer/core-dsp/target/.rustc_info.json new file mode 100644 index 0000000..5fceb8c --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/.rustc_info.json @@ -0,0 +1 @@ +{"rustc_fingerprint":18012616535324830850,"outputs":{"17747080675513052775":{"success":true,"status":"","code":0,"stdout":"rustc 1.92.0 (ded5c06cf 2025-12-08)\nbinary: rustc\ncommit-hash: ded5c06cf21d2b93bffd5d884aa6e96934ee4234\ncommit-date: 2025-12-08\nhost: aarch64-apple-darwin\nrelease: 1.92.0\nLLVM version: 21.1.3\n","stderr":""},"7971740275564407648":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n/Users/dennis_leedennis_lee/.rustup/toolchains/stable-aarch64-apple-darwin\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"aarch64\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_feature=\"aes\"\ntarget_feature=\"crc\"\ntarget_feature=\"dit\"\ntarget_feature=\"dotprod\"\ntarget_feature=\"dpb\"\ntarget_feature=\"dpb2\"\ntarget_feature=\"fcma\"\ntarget_feature=\"fhm\"\ntarget_feature=\"flagm\"\ntarget_feature=\"fp16\"\ntarget_feature=\"frintts\"\ntarget_feature=\"jsconv\"\ntarget_feature=\"lor\"\ntarget_feature=\"lse\"\ntarget_feature=\"neon\"\ntarget_feature=\"paca\"\ntarget_feature=\"pacg\"\ntarget_feature=\"pan\"\ntarget_feature=\"pmuv3\"\ntarget_feature=\"ras\"\ntarget_feature=\"rcpc\"\ntarget_feature=\"rcpc2\"\ntarget_feature=\"rdm\"\ntarget_feature=\"sb\"\ntarget_feature=\"sha2\"\ntarget_feature=\"sha3\"\ntarget_feature=\"ssbs\"\ntarget_feature=\"vh\"\ntarget_has_atomic=\"128\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"macos\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"apple\"\nunix\n","stderr":""}},"successes":{}} \ No newline at end of file diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/CACHEDIR.TAG b/implementations/01-ultrasonic-data-transfer/core-dsp/target/CACHEDIR.TAG new file mode 100644 index 0000000..20d7c31 --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/CACHEDIR.TAG @@ -0,0 +1,3 @@ +Signature: 8a477f597d28d172789f06886806bc55 +# This file is a cache directory tag created by cargo. +# For information about cache directory tags see https://bford.info/cachedir/ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.cargo-lock b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.cargo-lock new file mode 100644 index 0000000..e69de29 diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-2835bdb85f27607b/dep-test-lib-core_dsp b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-2835bdb85f27607b/dep-test-lib-core_dsp new file mode 100644 index 0000000..1df1f52 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-2835bdb85f27607b/dep-test-lib-core_dsp differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-2835bdb85f27607b/invoked.timestamp b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-2835bdb85f27607b/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-2835bdb85f27607b/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-2835bdb85f27607b/test-lib-core_dsp b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-2835bdb85f27607b/test-lib-core_dsp new file mode 100644 index 0000000..97b44f3 --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-2835bdb85f27607b/test-lib-core_dsp @@ -0,0 +1 @@ +cac2809046cf2ebd \ No newline at end of file diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-2835bdb85f27607b/test-lib-core_dsp.json b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-2835bdb85f27607b/test-lib-core_dsp.json new file mode 100644 index 0000000..110625c --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-2835bdb85f27607b/test-lib-core_dsp.json @@ -0,0 +1 @@ +{"rustc":18415816196306954164,"features":"[]","declared_features":"[]","target":6183736309566056864,"profile":15057526963834790232,"path":10763286916239946207,"deps":[[10702064520442292332,"build_script_build",false,12750694719217295476]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/core-dsp-2835bdb85f27607b/dep-test-lib-core_dsp","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0} \ No newline at end of file diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-39dfdf70bac54e8e/dep-lib-core_dsp b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-39dfdf70bac54e8e/dep-lib-core_dsp new file mode 100644 index 0000000..f302862 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-39dfdf70bac54e8e/dep-lib-core_dsp differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-39dfdf70bac54e8e/invoked.timestamp b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-39dfdf70bac54e8e/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-39dfdf70bac54e8e/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-39dfdf70bac54e8e/lib-core_dsp b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-39dfdf70bac54e8e/lib-core_dsp new file mode 100644 index 0000000..2782745 --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-39dfdf70bac54e8e/lib-core_dsp @@ -0,0 +1 @@ +f039a934f3afef90 \ No newline at end of file diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-39dfdf70bac54e8e/lib-core_dsp.json b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-39dfdf70bac54e8e/lib-core_dsp.json new file mode 100644 index 0000000..a6836d7 --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-39dfdf70bac54e8e/lib-core_dsp.json @@ -0,0 +1 @@ +{"rustc":18415816196306954164,"features":"[]","declared_features":"[]","target":6183736309566056864,"profile":2330448797067240312,"path":10763286916239946207,"deps":[[10702064520442292332,"build_script_build",false,12750694719217295476]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/core-dsp-39dfdf70bac54e8e/dep-lib-core_dsp","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0} \ No newline at end of file diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-44fc884b5236fb8c/run-build-script-build-script-build b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-44fc884b5236fb8c/run-build-script-build-script-build new file mode 100644 index 0000000..2079a5d --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-44fc884b5236fb8c/run-build-script-build-script-build @@ -0,0 +1 @@ +746065824a91f3b0 \ No newline at end of file diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-44fc884b5236fb8c/run-build-script-build-script-build.json b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-44fc884b5236fb8c/run-build-script-build-script-build.json new file mode 100644 index 0000000..da02624 --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-44fc884b5236fb8c/run-build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":18415816196306954164,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[10702064520442292332,"build_script_build",false,4257851035374609777]],"local":[{"RerunIfChanged":{"output":"debug/build/core-dsp-44fc884b5236fb8c/output","paths":["uniffi/uniffi.udl"]}}],"rustflags":[],"config":0,"compile_kind":0} \ No newline at end of file diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-9fcf9e12dd1f1f09/dep-lib-core_dsp b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-9fcf9e12dd1f1f09/dep-lib-core_dsp new file mode 100644 index 0000000..4cd86f1 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-9fcf9e12dd1f1f09/dep-lib-core_dsp differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-9fcf9e12dd1f1f09/invoked.timestamp b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-9fcf9e12dd1f1f09/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-9fcf9e12dd1f1f09/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-9fcf9e12dd1f1f09/lib-core_dsp b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-9fcf9e12dd1f1f09/lib-core_dsp new file mode 100644 index 0000000..42b6864 --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-9fcf9e12dd1f1f09/lib-core_dsp @@ -0,0 +1 @@ +6d0003017c99c802 \ No newline at end of file diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-9fcf9e12dd1f1f09/lib-core_dsp.json b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-9fcf9e12dd1f1f09/lib-core_dsp.json new file mode 100644 index 0000000..8c161e1 --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-9fcf9e12dd1f1f09/lib-core_dsp.json @@ -0,0 +1 @@ +{"rustc":18415816196306954164,"features":"[]","declared_features":"[]","target":6183736309566056864,"profile":6675295047989516842,"path":10763286916239946207,"deps":[[10702064520442292332,"build_script_build",false,12750694719217295476]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/core-dsp-9fcf9e12dd1f1f09/dep-lib-core_dsp","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0} \ No newline at end of file diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-f59bd7170fdcd326/build-script-build-script-build b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-f59bd7170fdcd326/build-script-build-script-build new file mode 100644 index 0000000..d2f559a --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-f59bd7170fdcd326/build-script-build-script-build @@ -0,0 +1 @@ +71650826f5ec163b \ No newline at end of file diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-f59bd7170fdcd326/build-script-build-script-build.json b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-f59bd7170fdcd326/build-script-build-script-build.json new file mode 100644 index 0000000..cd7580a --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-f59bd7170fdcd326/build-script-build-script-build.json @@ -0,0 +1 @@ +{"rustc":18415816196306954164,"features":"[]","declared_features":"[]","target":5408242616063297496,"profile":502103643719580362,"path":13767053534773805487,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/core-dsp-f59bd7170fdcd326/dep-build-script-build-script-build","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0} \ No newline at end of file diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-f59bd7170fdcd326/dep-build-script-build-script-build b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-f59bd7170fdcd326/dep-build-script-build-script-build new file mode 100644 index 0000000..b7bf9e2 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-f59bd7170fdcd326/dep-build-script-build-script-build differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-f59bd7170fdcd326/invoked.timestamp b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-f59bd7170fdcd326/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/.fingerprint/core-dsp-f59bd7170fdcd326/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-44fc884b5236fb8c/invoked.timestamp b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-44fc884b5236fb8c/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-44fc884b5236fb8c/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-44fc884b5236fb8c/output b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-44fc884b5236fb8c/output new file mode 100644 index 0000000..ca91746 --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-44fc884b5236fb8c/output @@ -0,0 +1 @@ +cargo:rerun-if-changed=uniffi/uniffi.udl diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-44fc884b5236fb8c/root-output b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-44fc884b5236fb8c/root-output new file mode 100644 index 0000000..788304a --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-44fc884b5236fb8c/root-output @@ -0,0 +1 @@ +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-44fc884b5236fb8c/out \ No newline at end of file diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-44fc884b5236fb8c/stderr b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-44fc884b5236fb8c/stderr new file mode 100644 index 0000000..e69de29 diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-f59bd7170fdcd326/build-script-build b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-f59bd7170fdcd326/build-script-build new file mode 100755 index 0000000..6af356a Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-f59bd7170fdcd326/build-script-build differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-f59bd7170fdcd326/build_script_build-f59bd7170fdcd326 b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-f59bd7170fdcd326/build_script_build-f59bd7170fdcd326 new file mode 100755 index 0000000..6af356a Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-f59bd7170fdcd326/build_script_build-f59bd7170fdcd326 differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-f59bd7170fdcd326/build_script_build-f59bd7170fdcd326.d b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-f59bd7170fdcd326/build_script_build-f59bd7170fdcd326.d new file mode 100644 index 0000000..952746d --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-f59bd7170fdcd326/build_script_build-f59bd7170fdcd326.d @@ -0,0 +1,5 @@ +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-f59bd7170fdcd326/build_script_build-f59bd7170fdcd326.d: build.rs + +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/build/core-dsp-f59bd7170fdcd326/build_script_build-f59bd7170fdcd326: build.rs + +build.rs: diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b new file mode 100755 index 0000000..74b1e07 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.0gq7ptpolv6lf1bbg1v1g4gom.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.0gq7ptpolv6lf1bbg1v1g4gom.0yjy3m8.rcgu.o new file mode 100644 index 0000000..00c7cfb Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.0gq7ptpolv6lf1bbg1v1g4gom.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.0gq7ptpolv6lf1bbg1v1g4gom.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.0gq7ptpolv6lf1bbg1v1g4gom.1w46fwa.rcgu.o new file mode 100644 index 0000000..00c7cfb Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.0gq7ptpolv6lf1bbg1v1g4gom.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.0qs3acoknmye16ub4p6w1gwn8.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.0qs3acoknmye16ub4p6w1gwn8.0yjy3m8.rcgu.o new file mode 100644 index 0000000..0f542cd Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.0qs3acoknmye16ub4p6w1gwn8.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.0qs3acoknmye16ub4p6w1gwn8.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.0qs3acoknmye16ub4p6w1gwn8.1w46fwa.rcgu.o new file mode 100644 index 0000000..0f542cd Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.0qs3acoknmye16ub4p6w1gwn8.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.0u22xcsr7yqn2cv2m2lp8exxa.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.0u22xcsr7yqn2cv2m2lp8exxa.0yjy3m8.rcgu.o new file mode 100644 index 0000000..6d7142d Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.0u22xcsr7yqn2cv2m2lp8exxa.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.0u22xcsr7yqn2cv2m2lp8exxa.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.0u22xcsr7yqn2cv2m2lp8exxa.1w46fwa.rcgu.o new file mode 100644 index 0000000..6908da1 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.0u22xcsr7yqn2cv2m2lp8exxa.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.1n9am1ojyaus532t1dlp437ff.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.1n9am1ojyaus532t1dlp437ff.0yjy3m8.rcgu.o new file mode 100644 index 0000000..77156be Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.1n9am1ojyaus532t1dlp437ff.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.1n9am1ojyaus532t1dlp437ff.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.1n9am1ojyaus532t1dlp437ff.1w46fwa.rcgu.o new file mode 100644 index 0000000..77156be Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.1n9am1ojyaus532t1dlp437ff.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.21j434wrzwemj3m53pzluxnfx.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.21j434wrzwemj3m53pzluxnfx.0yjy3m8.rcgu.o new file mode 100644 index 0000000..c096e37 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.21j434wrzwemj3m53pzluxnfx.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.21j434wrzwemj3m53pzluxnfx.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.21j434wrzwemj3m53pzluxnfx.1w46fwa.rcgu.o new file mode 100644 index 0000000..c096e37 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.21j434wrzwemj3m53pzluxnfx.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.2rrrt27ck3ms1ik48bd1rtnc4.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.2rrrt27ck3ms1ik48bd1rtnc4.0yjy3m8.rcgu.o new file mode 100644 index 0000000..f203223 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.2rrrt27ck3ms1ik48bd1rtnc4.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.2rrrt27ck3ms1ik48bd1rtnc4.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.2rrrt27ck3ms1ik48bd1rtnc4.1w46fwa.rcgu.o new file mode 100644 index 0000000..f203223 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.2rrrt27ck3ms1ik48bd1rtnc4.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.30ymfb4988e5ulrr0l7a0y4c5.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.30ymfb4988e5ulrr0l7a0y4c5.0yjy3m8.rcgu.o new file mode 100644 index 0000000..f755a30 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.30ymfb4988e5ulrr0l7a0y4c5.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.30ymfb4988e5ulrr0l7a0y4c5.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.30ymfb4988e5ulrr0l7a0y4c5.1w46fwa.rcgu.o new file mode 100644 index 0000000..f755a30 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.30ymfb4988e5ulrr0l7a0y4c5.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.3nbidl0nli1132vd97zy28wl6.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.3nbidl0nli1132vd97zy28wl6.0yjy3m8.rcgu.o new file mode 100644 index 0000000..d327eaa Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.3nbidl0nli1132vd97zy28wl6.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.3nbidl0nli1132vd97zy28wl6.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.3nbidl0nli1132vd97zy28wl6.1w46fwa.rcgu.o new file mode 100644 index 0000000..3abde6e Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.3nbidl0nli1132vd97zy28wl6.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.44rgqmfkkjczh4lnw502loxwq.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.44rgqmfkkjczh4lnw502loxwq.0yjy3m8.rcgu.o new file mode 100644 index 0000000..e4536a8 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.44rgqmfkkjczh4lnw502loxwq.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.44rgqmfkkjczh4lnw502loxwq.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.44rgqmfkkjczh4lnw502loxwq.1w46fwa.rcgu.o new file mode 100644 index 0000000..e4536a8 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.44rgqmfkkjczh4lnw502loxwq.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.4kverfp6idyrj0vcp16ng9t01.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.4kverfp6idyrj0vcp16ng9t01.0yjy3m8.rcgu.o new file mode 100644 index 0000000..d2b4c8c Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.4kverfp6idyrj0vcp16ng9t01.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.4kverfp6idyrj0vcp16ng9t01.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.4kverfp6idyrj0vcp16ng9t01.1w46fwa.rcgu.o new file mode 100644 index 0000000..d2b4c8c Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.4kverfp6idyrj0vcp16ng9t01.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.4onmfl3iq19ibiui9ym57la70.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.4onmfl3iq19ibiui9ym57la70.0yjy3m8.rcgu.o new file mode 100644 index 0000000..dca6c2d Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.4onmfl3iq19ibiui9ym57la70.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.4onmfl3iq19ibiui9ym57la70.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.4onmfl3iq19ibiui9ym57la70.1w46fwa.rcgu.o new file mode 100644 index 0000000..8eb35bc Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.4onmfl3iq19ibiui9ym57la70.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.658vgel3akitl4cntaumyykpw.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.658vgel3akitl4cntaumyykpw.0yjy3m8.rcgu.o new file mode 100644 index 0000000..91d8f4f Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.658vgel3akitl4cntaumyykpw.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.658vgel3akitl4cntaumyykpw.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.658vgel3akitl4cntaumyykpw.1w46fwa.rcgu.o new file mode 100644 index 0000000..91d8f4f Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.658vgel3akitl4cntaumyykpw.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.6b542dvh90p62waqxrnd3vzmj.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.6b542dvh90p62waqxrnd3vzmj.0yjy3m8.rcgu.o new file mode 100644 index 0000000..0065cfb Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.6b542dvh90p62waqxrnd3vzmj.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.6b542dvh90p62waqxrnd3vzmj.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.6b542dvh90p62waqxrnd3vzmj.1w46fwa.rcgu.o new file mode 100644 index 0000000..0065cfb Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.6b542dvh90p62waqxrnd3vzmj.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.77wlzeoe8obcv0lpqu0xg28ez.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.77wlzeoe8obcv0lpqu0xg28ez.0yjy3m8.rcgu.o new file mode 100644 index 0000000..7e91e28 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.77wlzeoe8obcv0lpqu0xg28ez.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.77wlzeoe8obcv0lpqu0xg28ez.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.77wlzeoe8obcv0lpqu0xg28ez.1w46fwa.rcgu.o new file mode 100644 index 0000000..7e91e28 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.77wlzeoe8obcv0lpqu0xg28ez.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.7y2n0gqz7mywj9i2bqqx3y049.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.7y2n0gqz7mywj9i2bqqx3y049.0yjy3m8.rcgu.o new file mode 100644 index 0000000..fd933f1 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.7y2n0gqz7mywj9i2bqqx3y049.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.7y2n0gqz7mywj9i2bqqx3y049.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.7y2n0gqz7mywj9i2bqqx3y049.1w46fwa.rcgu.o new file mode 100644 index 0000000..fd933f1 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.7y2n0gqz7mywj9i2bqqx3y049.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.8a225agqyopj16ca7cwqp5f9x.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.8a225agqyopj16ca7cwqp5f9x.0yjy3m8.rcgu.o new file mode 100644 index 0000000..5190a56 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.8a225agqyopj16ca7cwqp5f9x.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.91bxrtmvm7aiy9zh6i6cwmz6t.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.91bxrtmvm7aiy9zh6i6cwmz6t.0yjy3m8.rcgu.o new file mode 100644 index 0000000..a0e4b3d Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.91bxrtmvm7aiy9zh6i6cwmz6t.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.91bxrtmvm7aiy9zh6i6cwmz6t.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.91bxrtmvm7aiy9zh6i6cwmz6t.1w46fwa.rcgu.o new file mode 100644 index 0000000..a0e4b3d Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.91bxrtmvm7aiy9zh6i6cwmz6t.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.9m6pwoj6kr72feskgdtk87kry.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.9m6pwoj6kr72feskgdtk87kry.0yjy3m8.rcgu.o new file mode 100644 index 0000000..c81df4e Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.9m6pwoj6kr72feskgdtk87kry.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.9m6pwoj6kr72feskgdtk87kry.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.9m6pwoj6kr72feskgdtk87kry.1w46fwa.rcgu.o new file mode 100644 index 0000000..c81df4e Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.9m6pwoj6kr72feskgdtk87kry.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.agj6j5ozzm8zm8zaosxb8vdme.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.agj6j5ozzm8zm8zaosxb8vdme.0yjy3m8.rcgu.o new file mode 100644 index 0000000..25c10b3 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.agj6j5ozzm8zm8zaosxb8vdme.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.agj6j5ozzm8zm8zaosxb8vdme.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.agj6j5ozzm8zm8zaosxb8vdme.1w46fwa.rcgu.o new file mode 100644 index 0000000..25c10b3 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.agj6j5ozzm8zm8zaosxb8vdme.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ahmikqjx35ms29ekfviosg7gf.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ahmikqjx35ms29ekfviosg7gf.0yjy3m8.rcgu.o new file mode 100644 index 0000000..b947252 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ahmikqjx35ms29ekfviosg7gf.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ahmikqjx35ms29ekfviosg7gf.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ahmikqjx35ms29ekfviosg7gf.1w46fwa.rcgu.o new file mode 100644 index 0000000..b947252 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ahmikqjx35ms29ekfviosg7gf.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.alv7uyv63l712pla9zxyfbc43.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.alv7uyv63l712pla9zxyfbc43.0yjy3m8.rcgu.o new file mode 100644 index 0000000..1e8f861 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.alv7uyv63l712pla9zxyfbc43.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.alv7uyv63l712pla9zxyfbc43.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.alv7uyv63l712pla9zxyfbc43.1w46fwa.rcgu.o new file mode 100644 index 0000000..1e8f861 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.alv7uyv63l712pla9zxyfbc43.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ar7fxybnia30ih5y55gbpesdk.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ar7fxybnia30ih5y55gbpesdk.0yjy3m8.rcgu.o new file mode 100644 index 0000000..f6fc84a Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ar7fxybnia30ih5y55gbpesdk.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ar7fxybnia30ih5y55gbpesdk.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ar7fxybnia30ih5y55gbpesdk.1w46fwa.rcgu.o new file mode 100644 index 0000000..f6fc84a Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ar7fxybnia30ih5y55gbpesdk.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ax9mlgu57iqor5k7e48jq8w6q.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ax9mlgu57iqor5k7e48jq8w6q.0yjy3m8.rcgu.o new file mode 100644 index 0000000..e8597be Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ax9mlgu57iqor5k7e48jq8w6q.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ax9mlgu57iqor5k7e48jq8w6q.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ax9mlgu57iqor5k7e48jq8w6q.1w46fwa.rcgu.o new file mode 100644 index 0000000..e8597be Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ax9mlgu57iqor5k7e48jq8w6q.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.b4m27as3unl15x2jt9disckzd.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.b4m27as3unl15x2jt9disckzd.0yjy3m8.rcgu.o new file mode 100644 index 0000000..8a4e15e Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.b4m27as3unl15x2jt9disckzd.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.b4m27as3unl15x2jt9disckzd.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.b4m27as3unl15x2jt9disckzd.1w46fwa.rcgu.o new file mode 100644 index 0000000..3e0b96d Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.b4m27as3unl15x2jt9disckzd.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.b5fswdf5gydndn83fdkrhge8a.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.b5fswdf5gydndn83fdkrhge8a.0yjy3m8.rcgu.o new file mode 100644 index 0000000..afed700 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.b5fswdf5gydndn83fdkrhge8a.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.b5fswdf5gydndn83fdkrhge8a.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.b5fswdf5gydndn83fdkrhge8a.1w46fwa.rcgu.o new file mode 100644 index 0000000..afed700 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.b5fswdf5gydndn83fdkrhge8a.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.cay2ov54zp77iio7zi7re83zo.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.cay2ov54zp77iio7zi7re83zo.0yjy3m8.rcgu.o new file mode 100644 index 0000000..ca0bac1 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.cay2ov54zp77iio7zi7re83zo.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.cay2ov54zp77iio7zi7re83zo.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.cay2ov54zp77iio7zi7re83zo.1w46fwa.rcgu.o new file mode 100644 index 0000000..ca0bac1 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.cay2ov54zp77iio7zi7re83zo.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.cd7pj8ochs299sv4h4yvzjwkx.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.cd7pj8ochs299sv4h4yvzjwkx.1w46fwa.rcgu.o new file mode 100644 index 0000000..2718fd9 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.cd7pj8ochs299sv4h4yvzjwkx.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.d b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.d new file mode 100644 index 0000000..5f01b93 --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.d @@ -0,0 +1,9 @@ +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.d: src/lib.rs src/demodulator.rs src/framing.rs src/modulator.rs src/protocol.rs + +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b: src/lib.rs src/demodulator.rs src/framing.rs src/modulator.rs src/protocol.rs + +src/lib.rs: +src/demodulator.rs: +src/framing.rs: +src/modulator.rs: +src/protocol.rs: diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.d5hwx826c8hti7watqy4m257f.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.d5hwx826c8hti7watqy4m257f.0yjy3m8.rcgu.o new file mode 100644 index 0000000..b570349 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.d5hwx826c8hti7watqy4m257f.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.d5hwx826c8hti7watqy4m257f.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.d5hwx826c8hti7watqy4m257f.1w46fwa.rcgu.o new file mode 100644 index 0000000..de6121a Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.d5hwx826c8hti7watqy4m257f.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.dski4y87gfk6bwzb1uxjfj904.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.dski4y87gfk6bwzb1uxjfj904.0yjy3m8.rcgu.o new file mode 100644 index 0000000..f4bb65f Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.dski4y87gfk6bwzb1uxjfj904.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.dski4y87gfk6bwzb1uxjfj904.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.dski4y87gfk6bwzb1uxjfj904.1w46fwa.rcgu.o new file mode 100644 index 0000000..f4bb65f Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.dski4y87gfk6bwzb1uxjfj904.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.dyu4u4uybbn3ibv30mfgsl6eb.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.dyu4u4uybbn3ibv30mfgsl6eb.0yjy3m8.rcgu.o new file mode 100644 index 0000000..49653a4 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.dyu4u4uybbn3ibv30mfgsl6eb.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.dyu4u4uybbn3ibv30mfgsl6eb.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.dyu4u4uybbn3ibv30mfgsl6eb.1w46fwa.rcgu.o new file mode 100644 index 0000000..49653a4 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.dyu4u4uybbn3ibv30mfgsl6eb.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ea2kb9i44rrz2iwwbklxpmo5t.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ea2kb9i44rrz2iwwbklxpmo5t.0yjy3m8.rcgu.o new file mode 100644 index 0000000..4fd933f Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ea2kb9i44rrz2iwwbklxpmo5t.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ea2kb9i44rrz2iwwbklxpmo5t.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ea2kb9i44rrz2iwwbklxpmo5t.1w46fwa.rcgu.o new file mode 100644 index 0000000..4fd933f Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.ea2kb9i44rrz2iwwbklxpmo5t.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.f0yrbhzd9f80q0mgltgdiuvek.0yjy3m8.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.f0yrbhzd9f80q0mgltgdiuvek.0yjy3m8.rcgu.o new file mode 100644 index 0000000..bac7627 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.f0yrbhzd9f80q0mgltgdiuvek.0yjy3m8.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.f0yrbhzd9f80q0mgltgdiuvek.1w46fwa.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.f0yrbhzd9f80q0mgltgdiuvek.1w46fwa.rcgu.o new file mode 100644 index 0000000..bac7627 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-2835bdb85f27607b.f0yrbhzd9f80q0mgltgdiuvek.1w46fwa.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-39dfdf70bac54e8e.d b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-39dfdf70bac54e8e.d new file mode 100644 index 0000000..c78a93c --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-39dfdf70bac54e8e.d @@ -0,0 +1,9 @@ +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-39dfdf70bac54e8e.d: src/lib.rs src/demodulator.rs src/framing.rs src/modulator.rs src/protocol.rs + +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/libcore_dsp-39dfdf70bac54e8e.rmeta: src/lib.rs src/demodulator.rs src/framing.rs src/modulator.rs src/protocol.rs + +src/lib.rs: +src/demodulator.rs: +src/framing.rs: +src/modulator.rs: +src/protocol.rs: diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.0dww3sv4fwiom4yeajn05ezf2.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.0dww3sv4fwiom4yeajn05ezf2.08zferj.rcgu.o new file mode 100644 index 0000000..a7777c0 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.0dww3sv4fwiom4yeajn05ezf2.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.0dww3sv4fwiom4yeajn05ezf2.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.0dww3sv4fwiom4yeajn05ezf2.0k89hkf.rcgu.o new file mode 100644 index 0000000..a7777c0 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.0dww3sv4fwiom4yeajn05ezf2.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.0r8aniv9z7s61nasxmmw6vjj3.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.0r8aniv9z7s61nasxmmw6vjj3.08zferj.rcgu.o new file mode 100644 index 0000000..889e6ce Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.0r8aniv9z7s61nasxmmw6vjj3.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.0r8aniv9z7s61nasxmmw6vjj3.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.0r8aniv9z7s61nasxmmw6vjj3.0k89hkf.rcgu.o new file mode 100644 index 0000000..889e6ce Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.0r8aniv9z7s61nasxmmw6vjj3.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.0uzlslaen204axhmq3zl91pul.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.0uzlslaen204axhmq3zl91pul.08zferj.rcgu.o new file mode 100644 index 0000000..d3ebd19 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.0uzlslaen204axhmq3zl91pul.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.0uzlslaen204axhmq3zl91pul.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.0uzlslaen204axhmq3zl91pul.0k89hkf.rcgu.o new file mode 100644 index 0000000..d3ebd19 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.0uzlslaen204axhmq3zl91pul.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.1tn1haxfgmt3ceqb9j8f50hdz.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.1tn1haxfgmt3ceqb9j8f50hdz.08zferj.rcgu.o new file mode 100644 index 0000000..0452b14 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.1tn1haxfgmt3ceqb9j8f50hdz.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.1tn1haxfgmt3ceqb9j8f50hdz.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.1tn1haxfgmt3ceqb9j8f50hdz.0k89hkf.rcgu.o new file mode 100644 index 0000000..f07abe1 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.1tn1haxfgmt3ceqb9j8f50hdz.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.1xke7amnmlbc4y4pwuw42s4tc.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.1xke7amnmlbc4y4pwuw42s4tc.08zferj.rcgu.o new file mode 100644 index 0000000..bc34b5b Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.1xke7amnmlbc4y4pwuw42s4tc.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.1xke7amnmlbc4y4pwuw42s4tc.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.1xke7amnmlbc4y4pwuw42s4tc.0k89hkf.rcgu.o new file mode 100644 index 0000000..bc34b5b Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.1xke7amnmlbc4y4pwuw42s4tc.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.2jfuqwar0e9ir20mfrhy2qdzt.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.2jfuqwar0e9ir20mfrhy2qdzt.08zferj.rcgu.o new file mode 100644 index 0000000..4247d4d Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.2jfuqwar0e9ir20mfrhy2qdzt.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.343is6r2usvtxjom0ivsvmhue.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.343is6r2usvtxjom0ivsvmhue.08zferj.rcgu.o new file mode 100644 index 0000000..61cd99a Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.343is6r2usvtxjom0ivsvmhue.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.343is6r2usvtxjom0ivsvmhue.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.343is6r2usvtxjom0ivsvmhue.0k89hkf.rcgu.o new file mode 100644 index 0000000..61cd99a Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.343is6r2usvtxjom0ivsvmhue.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.3bh4o7n5nisro4gucj7v5joen.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.3bh4o7n5nisro4gucj7v5joen.08zferj.rcgu.o new file mode 100644 index 0000000..a4688a8 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.3bh4o7n5nisro4gucj7v5joen.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.3bh4o7n5nisro4gucj7v5joen.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.3bh4o7n5nisro4gucj7v5joen.0k89hkf.rcgu.o new file mode 100644 index 0000000..a4688a8 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.3bh4o7n5nisro4gucj7v5joen.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.3f7aydsty9pn2dbg4ckfl29hg.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.3f7aydsty9pn2dbg4ckfl29hg.08zferj.rcgu.o new file mode 100644 index 0000000..04800e8 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.3f7aydsty9pn2dbg4ckfl29hg.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.3f7aydsty9pn2dbg4ckfl29hg.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.3f7aydsty9pn2dbg4ckfl29hg.0k89hkf.rcgu.o new file mode 100644 index 0000000..04800e8 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.3f7aydsty9pn2dbg4ckfl29hg.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.3rdw9lav4b5qdl13rv9sf7ma9.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.3rdw9lav4b5qdl13rv9sf7ma9.08zferj.rcgu.o new file mode 100644 index 0000000..4ab9021 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.3rdw9lav4b5qdl13rv9sf7ma9.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.3rdw9lav4b5qdl13rv9sf7ma9.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.3rdw9lav4b5qdl13rv9sf7ma9.0k89hkf.rcgu.o new file mode 100644 index 0000000..4ab9021 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.3rdw9lav4b5qdl13rv9sf7ma9.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.46pia9hb4lxo5mhz8kr0iicyt.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.46pia9hb4lxo5mhz8kr0iicyt.08zferj.rcgu.o new file mode 100644 index 0000000..287d76b Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.46pia9hb4lxo5mhz8kr0iicyt.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.46pia9hb4lxo5mhz8kr0iicyt.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.46pia9hb4lxo5mhz8kr0iicyt.0k89hkf.rcgu.o new file mode 100644 index 0000000..287d76b Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.46pia9hb4lxo5mhz8kr0iicyt.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.4hc87umo3yw6h0j37dbn3il9s.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.4hc87umo3yw6h0j37dbn3il9s.08zferj.rcgu.o new file mode 100644 index 0000000..268612d Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.4hc87umo3yw6h0j37dbn3il9s.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.4hc87umo3yw6h0j37dbn3il9s.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.4hc87umo3yw6h0j37dbn3il9s.0k89hkf.rcgu.o new file mode 100644 index 0000000..268612d Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.4hc87umo3yw6h0j37dbn3il9s.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.4jed3uyzphlltk8jkj10e2izi.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.4jed3uyzphlltk8jkj10e2izi.08zferj.rcgu.o new file mode 100644 index 0000000..1b7b031 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.4jed3uyzphlltk8jkj10e2izi.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.4jed3uyzphlltk8jkj10e2izi.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.4jed3uyzphlltk8jkj10e2izi.0k89hkf.rcgu.o new file mode 100644 index 0000000..1b7b031 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.4jed3uyzphlltk8jkj10e2izi.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.4t1jvgndvonla1zl65qxurvne.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.4t1jvgndvonla1zl65qxurvne.08zferj.rcgu.o new file mode 100644 index 0000000..cdfeea2 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.4t1jvgndvonla1zl65qxurvne.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.4t1jvgndvonla1zl65qxurvne.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.4t1jvgndvonla1zl65qxurvne.0k89hkf.rcgu.o new file mode 100644 index 0000000..441b102 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.4t1jvgndvonla1zl65qxurvne.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5al476e401ej0b68rpu0sdz0p.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5al476e401ej0b68rpu0sdz0p.08zferj.rcgu.o new file mode 100644 index 0000000..2a4e341 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5al476e401ej0b68rpu0sdz0p.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5al476e401ej0b68rpu0sdz0p.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5al476e401ej0b68rpu0sdz0p.0k89hkf.rcgu.o new file mode 100644 index 0000000..2a4e341 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5al476e401ej0b68rpu0sdz0p.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5nku12k30m61nmzen7548dte7.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5nku12k30m61nmzen7548dte7.0k89hkf.rcgu.o new file mode 100644 index 0000000..0aa24da Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5nku12k30m61nmzen7548dte7.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5o1widi930ld2bvndscaqz6zm.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5o1widi930ld2bvndscaqz6zm.08zferj.rcgu.o new file mode 100644 index 0000000..71adbe4 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5o1widi930ld2bvndscaqz6zm.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5o1widi930ld2bvndscaqz6zm.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5o1widi930ld2bvndscaqz6zm.0k89hkf.rcgu.o new file mode 100644 index 0000000..71adbe4 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5o1widi930ld2bvndscaqz6zm.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5pzynaqegwjzmamgaeauh2pkq.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5pzynaqegwjzmamgaeauh2pkq.08zferj.rcgu.o new file mode 100644 index 0000000..ea1769a Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5pzynaqegwjzmamgaeauh2pkq.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5pzynaqegwjzmamgaeauh2pkq.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5pzynaqegwjzmamgaeauh2pkq.0k89hkf.rcgu.o new file mode 100644 index 0000000..ea1769a Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5pzynaqegwjzmamgaeauh2pkq.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5vu9ls5jazr3l4ol0ze9lekma.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5vu9ls5jazr3l4ol0ze9lekma.08zferj.rcgu.o new file mode 100644 index 0000000..2f22662 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5vu9ls5jazr3l4ol0ze9lekma.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5vu9ls5jazr3l4ol0ze9lekma.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5vu9ls5jazr3l4ol0ze9lekma.0k89hkf.rcgu.o new file mode 100644 index 0000000..398d91a Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.5vu9ls5jazr3l4ol0ze9lekma.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.6m5196zd8ze25us8ah0m332j2.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.6m5196zd8ze25us8ah0m332j2.08zferj.rcgu.o new file mode 100644 index 0000000..a8aa227 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.6m5196zd8ze25us8ah0m332j2.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.6m5196zd8ze25us8ah0m332j2.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.6m5196zd8ze25us8ah0m332j2.0k89hkf.rcgu.o new file mode 100644 index 0000000..a8aa227 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.6m5196zd8ze25us8ah0m332j2.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.7kamcw7aoiom7k9vak03e6ebr.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.7kamcw7aoiom7k9vak03e6ebr.08zferj.rcgu.o new file mode 100644 index 0000000..98c6168 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.7kamcw7aoiom7k9vak03e6ebr.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.7kamcw7aoiom7k9vak03e6ebr.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.7kamcw7aoiom7k9vak03e6ebr.0k89hkf.rcgu.o new file mode 100644 index 0000000..e74c666 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.7kamcw7aoiom7k9vak03e6ebr.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.9yyjudg8fuw4zbsjku5o4jvpd.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.9yyjudg8fuw4zbsjku5o4jvpd.08zferj.rcgu.o new file mode 100644 index 0000000..3879a19 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.9yyjudg8fuw4zbsjku5o4jvpd.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.9yyjudg8fuw4zbsjku5o4jvpd.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.9yyjudg8fuw4zbsjku5o4jvpd.0k89hkf.rcgu.o new file mode 100644 index 0000000..3879a19 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.9yyjudg8fuw4zbsjku5o4jvpd.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.abkbcg8msy2fl003c3ybi1pa5.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.abkbcg8msy2fl003c3ybi1pa5.08zferj.rcgu.o new file mode 100644 index 0000000..b252887 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.abkbcg8msy2fl003c3ybi1pa5.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.abkbcg8msy2fl003c3ybi1pa5.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.abkbcg8msy2fl003c3ybi1pa5.0k89hkf.rcgu.o new file mode 100644 index 0000000..b252887 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.abkbcg8msy2fl003c3ybi1pa5.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.ae67ik8g9dzl7do45lcmq9d1a.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.ae67ik8g9dzl7do45lcmq9d1a.08zferj.rcgu.o new file mode 100644 index 0000000..89c07e5 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.ae67ik8g9dzl7do45lcmq9d1a.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.ae67ik8g9dzl7do45lcmq9d1a.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.ae67ik8g9dzl7do45lcmq9d1a.0k89hkf.rcgu.o new file mode 100644 index 0000000..89c07e5 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.ae67ik8g9dzl7do45lcmq9d1a.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.auglgshxidhffk7zcezulu1at.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.auglgshxidhffk7zcezulu1at.08zferj.rcgu.o new file mode 100644 index 0000000..fb543a0 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.auglgshxidhffk7zcezulu1at.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.auglgshxidhffk7zcezulu1at.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.auglgshxidhffk7zcezulu1at.0k89hkf.rcgu.o new file mode 100644 index 0000000..fb543a0 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.auglgshxidhffk7zcezulu1at.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.bq05exhwjo43ia0301vnxslbi.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.bq05exhwjo43ia0301vnxslbi.08zferj.rcgu.o new file mode 100644 index 0000000..4c6d27c Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.bq05exhwjo43ia0301vnxslbi.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.bq05exhwjo43ia0301vnxslbi.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.bq05exhwjo43ia0301vnxslbi.0k89hkf.rcgu.o new file mode 100644 index 0000000..4c6d27c Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.bq05exhwjo43ia0301vnxslbi.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.c1l5u1pij0zhcng212fdgcdjw.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.c1l5u1pij0zhcng212fdgcdjw.08zferj.rcgu.o new file mode 100644 index 0000000..37826fa Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.c1l5u1pij0zhcng212fdgcdjw.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.c1l5u1pij0zhcng212fdgcdjw.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.c1l5u1pij0zhcng212fdgcdjw.0k89hkf.rcgu.o new file mode 100644 index 0000000..baa7985 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.c1l5u1pij0zhcng212fdgcdjw.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.ckgavqdcqmo2newsub1jf4pf5.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.ckgavqdcqmo2newsub1jf4pf5.08zferj.rcgu.o new file mode 100644 index 0000000..cc6acf0 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.ckgavqdcqmo2newsub1jf4pf5.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.ckgavqdcqmo2newsub1jf4pf5.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.ckgavqdcqmo2newsub1jf4pf5.0k89hkf.rcgu.o new file mode 100644 index 0000000..95c52f2 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.ckgavqdcqmo2newsub1jf4pf5.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.d b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.d new file mode 100644 index 0000000..cd7b3e0 --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.d @@ -0,0 +1,11 @@ +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.d: src/lib.rs src/demodulator.rs src/framing.rs src/modulator.rs src/protocol.rs + +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/libcore_dsp-9fcf9e12dd1f1f09.rlib: src/lib.rs src/demodulator.rs src/framing.rs src/modulator.rs src/protocol.rs + +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/libcore_dsp-9fcf9e12dd1f1f09.rmeta: src/lib.rs src/demodulator.rs src/framing.rs src/modulator.rs src/protocol.rs + +src/lib.rs: +src/demodulator.rs: +src/framing.rs: +src/modulator.rs: +src/protocol.rs: diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.d9bjpslw8yb7340pbbz3hodai.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.d9bjpslw8yb7340pbbz3hodai.08zferj.rcgu.o new file mode 100644 index 0000000..776ff3b Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.d9bjpslw8yb7340pbbz3hodai.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.d9bjpslw8yb7340pbbz3hodai.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.d9bjpslw8yb7340pbbz3hodai.0k89hkf.rcgu.o new file mode 100644 index 0000000..776ff3b Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.d9bjpslw8yb7340pbbz3hodai.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.e4xpog92toeha27ahyzyoyxmo.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.e4xpog92toeha27ahyzyoyxmo.08zferj.rcgu.o new file mode 100644 index 0000000..1eb4636 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.e4xpog92toeha27ahyzyoyxmo.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.e4xpog92toeha27ahyzyoyxmo.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.e4xpog92toeha27ahyzyoyxmo.0k89hkf.rcgu.o new file mode 100644 index 0000000..5740e10 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.e4xpog92toeha27ahyzyoyxmo.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.ese56t3mqjb3s9gm4hd8z1hzm.08zferj.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.ese56t3mqjb3s9gm4hd8z1hzm.08zferj.rcgu.o new file mode 100644 index 0000000..0b97d5e Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.ese56t3mqjb3s9gm4hd8z1hzm.08zferj.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.ese56t3mqjb3s9gm4hd8z1hzm.0k89hkf.rcgu.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.ese56t3mqjb3s9gm4hd8z1hzm.0k89hkf.rcgu.o new file mode 100644 index 0000000..0b97d5e Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/core_dsp-9fcf9e12dd1f1f09.ese56t3mqjb3s9gm4hd8z1hzm.0k89hkf.rcgu.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/libcore_dsp-39dfdf70bac54e8e.rmeta b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/libcore_dsp-39dfdf70bac54e8e.rmeta new file mode 100644 index 0000000..01e4773 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/libcore_dsp-39dfdf70bac54e8e.rmeta differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/libcore_dsp-9fcf9e12dd1f1f09.rlib b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/libcore_dsp-9fcf9e12dd1f1f09.rlib new file mode 100644 index 0000000..72db9eb Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/libcore_dsp-9fcf9e12dd1f1f09.rlib differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/libcore_dsp-9fcf9e12dd1f1f09.rmeta b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/libcore_dsp-9fcf9e12dd1f1f09.rmeta new file mode 100644 index 0000000..874ae33 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/deps/libcore_dsp-9fcf9e12dd1f1f09.rmeta differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/12k97mpx2n9lxgm2eq2td5oxd.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/12k97mpx2n9lxgm2eq2td5oxd.o new file mode 100644 index 0000000..097b8b9 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/12k97mpx2n9lxgm2eq2td5oxd.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/2zwh8jo97358hpq4lhqwm4z24.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/2zwh8jo97358hpq4lhqwm4z24.o new file mode 100644 index 0000000..6596852 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/2zwh8jo97358hpq4lhqwm4z24.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/6vidhgseov3wii8ff3qx78s3y.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/6vidhgseov3wii8ff3qx78s3y.o new file mode 100644 index 0000000..ba6481e Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/6vidhgseov3wii8ff3qx78s3y.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/dep-graph.bin b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/dep-graph.bin new file mode 100644 index 0000000..16d9510 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/dep-graph.bin differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/dmw6r891oxs6edembdy3za1cv.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/dmw6r891oxs6edembdy3za1cv.o new file mode 100644 index 0000000..59a8757 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/dmw6r891oxs6edembdy3za1cv.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/dp709qbkhycpt7rlwg0v2831l.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/dp709qbkhycpt7rlwg0v2831l.o new file mode 100644 index 0000000..07375bb Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/dp709qbkhycpt7rlwg0v2831l.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/edxdoze9iamb67lnwnc7c236m.o b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/edxdoze9iamb67lnwnc7c236m.o new file mode 100644 index 0000000..e7a7226 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/edxdoze9iamb67lnwnc7c236m.o differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/query-cache.bin b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/query-cache.bin new file mode 100644 index 0000000..63ecfd1 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/query-cache.bin differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/work-products.bin b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/work-products.bin new file mode 100644 index 0000000..2217db6 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f-ebqty62v1c0h8zv5rxjz6mq73/work-products.bin differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f.lock b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/build_script_build-1pp0505ekn6w4/s-hiaqaobxha-051wp0f.lock new file mode 100755 index 0000000..e69de29 diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/core_dsp-0ly3znfmhnopb/s-hiaqaoob82-1s19zh1-8bnlzlasjltrlekzp2lc6p5te/dep-graph.bin b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/core_dsp-0ly3znfmhnopb/s-hiaqaoob82-1s19zh1-8bnlzlasjltrlekzp2lc6p5te/dep-graph.bin new file mode 100644 index 0000000..aecda97 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/core_dsp-0ly3znfmhnopb/s-hiaqaoob82-1s19zh1-8bnlzlasjltrlekzp2lc6p5te/dep-graph.bin differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/core_dsp-0ly3znfmhnopb/s-hiaqaoob82-1s19zh1-8bnlzlasjltrlekzp2lc6p5te/metadata.rmeta b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/core_dsp-0ly3znfmhnopb/s-hiaqaoob82-1s19zh1-8bnlzlasjltrlekzp2lc6p5te/metadata.rmeta new file mode 100644 index 0000000..01e4773 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/core_dsp-0ly3znfmhnopb/s-hiaqaoob82-1s19zh1-8bnlzlasjltrlekzp2lc6p5te/metadata.rmeta differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/core_dsp-0ly3znfmhnopb/s-hiaqaoob82-1s19zh1-8bnlzlasjltrlekzp2lc6p5te/query-cache.bin b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/core_dsp-0ly3znfmhnopb/s-hiaqaoob82-1s19zh1-8bnlzlasjltrlekzp2lc6p5te/query-cache.bin new file mode 100644 index 0000000..e602091 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/core_dsp-0ly3znfmhnopb/s-hiaqaoob82-1s19zh1-8bnlzlasjltrlekzp2lc6p5te/query-cache.bin differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/core_dsp-0ly3znfmhnopb/s-hiaqaoob82-1s19zh1-8bnlzlasjltrlekzp2lc6p5te/work-products.bin b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/core_dsp-0ly3znfmhnopb/s-hiaqaoob82-1s19zh1-8bnlzlasjltrlekzp2lc6p5te/work-products.bin new file mode 100644 index 0000000..f6a3243 Binary files /dev/null and b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/core_dsp-0ly3znfmhnopb/s-hiaqaoob82-1s19zh1-8bnlzlasjltrlekzp2lc6p5te/work-products.bin differ diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/core_dsp-0ly3znfmhnopb/s-hiaqaoob82-1s19zh1.lock b/implementations/01-ultrasonic-data-transfer/core-dsp/target/debug/incremental/core_dsp-0ly3znfmhnopb/s-hiaqaoob82-1s19zh1.lock new file mode 100755 index 0000000..e69de29 diff --git a/implementations/01-ultrasonic-data-transfer/core-dsp/uniffi/uniffi.udl b/implementations/01-ultrasonic-data-transfer/core-dsp/uniffi/uniffi.udl new file mode 100644 index 0000000..7bf5cc2 --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/core-dsp/uniffi/uniffi.udl @@ -0,0 +1,14 @@ +namespace sonic_card_exchange { + [Throws=ProtocolError] + bytes encode_payload(string payload); + + [Throws=ProtocolError] + string decode_payload(bytes frame); + + [Error] + enum ProtocolError { + "InvalidFrame", + "InvalidUtf8", + "PayloadTooLarge", + }; +}; diff --git a/implementations/01-ultrasonic-data-transfer/docs/qa-test-matrix.md b/implementations/01-ultrasonic-data-transfer/docs/qa-test-matrix.md new file mode 100644 index 0000000..ca7b7e4 --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/docs/qa-test-matrix.md @@ -0,0 +1,26 @@ +# QA Test Matrix Template + +## Metadata + +- Feature area: +- Build/version: +- Device(s): +- OS version(s): +- Tester: +- Date: + +## Matrix + +| ID | Scenario | Preconditions | Steps | Expected Result | Actual Result | Status | Notes | +|---|---|---|---|---|---|---|---| +| QA-001 | Basic payload round-trip | App build installed | Encode then decode short ASCII payload | Decoded payload equals input | | Not Run | | +| QA-002 | Empty payload handling | App build installed | Encode/decode empty payload | System handles empty payload gracefully | | Not Run | | +| QA-003 | Max payload boundary | App build installed | Encode payload near configured max | Success at boundary without crash | | Not Run | | +| QA-004 | Invalid frame rejection | App build installed | Feed malformed frame to decoder | Decoder returns error and does not crash | | Not Run | | +| QA-005 | Cross-platform compatibility | iOS + Android builds available | Encode on iOS, decode on Android (and reverse) | Payload preserved across platforms | | Not Run | | + +## Defect Log + +| Defect ID | Related Test ID | Severity | Summary | Owner | Status | +|---|---|---|---|---|---| +| | | | | | | diff --git a/implementations/01-ultrasonic-data-transfer/docs/uniffi-integration-checklist.md b/implementations/01-ultrasonic-data-transfer/docs/uniffi-integration-checklist.md new file mode 100644 index 0000000..8282b48 --- /dev/null +++ b/implementations/01-ultrasonic-data-transfer/docs/uniffi-integration-checklist.md @@ -0,0 +1,37 @@ +# UniFFI Integration Checklist + +This checklist covers the in-repo steps for generating bindings and integrating `core-dsp` with iOS and Android clients. + +## 1. Generate bindings + +1. Install generator CLI: + - `cargo install uniffi_bindgen_cli` +2. From `implementations/01-ultrasonic-data-transfer/core-dsp` run: + - `./scripts/generate-uniffi.sh all` +3. Verify generated outputs exist: + - `uniffi/generated/swift/` + - `uniffi/generated/kotlin/` + +## 2. iOS integration (Swift) + +1. Build Rust staticlib/XCFramework from `core-dsp`. +2. Add generated Swift sources from `uniffi/generated/swift/` to Xcode target. +3. Add Rust binary artifact to app/framework linking settings. +4. Validate calls: + - `encode_payload(payload: String) -> Data` + - `decode_payload(frame: Data) throws -> String` + +## 3. Android integration (Kotlin/JNI) + +1. Build Rust shared libs for Android ABIs (arm64-v8a, armeabi-v7a, x86_64). +2. Add generated Kotlin/JNI sources from `uniffi/generated/kotlin/`. +3. Package `.so` artifacts under `src/main/jniLibs//`. +4. Validate calls: + - `encode_payload(payload: String): ByteArray` + - `decode_payload(frame: ByteArray): String` + +## 4. External validation (still required) + +1. Device-level audio playback/capture validation in real acoustic environments. +2. End-to-end latency and BER runs on multiple phones/OS versions. +3. Store/release hardening (signing, symbol stripping, CI artifact packaging). diff --git a/implementations/02-nearby-connections/README.md b/implementations/02-nearby-connections/README.md new file mode 100644 index 0000000..3110baf --- /dev/null +++ b/implementations/02-nearby-connections/README.md @@ -0,0 +1,36 @@ +# Plan 02: Nearby Connections Implementation Status + +## Completion Matrix + +| Scope | Status | Notes | +| --- | --- | --- | +| Flutter minimal runnable skeleton | Completed (in-repo scaffold) | Added `pubspec.yaml`, existing `lib/main.dart` state UI, and app scaffold docs. | +| UI screens/state flow docs | Completed | Added `docs/ui-screens-state-flow.md` and retained existing state-machine docs. | +| Android/iOS bridge contracts (machine-readable) | Completed | Added `contracts/nearby_bridge.schema.json` and `contracts/bridge_contract_matrix.md`. | +| Dart bridge adapter stubs | Completed | Added `lib/core/adapters/method_channel_nearby_bridge.dart` to map method/event channels. | +| Signaling server expiry + cleanup | Completed | Added TTL-based session expiry, background cleanup loop, and `/signal/cleanup` endpoint. | +| Signaling server tests | Completed | Added cleanup/expiry tests and method validation tests for cleanup endpoint. | +| `go test` | Passing | `go test ./...` passes for `signaling-server`. | + +## Layout + +- `nearby-card-drop/app` - scaffold notes and app generation guidance +- `nearby-card-drop/contracts` - bridge schema and contract matrix +- `nearby-card-drop/lib` - app entrypoint, state machine, contracts, and bridge adapter stubs +- `nearby-card-drop/signaling-server` - Go signaling server with expiry/cleanup and tests +- `nearby-card-drop/docs` - state machine, failure modes, and UI/state flow + +## Local Verification + +1. `cd implementations/02-nearby-connections/nearby-card-drop/signaling-server` +2. `go test ./...` +3. `go run .` +4. `curl http://localhost:8080/health` +5. `curl -X POST http://localhost:8080/signal/cleanup` + +## Remaining External Tasks + +- Run `flutter create .` in `nearby-card-drop` to generate full platform runner metadata for direct `flutter run`. +- Implement Android native bridge bindings (Google Nearby Connections) against `contracts/nearby_bridge.schema.json`. +- Implement iOS native bridge bindings (MultipeerConnectivity) against `contracts/nearby_bridge.schema.json`. +- Validate real-device cross-platform transfer and permission/error behavior on physical devices. diff --git a/implementations/02-nearby-connections/nearby-card-drop/android/README.md b/implementations/02-nearby-connections/nearby-card-drop/android/README.md new file mode 100644 index 0000000..9935d01 --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/android/README.md @@ -0,0 +1,143 @@ +# Android Bridge Contract + +Defines Android-side contract for the Flutter method/event channels. + +## Channels + +- Method channel: `xdevice/nearby_bridge/methods` +- Event channel: `xdevice/nearby_bridge/events` + +## Method Calls (Dart -> Android) + +All method calls are invoked on the method channel with the name below and the JSON argument object. + +### `initialize` + +```json +{} +``` + +Returns: + +```json +{"ok": true} +``` + +### `startAdvertising` + +```json +{"localDisplayName": "alice-phone"} +``` + +Returns: + +```json +{"ok": true} +``` + +### `stopAdvertising` + +```json +{} +``` + +### `startDiscovery` + +```json +{} +``` + +### `stopDiscovery` + +```json +{} +``` + +### `requestConnection` + +```json +{"peerId": "peer-123"} +``` + +### `acceptConnection` + +```json +{"peerId": "peer-123"} +``` + +### `rejectConnection` + +```json +{"peerId": "peer-123"} +``` + +### `sendPayload` + +```json +{ + "peerId": "peer-123", + "transferId": "tx-001", + "fileName": "card.vcf", + "totalBytes": 2048 +} +``` + +## Event Payloads (Android -> Dart) + +Event channel emits JSON objects with a top-level `event` and `data`. + +```json +{ + "event": "onPeerDiscovered", + "data": { + "peerId": "peer-123", + "displayName": "Bob", + "medium": "nearby" + } +} +``` + +Supported `event` values and `data` schema: + +### `onPeerDiscovered` + +```json +{"peerId": "peer-123", "displayName": "Bob", "medium": "nearby"} +``` + +### `onConnectionRequested` + +```json +{"peerId": "peer-123"} +``` + +### `onConnectionStateChanged` + +```json +{"peerId": "peer-123", "state": "connecting"} +``` + +`state` enum: `connecting | connected | rejected | disconnected | failed` + +### `onTransferProgress` + +```json +{"transferId": "tx-001", "bytesTransferred": 1024, "totalBytes": 2048} +``` + +### `onTransferCompleted` + +```json +{"transferId": "tx-001"} +``` + +### `onError` + +```json +{"code": "PERMISSION_DENIED", "message": "Nearby permission missing"} +``` + +## Notes + +- Android implementation maps Google Nearby Connections callbacks into these event payloads. +- iOS must keep identical keys to preserve cross-platform Dart deserialization. diff --git a/implementations/02-nearby-connections/nearby-card-drop/app/README.md b/implementations/02-nearby-connections/nearby-card-drop/app/README.md new file mode 100644 index 0000000..73141f4 --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/app/README.md @@ -0,0 +1,12 @@ +# App Scaffold Notes + +`nearby-card-drop` is now structured as a minimal Flutter app skeleton: + +- `pubspec.yaml` provides runnable Flutter metadata. +- `lib/main.dart` provides a minimal Material UI for state-machine transitions. +- `lib/state/` contains event/state/reducer flow. +- `lib/core/adapters/method_channel_nearby_bridge.dart` defines the native bridge adapter stub. + +External generation still required: + +- `flutter create .` must be run in this directory to generate full platform folders (`android/`, `ios/`, `macos/`, etc.) if a standalone app target is needed. diff --git a/implementations/02-nearby-connections/nearby-card-drop/contracts/bridge_contract_matrix.md b/implementations/02-nearby-connections/nearby-card-drop/contracts/bridge_contract_matrix.md new file mode 100644 index 0000000..c6c9067 --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/contracts/bridge_contract_matrix.md @@ -0,0 +1,33 @@ +# Bridge Contract Matrix + +## Channels + +| Type | Name | +| --- | --- | +| MethodChannel | `xdevice/nearby_bridge/methods` | +| EventChannel | `xdevice/nearby_bridge/events` | + +## Method Calls (Dart -> Native) + +| Method | Required args | Response | +| --- | --- | --- | +| `initialize` | none | `{ "ok": true }` | +| `startAdvertising` | `localDisplayName: string` | `{ "ok": true }` | +| `stopAdvertising` | none | `{ "ok": true }` | +| `startDiscovery` | none | `{ "ok": true }` | +| `stopDiscovery` | none | `{ "ok": true }` | +| `requestConnection` | `peerId: string` | `{ "ok": true }` | +| `acceptConnection` | `peerId: string` | `{ "ok": true }` | +| `rejectConnection` | `peerId: string` | `{ "ok": true }` | +| `sendPayload` | `peerId: string`, `transferId: string`, `fileName: string`, `totalBytes: int` | `{ "ok": true }` | + +## Event Payloads (Native -> Dart) + +| Event | Required data | Notes | +| --- | --- | --- | +| `onPeerDiscovered` | `peerId`, `displayName`, `medium` | `medium` supports `nearby`, `multipeer`, `bluetooth`, `wifiLan`, `wifiAware` | +| `onConnectionRequested` | `peerId` | incoming request hint | +| `onConnectionStateChanged` | `peerId`, `state` | `state`: `connecting`, `connected`, `rejected`, `disconnected`, `failed` | +| `onTransferProgress` | `transferId`, `bytesTransferred`, `totalBytes` | used for progress UI | +| `onTransferCompleted` | `transferId` | terminal success signal | +| `onError` | `code`, `message` | transport/permission failures | diff --git a/implementations/02-nearby-connections/nearby-card-drop/contracts/nearby_bridge.schema.json b/implementations/02-nearby-connections/nearby-card-drop/contracts/nearby_bridge.schema.json new file mode 100644 index 0000000..93f27e7 --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/contracts/nearby_bridge.schema.json @@ -0,0 +1,150 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://xdevice.local/schemas/nearby_bridge.schema.json", + "title": "Nearby Bridge Contract", + "type": "object", + "required": ["methodChannel", "eventChannel", "methods", "events"], + "properties": { + "methodChannel": {"const": "xdevice/nearby_bridge/methods"}, + "eventChannel": {"const": "xdevice/nearby_bridge/events"}, + "methods": { + "type": "array", + "items": { + "type": "object", + "required": ["name", "requestSchema", "responseSchema"], + "properties": { + "name": {"type": "string"}, + "requestSchema": {"$ref": "#/$defs/objectSchema"}, + "responseSchema": {"$ref": "#/$defs/objectSchema"} + } + } + }, + "events": { + "type": "array", + "items": { + "type": "object", + "required": ["name", "dataSchema"], + "properties": { + "name": {"type": "string"}, + "dataSchema": {"$ref": "#/$defs/objectSchema"} + } + } + } + }, + "$defs": { + "objectSchema": { + "type": "object", + "additionalProperties": true + } + }, + "examples": [ + { + "methodChannel": "xdevice/nearby_bridge/methods", + "eventChannel": "xdevice/nearby_bridge/events", + "methods": [ + { + "name": "initialize", + "requestSchema": { + "type": "object", + "additionalProperties": false + }, + "responseSchema": { + "type": "object", + "required": ["ok"], + "properties": {"ok": {"type": "boolean"}} + } + }, + { + "name": "startAdvertising", + "requestSchema": { + "type": "object", + "required": ["localDisplayName"], + "properties": {"localDisplayName": {"type": "string"}} + }, + "responseSchema": { + "type": "object", + "required": ["ok"], + "properties": {"ok": {"type": "boolean"}} + } + }, + { + "name": "startDiscovery", + "requestSchema": {"type": "object", "additionalProperties": false}, + "responseSchema": { + "type": "object", + "required": ["ok"], + "properties": {"ok": {"type": "boolean"}} + } + }, + { + "name": "requestConnection", + "requestSchema": { + "type": "object", + "required": ["peerId"], + "properties": {"peerId": {"type": "string"}} + }, + "responseSchema": { + "type": "object", + "required": ["ok"], + "properties": {"ok": {"type": "boolean"}} + } + }, + { + "name": "sendPayload", + "requestSchema": { + "type": "object", + "required": ["peerId", "transferId", "fileName", "totalBytes"], + "properties": { + "peerId": {"type": "string"}, + "transferId": {"type": "string"}, + "fileName": {"type": "string"}, + "totalBytes": {"type": "integer", "minimum": 0} + } + }, + "responseSchema": { + "type": "object", + "required": ["ok"], + "properties": {"ok": {"type": "boolean"}} + } + } + ], + "events": [ + { + "name": "onPeerDiscovered", + "dataSchema": { + "type": "object", + "required": ["peerId", "displayName", "medium"], + "properties": { + "peerId": {"type": "string"}, + "displayName": {"type": "string"}, + "medium": {"type": "string", "enum": ["nearby", "multipeer", "bluetooth", "wifiLan", "wifiAware"]} + } + } + }, + { + "name": "onTransferProgress", + "dataSchema": { + "type": "object", + "required": ["transferId", "bytesTransferred", "totalBytes"], + "properties": { + "transferId": {"type": "string"}, + "bytesTransferred": {"type": "integer", "minimum": 0}, + "totalBytes": {"type": "integer", "minimum": 0} + } + } + }, + { + "name": "onError", + "dataSchema": { + "type": "object", + "required": ["code", "message"], + "properties": { + "code": {"type": "string"}, + "message": {"type": "string"} + } + } + } + ] + } + ] +} diff --git a/implementations/02-nearby-connections/nearby-card-drop/docs/basic-flow.md b/implementations/02-nearby-connections/nearby-card-drop/docs/basic-flow.md new file mode 100644 index 0000000..cfb1187 --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/docs/basic-flow.md @@ -0,0 +1,23 @@ +# Basic App Flow (Scaffold) + +This is the minimal UI-to-state-machine wiring used by `lib/main.dart`. + +## Event Sequence + +1. `InitializeRequested` -> state `initializing` +2. `StartDiscoveryRequested` -> state `discovering` +3. `PeerSelected(peerId)` -> state `connecting` +4. `ConnectedEstablished` -> state `connected` +5. `TransferRequested(transferId)` -> state `transferring` +6. `TransferCompleted(transferId)` -> state `completed` +7. `ResetRequested` -> state `idle` + +## Failure Path + +- Any step can emit `FailureObserved(message)` -> state `error` +- UI can recover by dispatching `ResetRequested` + +## Notes + +- This scaffold is intentional: it validates reducer transitions without requiring native Nearby bridge integration yet. +- Native bridge callbacks should later dispatch the same events into `NearbyStateMachine`. diff --git a/implementations/02-nearby-connections/nearby-card-drop/docs/failure-modes.md b/implementations/02-nearby-connections/nearby-card-drop/docs/failure-modes.md new file mode 100644 index 0000000..e2aa7d9 --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/docs/failure-modes.md @@ -0,0 +1,33 @@ +# Failure Modes (Scaffold) + +## Connectivity + +- Bluetooth disabled/unavailable. +- Wi-Fi transport unavailable or blocked by system policy. +- Peer becomes unreachable during negotiation. + +## Permission and Platform + +- Runtime permission denied (Bluetooth, nearby devices, local network). +- Background execution limits interrupt discovery or transfer. +- Native API incompatibility across OS versions. + +## Protocol and Session + +- Connection handshake timeout. +- Peer rejects connection request. +- Payload checksum/length mismatch. +- Duplicate or stale transfer ID observed. + +## Operational + +- Signaling server unavailable (future rendezvous mode). +- Unexpected app process kill during active transfer. +- Partial file writes on interrupted receive. + +## Handling Strategy (Initial) + +- Map each failure to a typed error code for UI and retry policy. +- Push state machine into `error` with context for diagnostics. +- Add bounded retry for transient network conditions. +- Require explicit user action before resuming failed transfer. diff --git a/implementations/02-nearby-connections/nearby-card-drop/docs/state-machine.md b/implementations/02-nearby-connections/nearby-card-drop/docs/state-machine.md new file mode 100644 index 0000000..a5e84ba --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/docs/state-machine.md @@ -0,0 +1,35 @@ +# Nearby State Machine (Scaffold) + +## States + +- `idle` +- `initializing` +- `discovering` +- `advertising` +- `connecting` +- `connected` +- `transferring` +- `completed` +- `error` + +## Primary Events + +- `InitializeRequested` +- `StartDiscoveryRequested` +- `PeerSelected(peerId)` +- `ConnectedEstablished` +- `TransferRequested(transferId)` +- `TransferCompleted(transferId)` +- `FailureObserved(message)` +- `ResetRequested` + +## Initial Transition Intent + +- `idle -> initializing` when initialization begins. +- `initializing -> discovering` when local scan/advertise starts. +- `discovering -> connecting` when user selects a peer. +- `connecting -> connected` when the session is established. +- `connected -> transferring` when payload send/receive starts. +- `transferring -> completed` on successful completion. +- `* -> error` on transport, permission, or protocol failures. +- `* -> idle` on explicit reset, clearing active peer/transfer/error context. diff --git a/implementations/02-nearby-connections/nearby-card-drop/docs/ui-screens-state-flow.md b/implementations/02-nearby-connections/nearby-card-drop/docs/ui-screens-state-flow.md new file mode 100644 index 0000000..403dd53 --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/docs/ui-screens-state-flow.md @@ -0,0 +1,25 @@ +# UI Screens and State Flow + +## Screens + +- `HomeScaffoldScreen` (`lib/main.dart`): debug controls and state snapshot. +- `DiscoveryScreen` (planned): peer list sourced from `NearbyBridge.discoveredPeers()`. +- `TransferProgressScreen` (planned): progress updates from `NearbyBridge.transferProgress()`. + +## Current Runtime Flow + +1. App boots into `NearbyState.idle`. +2. `Initialize` button dispatches `InitializeRequested`. +3. `Discover` dispatches `StartDiscoveryRequested`. +4. `Select Peer` dispatches `PeerSelected(peer-001)`. +5. `Connected` dispatches `ConnectedEstablished`. +6. `Transfer` dispatches `TransferRequested(tx-001)`. +7. `Complete` dispatches `TransferCompleted(tx-001)`. +8. `Fail` dispatches `FailureObserved(message)`. +9. `Reset` dispatches `ResetRequested`. + +## Integration Notes + +- `MethodChannelNearbyBridge` in `lib/core/adapters/` implements the channel contract for both Android and iOS. +- Native layers must emit event payload keys exactly as declared in `contracts/nearby_bridge.schema.json`. +- Planned screens are blocked on external native bridge implementation and real device pairing tests. diff --git a/implementations/02-nearby-connections/nearby-card-drop/ios/README.md b/implementations/02-nearby-connections/nearby-card-drop/ios/README.md new file mode 100644 index 0000000..a0a0abf --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/ios/README.md @@ -0,0 +1,137 @@ +# iOS Bridge Contract + +Defines iOS-side contract for the Flutter method/event channels. + +## Channels + +- Method channel: `xdevice/nearby_bridge/methods` +- Event channel: `xdevice/nearby_bridge/events` + +## Method Calls (Dart -> iOS) + +All method calls are invoked on the method channel with the name below and the JSON argument object. + +### `initialize` + +```json +{} +``` + +Returns: + +```json +{"ok": true} +``` + +### `startAdvertising` + +```json +{"localDisplayName": "alice-iphone"} +``` + +### `stopAdvertising` + +```json +{} +``` + +### `startDiscovery` + +```json +{} +``` + +### `stopDiscovery` + +```json +{} +``` + +### `requestConnection` + +```json +{"peerId": "peer-123"} +``` + +### `acceptConnection` + +```json +{"peerId": "peer-123"} +``` + +### `rejectConnection` + +```json +{"peerId": "peer-123"} +``` + +### `sendPayload` + +```json +{ + "peerId": "peer-123", + "transferId": "tx-001", + "fileName": "card.vcf", + "totalBytes": 2048 +} +``` + +## Event Payloads (iOS -> Dart) + +Event channel emits JSON objects with a top-level `event` and `data`. + +```json +{ + "event": "onPeerDiscovered", + "data": { + "peerId": "peer-123", + "displayName": "Bob", + "medium": "multipeer" + } +} +``` + +Supported `event` values and `data` schema: + +### `onPeerDiscovered` + +```json +{"peerId": "peer-123", "displayName": "Bob", "medium": "multipeer"} +``` + +### `onConnectionRequested` + +```json +{"peerId": "peer-123"} +``` + +### `onConnectionStateChanged` + +```json +{"peerId": "peer-123", "state": "connected"} +``` + +`state` enum: `connecting | connected | rejected | disconnected | failed` + +### `onTransferProgress` + +```json +{"transferId": "tx-001", "bytesTransferred": 1024, "totalBytes": 2048} +``` + +### `onTransferCompleted` + +```json +{"transferId": "tx-001"} +``` + +### `onError` + +```json +{"code": "TRANSPORT_ERROR", "message": "Session dropped"} +``` + +## Notes + +- iOS implementation maps MultipeerConnectivity callbacks into these event payloads. +- Android must keep identical method names and JSON keys. diff --git a/implementations/02-nearby-connections/nearby-card-drop/lib/core/adapters/method_channel_nearby_bridge.dart b/implementations/02-nearby-connections/nearby-card-drop/lib/core/adapters/method_channel_nearby_bridge.dart new file mode 100644 index 0000000..23847a5 --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/lib/core/adapters/method_channel_nearby_bridge.dart @@ -0,0 +1,124 @@ +import 'dart:async'; + +import 'package:flutter/services.dart'; + +import '../nearby_bridge.dart'; +import '../nearby_types.dart'; + +class MethodChannelNearbyBridge implements NearbyBridge { + MethodChannelNearbyBridge({ + MethodChannel? methodChannel, + EventChannel? eventChannel, + }) : _methodChannel = methodChannel ?? const MethodChannel(_methodsChannelName), + _eventChannel = eventChannel ?? const EventChannel(_eventsChannelName); + + static const String _methodsChannelName = 'xdevice/nearby_bridge/methods'; + static const String _eventsChannelName = 'xdevice/nearby_bridge/events'; + + final MethodChannel _methodChannel; + final EventChannel _eventChannel; + + Stream> get _events { + return _eventChannel + .receiveBroadcastStream() + .where((raw) => raw is Map) + .map((raw) => Map.from(raw as Map)); + } + + @override + Future initialize() => _invokeOk('initialize', const {}); + + @override + Future startAdvertising({required String localDisplayName}) { + return _invokeOk('startAdvertising', { + 'localDisplayName': localDisplayName, + }); + } + + @override + Future stopAdvertising() => _invokeOk('stopAdvertising', const {}); + + @override + Future startDiscovery() => _invokeOk('startDiscovery', const {}); + + @override + Future stopDiscovery() => _invokeOk('stopDiscovery', const {}); + + @override + Stream discoveredPeers() { + return _events.where((event) => event['event'] == 'onPeerDiscovered').map((event) { + final data = Map.from((event['data'] as Map?) ?? const {}); + return PeerInfo( + id: (data['peerId'] as String?) ?? '', + displayName: (data['displayName'] as String?) ?? '', + medium: _parseMedium((data['medium'] as String?) ?? ''), + ); + }); + } + + @override + Future requestConnection({required String peerId}) { + return _invokeOk('requestConnection', {'peerId': peerId}); + } + + @override + Future acceptConnection({required String peerId}) { + return _invokeOk('acceptConnection', {'peerId': peerId}); + } + + @override + Future rejectConnection({required String peerId}) { + return _invokeOk('rejectConnection', {'peerId': peerId}); + } + + @override + Future sendPayload({ + required String peerId, + required TransferPayload payload, + }) { + return _invokeOk('sendPayload', { + 'peerId': peerId, + 'transferId': payload.transferId, + 'fileName': payload.fileName, + 'totalBytes': payload.totalBytes, + }); + } + + @override + Stream transferProgress() { + return _events.where((event) => event['event'] == 'onTransferProgress').map((event) { + final data = Map.from((event['data'] as Map?) ?? const {}); + return TransferProgressEvent( + transferId: (data['transferId'] as String?) ?? '', + bytesTransferred: (data['bytesTransferred'] as int?) ?? 0, + totalBytes: (data['totalBytes'] as int?) ?? 0, + ); + }); + } + + Future _invokeOk(String method, Map args) async { + final dynamic raw = await _methodChannel.invokeMethod(method, args); + final response = (raw is Map) ? Map.from(raw) : const {}; + if (response['ok'] != true) { + throw PlatformException( + code: 'BRIDGE_CALL_FAILED', + message: 'Method $method did not return {ok:true}', + details: response, + ); + } + } + + ConnectionMedium _parseMedium(String raw) { + switch (raw) { + case 'wifiLan': + return ConnectionMedium.wifiLan; + case 'wifiAware': + return ConnectionMedium.wifiAware; + case 'nearby': + case 'multipeer': + case 'bluetooth': + default: + return ConnectionMedium.bluetooth; + } + } +} diff --git a/implementations/02-nearby-connections/nearby-card-drop/lib/core/nearby_bridge.dart b/implementations/02-nearby-connections/nearby-card-drop/lib/core/nearby_bridge.dart new file mode 100644 index 0000000..79e0741 --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/lib/core/nearby_bridge.dart @@ -0,0 +1,37 @@ +import 'nearby_types.dart'; + +/// Platform bridge interface implemented through method channels. +abstract class NearbyBridge { + Future initialize(); + + Future startAdvertising({required String localDisplayName}); + Future stopAdvertising(); + + Future startDiscovery(); + Future stopDiscovery(); + + Stream discoveredPeers(); + + Future requestConnection({required String peerId}); + Future acceptConnection({required String peerId}); + Future rejectConnection({required String peerId}); + + Future sendPayload({ + required String peerId, + required TransferPayload payload, + }); + + Stream transferProgress(); +} + +class TransferProgressEvent { + const TransferProgressEvent({ + required this.transferId, + required this.bytesTransferred, + required this.totalBytes, + }); + + final String transferId; + final int bytesTransferred; + final int totalBytes; +} diff --git a/implementations/02-nearby-connections/nearby-card-drop/lib/core/nearby_types.dart b/implementations/02-nearby-connections/nearby-card-drop/lib/core/nearby_types.dart new file mode 100644 index 0000000..6a13ddc --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/lib/core/nearby_types.dart @@ -0,0 +1,36 @@ +/// Shared types for nearby discovery and transfer flows. + +enum ConnectionMedium { + bluetooth, + wifiLan, + wifiAware, +} + +enum TransferDirection { + send, + receive, +} + +class PeerInfo { + const PeerInfo({ + required this.id, + required this.displayName, + required this.medium, + }); + + final String id; + final String displayName; + final ConnectionMedium medium; +} + +class TransferPayload { + const TransferPayload({ + required this.transferId, + required this.fileName, + required this.totalBytes, + }); + + final String transferId; + final String fileName; + final int totalBytes; +} diff --git a/implementations/02-nearby-connections/nearby-card-drop/lib/features/discovery/discovery_contract.dart b/implementations/02-nearby-connections/nearby-card-drop/lib/features/discovery/discovery_contract.dart new file mode 100644 index 0000000..02c2d8f --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/lib/features/discovery/discovery_contract.dart @@ -0,0 +1,13 @@ +import '../../core/nearby_types.dart'; + +abstract class DiscoveryRepository { + Stream> watchDiscoveredPeers(); + Future beginScan(); + Future endScan(); +} + +abstract class ConnectionRequestHandler { + Future connectToPeer(String peerId); + Future approveIncoming(String peerId); + Future declineIncoming(String peerId); +} diff --git a/implementations/02-nearby-connections/nearby-card-drop/lib/features/transfer/transfer_contract.dart b/implementations/02-nearby-connections/nearby-card-drop/lib/features/transfer/transfer_contract.dart new file mode 100644 index 0000000..17073ee --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/lib/features/transfer/transfer_contract.dart @@ -0,0 +1,35 @@ +import '../../core/nearby_types.dart'; + +abstract class TransferRepository { + Future queueOutgoing({ + required String peerId, + required TransferPayload payload, + }); + + Stream watchTransferStatus(String transferId); +} + +enum TransferStage { + queued, + negotiating, + inProgress, + completed, + failed, + canceled, +} + +class TransferStatus { + const TransferStatus({ + required this.transferId, + required this.stage, + required this.bytesTransferred, + required this.totalBytes, + this.errorCode, + }); + + final String transferId; + final TransferStage stage; + final int bytesTransferred; + final int totalBytes; + final String? errorCode; +} diff --git a/implementations/02-nearby-connections/nearby-card-drop/lib/main.dart b/implementations/02-nearby-connections/nearby-card-drop/lib/main.dart new file mode 100644 index 0000000..75d28ec --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/lib/main.dart @@ -0,0 +1,87 @@ +import 'package:flutter/material.dart'; + +import 'state/nearby_event.dart'; +import 'state/nearby_state_machine.dart'; + +void main() { + runApp(const NearbyCardDropApp()); +} + +class NearbyCardDropApp extends StatefulWidget { + const NearbyCardDropApp({super.key}); + + @override + State createState() => _NearbyCardDropAppState(); +} + +class _NearbyCardDropAppState extends State { + final NearbyStateMachine _machine = NearbyStateMachine(); + + void _dispatch(NearbyEvent event) { + setState(() { + _machine.dispatch(event); + }); + } + + @override + Widget build(BuildContext context) { + final contextState = _machine.context; + + return MaterialApp( + home: Scaffold( + appBar: AppBar(title: const Text('Nearby Card Drop Scaffold')), + body: Padding( + padding: const EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('state: ${contextState.state.name}'), + Text('activePeerId: ${contextState.activePeerId ?? '-'}'), + Text('activeTransferId: ${contextState.activeTransferId ?? '-'}'), + Text('error: ${contextState.error ?? '-'}'), + const SizedBox(height: 16), + Wrap( + spacing: 8, + runSpacing: 8, + children: [ + ElevatedButton( + onPressed: () => _dispatch(const InitializeRequested()), + child: const Text('Initialize'), + ), + ElevatedButton( + onPressed: () => _dispatch(const StartDiscoveryRequested()), + child: const Text('Discover'), + ), + ElevatedButton( + onPressed: () => _dispatch(const PeerSelected('peer-001')), + child: const Text('Select Peer'), + ), + ElevatedButton( + onPressed: () => _dispatch(const ConnectedEstablished()), + child: const Text('Connected'), + ), + ElevatedButton( + onPressed: () => _dispatch(const TransferRequested('tx-001')), + child: const Text('Transfer'), + ), + ElevatedButton( + onPressed: () => _dispatch(const TransferCompleted('tx-001')), + child: const Text('Complete'), + ), + ElevatedButton( + onPressed: () => _dispatch(const FailureObserved('mock failure')), + child: const Text('Fail'), + ), + OutlinedButton( + onPressed: () => _dispatch(const ResetRequested()), + child: const Text('Reset'), + ), + ], + ), + ], + ), + ), + ), + ); + } +} diff --git a/implementations/02-nearby-connections/nearby-card-drop/lib/state/nearby_event.dart b/implementations/02-nearby-connections/nearby-card-drop/lib/state/nearby_event.dart new file mode 100644 index 0000000..843f7cd --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/lib/state/nearby_event.dart @@ -0,0 +1,43 @@ +sealed class NearbyEvent { + const NearbyEvent(); +} + +class InitializeRequested extends NearbyEvent { + const InitializeRequested(); +} + +class StartDiscoveryRequested extends NearbyEvent { + const StartDiscoveryRequested(); +} + +class PeerSelected extends NearbyEvent { + const PeerSelected(this.peerId); + + final String peerId; +} + +class ConnectedEstablished extends NearbyEvent { + const ConnectedEstablished(); +} + +class TransferRequested extends NearbyEvent { + const TransferRequested(this.transferId); + + final String transferId; +} + +class TransferCompleted extends NearbyEvent { + const TransferCompleted(this.transferId); + + final String transferId; +} + +class FailureObserved extends NearbyEvent { + const FailureObserved(this.message); + + final String message; +} + +class ResetRequested extends NearbyEvent { + const ResetRequested(); +} diff --git a/implementations/02-nearby-connections/nearby-card-drop/lib/state/nearby_state.dart b/implementations/02-nearby-connections/nearby-card-drop/lib/state/nearby_state.dart new file mode 100644 index 0000000..f930aee --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/lib/state/nearby_state.dart @@ -0,0 +1,42 @@ +enum NearbyState { + idle, + initializing, + discovering, + advertising, + connecting, + connected, + transferring, + completed, + error, +} + +class NearbyContext { + const NearbyContext({ + required this.state, + this.activePeerId, + this.activeTransferId, + this.error, + }); + + final NearbyState state; + final String? activePeerId; + final String? activeTransferId; + final String? error; + + NearbyContext copyWith({ + NearbyState? state, + String? activePeerId, + String? activeTransferId, + String? error, + bool clearActivePeerId = false, + bool clearActiveTransferId = false, + bool clearError = false, + }) { + return NearbyContext( + state: state ?? this.state, + activePeerId: clearActivePeerId ? null : (activePeerId ?? this.activePeerId), + activeTransferId: clearActiveTransferId ? null : (activeTransferId ?? this.activeTransferId), + error: clearError ? null : (error ?? this.error), + ); + } +} diff --git a/implementations/02-nearby-connections/nearby-card-drop/lib/state/nearby_state_machine.dart b/implementations/02-nearby-connections/nearby-card-drop/lib/state/nearby_state_machine.dart new file mode 100644 index 0000000..f58536f --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/lib/state/nearby_state_machine.dart @@ -0,0 +1,79 @@ +import 'nearby_event.dart'; +import 'nearby_state.dart'; + +/// Reducer-style state machine skeleton for Nearby transfer flow. +class NearbyStateMachine { + NearbyStateMachine() : _context = const NearbyContext(state: NearbyState.idle); + + NearbyContext _context; + + NearbyContext get context => _context; + + NearbyContext dispatch(NearbyEvent event) { + final current = _context; + + if (event is InitializeRequested) { + _context = current.copyWith(state: NearbyState.initializing, error: null); + return _context; + } + + if (event is StartDiscoveryRequested) { + if (current.state == NearbyState.initializing || current.state == NearbyState.idle) { + _context = current.copyWith(state: NearbyState.discovering, error: null); + } + return _context; + } + + if (event is PeerSelected) { + if (current.state == NearbyState.discovering) { + _context = current.copyWith( + state: NearbyState.connecting, + activePeerId: event.peerId, + error: null, + ); + } + return _context; + } + + if (event is ConnectedEstablished) { + if (current.state == NearbyState.connecting) { + _context = current.copyWith(state: NearbyState.connected, error: null); + } + return _context; + } + + if (event is TransferRequested) { + if (current.state == NearbyState.connecting || current.state == NearbyState.connected) { + _context = current.copyWith( + state: NearbyState.transferring, + activeTransferId: event.transferId, + error: null, + ); + } + return _context; + } + + if (event is TransferCompleted) { + if (current.state == NearbyState.transferring && current.activeTransferId == event.transferId) { + _context = current.copyWith(state: NearbyState.completed, clearActiveTransferId: true); + } + return _context; + } + + if (event is FailureObserved) { + _context = current.copyWith(state: NearbyState.error, error: event.message); + return _context; + } + + if (event is ResetRequested) { + _context = current.copyWith( + state: NearbyState.idle, + clearActivePeerId: true, + clearActiveTransferId: true, + clearError: true, + ); + } + + return _context; + } +} diff --git a/implementations/02-nearby-connections/nearby-card-drop/pubspec.yaml b/implementations/02-nearby-connections/nearby-card-drop/pubspec.yaml new file mode 100644 index 0000000..f5bddc5 --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/pubspec.yaml @@ -0,0 +1,19 @@ +name: nearby_card_drop +publish_to: "none" +description: Nearby connection scaffold for Plan02 +version: 0.1.0+1 + +environment: + sdk: ">=3.3.0 <4.0.0" + +dependencies: + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^5.0.0 + +flutter: + uses-material-design: true diff --git a/implementations/02-nearby-connections/nearby-card-drop/signaling-server/go.mod b/implementations/02-nearby-connections/nearby-card-drop/signaling-server/go.mod new file mode 100644 index 0000000..f836fc6 --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/signaling-server/go.mod @@ -0,0 +1,3 @@ +module xdevice/nearby-card-drop/signaling-server + +go 1.22 diff --git a/implementations/02-nearby-connections/nearby-card-drop/signaling-server/main.go b/implementations/02-nearby-connections/nearby-card-drop/signaling-server/main.go new file mode 100644 index 0000000..839fab5 --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/signaling-server/main.go @@ -0,0 +1,300 @@ +package main + +import ( + "encoding/json" + "log" + "net/http" + "strings" + "sync" + "time" +) + +type healthResponse struct { + Status string `json:"status"` + Service string `json:"service"` + Timestamp string `json:"timestamp"` +} + +type offerRequest struct { + SessionID string `json:"sessionId"` + Sdp string `json:"sdp"` + FromPeer string `json:"fromPeer"` +} + +type answerRequest struct { + SessionID string `json:"sessionId"` + Sdp string `json:"sdp"` + FromPeer string `json:"fromPeer"` +} + +type signalRecord struct { + OfferSdp string + AnswerSdp string + OfferPeer string + AnswerPeer string + LastUpdatedAt time.Time +} + +type sessionStateResponse struct { + SessionID string `json:"sessionId"` + HasOffer bool `json:"hasOffer"` + HasAnswer bool `json:"hasAnswer"` + OfferPeer string `json:"offerPeer,omitempty"` + AnswerPeer string `json:"answerPeer,omitempty"` +} + +type sessionSdpResponse struct { + SessionID string `json:"sessionId"` + OfferSdp string `json:"offerSdp,omitempty"` + AnswerSdp string `json:"answerSdp,omitempty"` +} + +var ( + signalsMu sync.Mutex + signals = map[string]signalRecord{} + sessionTTL = 10 * time.Minute + nowUTC = func() time.Time { return time.Now().UTC() } +) + +func isExpired(record signalRecord, now time.Time) bool { + if record.LastUpdatedAt.IsZero() { + return false + } + return now.Sub(record.LastUpdatedAt) > sessionTTL +} + +func cleanupExpiredSessions(now time.Time) int { + signalsMu.Lock() + defer signalsMu.Unlock() + + deleted := 0 + for sessionID, record := range signals { + if isExpired(record, now) { + delete(signals, sessionID) + deleted++ + } + } + return deleted +} + +func healthHandler(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + + resp := healthResponse{ + Status: "ok", + Service: "nearby-signaling-server", + Timestamp: time.Now().UTC().Format(time.RFC3339), + } + + if err := json.NewEncoder(w).Encode(resp); err != nil { + log.Printf("failed to encode health response: %v", err) + } +} + +func postOnly(next http.HandlerFunc) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + w.Header().Set("Allow", http.MethodPost) + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return + } + next(w, r) + } +} + +func offerHandler(w http.ResponseWriter, r *http.Request) { + var req offerRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, "invalid json", http.StatusBadRequest) + return + } + if strings.TrimSpace(req.SessionID) == "" || strings.TrimSpace(req.Sdp) == "" { + http.Error(w, "sessionId and sdp are required", http.StatusBadRequest) + return + } + + signalsMu.Lock() + record := signals[req.SessionID] + record.OfferSdp = req.Sdp + record.OfferPeer = req.FromPeer + record.LastUpdatedAt = nowUTC() + signals[req.SessionID] = record + signalsMu.Unlock() + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusAccepted) + _ = json.NewEncoder(w).Encode(map[string]string{ + "status": "offer-recorded", + "sessionId": req.SessionID, + }) +} + +func answerHandler(w http.ResponseWriter, r *http.Request) { + var req answerRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + http.Error(w, "invalid json", http.StatusBadRequest) + return + } + if strings.TrimSpace(req.SessionID) == "" || strings.TrimSpace(req.Sdp) == "" { + http.Error(w, "sessionId and sdp are required", http.StatusBadRequest) + return + } + + signalsMu.Lock() + record, ok := signals[req.SessionID] + if !ok || strings.TrimSpace(record.OfferSdp) == "" { + signalsMu.Unlock() + http.Error(w, "offer not found for session", http.StatusNotFound) + return + } + record.AnswerSdp = req.Sdp + record.AnswerPeer = req.FromPeer + record.LastUpdatedAt = nowUTC() + signals[req.SessionID] = record + signalsMu.Unlock() + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusAccepted) + _ = json.NewEncoder(w).Encode(map[string]string{ + "status": "answer-recorded", + "sessionId": req.SessionID, + }) +} + +func sessionHandler(w http.ResponseWriter, r *http.Request) { + sessionID := strings.TrimPrefix(r.URL.Path, "/signal/session/") + if strings.TrimSpace(sessionID) == "" { + http.Error(w, "sessionId is required", http.StatusBadRequest) + return + } + + if r.Method == http.MethodDelete { + signalsMu.Lock() + _, ok := signals[sessionID] + if ok { + delete(signals, sessionID) + } + signalsMu.Unlock() + if !ok { + http.Error(w, "session not found", http.StatusNotFound) + return + } + w.WriteHeader(http.StatusNoContent) + return + } + + if r.Method != http.MethodGet { + w.Header().Set("Allow", "GET, DELETE") + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return + } + + signalsMu.Lock() + record, ok := signals[sessionID] + if ok && isExpired(record, nowUTC()) { + delete(signals, sessionID) + ok = false + } + signalsMu.Unlock() + if !ok { + http.Error(w, "session not found", http.StatusNotFound) + return + } + + resp := sessionStateResponse{ + SessionID: sessionID, + HasOffer: strings.TrimSpace(record.OfferSdp) != "", + HasAnswer: strings.TrimSpace(record.AnswerSdp) != "", + OfferPeer: record.OfferPeer, + AnswerPeer: record.AnswerPeer, + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + _ = json.NewEncoder(w).Encode(resp) +} + +func sessionSdpHandler(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + w.Header().Set("Allow", http.MethodGet) + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return + } + + sessionID := strings.TrimPrefix(r.URL.Path, "/signal/sdp/") + if strings.TrimSpace(sessionID) == "" { + http.Error(w, "sessionId is required", http.StatusBadRequest) + return + } + + signalsMu.Lock() + record, ok := signals[sessionID] + if ok && isExpired(record, nowUTC()) { + delete(signals, sessionID) + ok = false + } + signalsMu.Unlock() + if !ok { + http.Error(w, "session not found", http.StatusNotFound) + return + } + + if strings.TrimSpace(record.OfferSdp) == "" && strings.TrimSpace(record.AnswerSdp) == "" { + http.Error(w, "sdp not found for session", http.StatusNotFound) + return + } + + resp := sessionSdpResponse{ + SessionID: sessionID, + OfferSdp: record.OfferSdp, + AnswerSdp: record.AnswerSdp, + } + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + _ = json.NewEncoder(w).Encode(resp) +} + +func cleanupHandler(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + w.Header().Set("Allow", http.MethodPost) + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return + } + + deleted := cleanupExpiredSessions(nowUTC()) + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + _ = json.NewEncoder(w).Encode(map[string]int{ + "deletedSessions": deleted, + }) +} + +func newMux() *http.ServeMux { + mux := http.NewServeMux() + mux.HandleFunc("/health", healthHandler) + mux.HandleFunc("/signal/offer", postOnly(offerHandler)) + mux.HandleFunc("/signal/answer", postOnly(answerHandler)) + mux.HandleFunc("/signal/session/", sessionHandler) + mux.HandleFunc("/signal/sdp/", sessionSdpHandler) + mux.HandleFunc("/signal/cleanup", cleanupHandler) + return mux +} + +func main() { + addr := ":8080" + go func() { + ticker := time.NewTicker(time.Minute) + defer ticker.Stop() + for range ticker.C { + deleted := cleanupExpiredSessions(nowUTC()) + if deleted > 0 { + log.Printf("cleaned %d expired signaling sessions", deleted) + } + } + }() + log.Printf("signaling server listening on %s", addr) + if err := http.ListenAndServe(addr, newMux()); err != nil { + log.Fatalf("server exited with error: %v", err) + } +} diff --git a/implementations/02-nearby-connections/nearby-card-drop/signaling-server/main_test.go b/implementations/02-nearby-connections/nearby-card-drop/signaling-server/main_test.go new file mode 100644 index 0000000..33a58b7 --- /dev/null +++ b/implementations/02-nearby-connections/nearby-card-drop/signaling-server/main_test.go @@ -0,0 +1,355 @@ +package main + +import ( + "bytes" + "encoding/json" + "net/http" + "net/http/httptest" + "strings" + "testing" + "time" +) + +func resetSignals() { + signalsMu.Lock() + defer signalsMu.Unlock() + signals = map[string]signalRecord{} + nowUTC = func() time.Time { return time.Now().UTC() } + sessionTTL = 10 * time.Minute +} + +func TestHealthEndpoint(t *testing.T) { + req := httptest.NewRequest(http.MethodGet, "/health", nil) + rec := httptest.NewRecorder() + + newMux().ServeHTTP(rec, req) + + if rec.Code != http.StatusOK { + t.Fatalf("expected status %d, got %d", http.StatusOK, rec.Code) + } + + if got := rec.Header().Get("Content-Type"); got != "application/json" { + t.Fatalf("expected content-type application/json, got %q", got) + } + + var payload healthResponse + if err := json.Unmarshal(rec.Body.Bytes(), &payload); err != nil { + t.Fatalf("failed to decode response body: %v", err) + } + + if payload.Status != "ok" { + t.Fatalf("expected status field 'ok', got %q", payload.Status) + } + if payload.Service != "nearby-signaling-server" { + t.Fatalf("unexpected service field %q", payload.Service) + } + if payload.Timestamp == "" { + t.Fatal("expected non-empty timestamp") + } +} + +func TestPostOnlyEndpoints_MethodHandling(t *testing.T) { + resetSignals() + mux := newMux() + endpoints := []string{"/signal/offer", "/signal/answer"} + + for _, endpoint := range endpoints { + t.Run(endpoint+"_GET_not_allowed", func(t *testing.T) { + req := httptest.NewRequest(http.MethodGet, endpoint, nil) + rec := httptest.NewRecorder() + mux.ServeHTTP(rec, req) + + if rec.Code != http.StatusMethodNotAllowed { + t.Fatalf("expected status %d, got %d", http.StatusMethodNotAllowed, rec.Code) + } + + if got := rec.Header().Get("Allow"); got != http.MethodPost { + t.Fatalf("expected Allow header %q, got %q", http.MethodPost, got) + } + }) + + t.Run(endpoint+"_POST_accepted", func(t *testing.T) { + body := `{"sessionId":"s1","sdp":"v=0","fromPeer":"peer-a"}` + if endpoint == "/signal/answer" { + offerReq := httptest.NewRequest(http.MethodPost, "/signal/offer", strings.NewReader(body)) + offerRec := httptest.NewRecorder() + mux.ServeHTTP(offerRec, offerReq) + if offerRec.Code != http.StatusAccepted { + t.Fatalf("offer precondition status %d", offerRec.Code) + } + } + req := httptest.NewRequest(http.MethodPost, endpoint, strings.NewReader(body)) + rec := httptest.NewRecorder() + mux.ServeHTTP(rec, req) + + if rec.Code != http.StatusAccepted { + t.Fatalf("expected status %d, got %d", http.StatusAccepted, rec.Code) + } + }) + } +} + +func TestOfferAnswerFlow(t *testing.T) { + resetSignals() + mux := newMux() + + offer := `{"sessionId":"sess-1","sdp":"offer-sdp","fromPeer":"alice"}` + offerReq := httptest.NewRequest(http.MethodPost, "/signal/offer", bytes.NewBufferString(offer)) + offerRec := httptest.NewRecorder() + mux.ServeHTTP(offerRec, offerReq) + if offerRec.Code != http.StatusAccepted { + t.Fatalf("offer status = %d, want %d", offerRec.Code, http.StatusAccepted) + } + + answer := `{"sessionId":"sess-1","sdp":"answer-sdp","fromPeer":"bob"}` + answerReq := httptest.NewRequest(http.MethodPost, "/signal/answer", bytes.NewBufferString(answer)) + answerRec := httptest.NewRecorder() + mux.ServeHTTP(answerRec, answerReq) + if answerRec.Code != http.StatusAccepted { + t.Fatalf("answer status = %d, want %d", answerRec.Code, http.StatusAccepted) + } +} + +func TestAnswerWithoutOfferFails(t *testing.T) { + resetSignals() + mux := newMux() + + answer := `{"sessionId":"missing","sdp":"answer-sdp","fromPeer":"bob"}` + req := httptest.NewRequest(http.MethodPost, "/signal/answer", bytes.NewBufferString(answer)) + rec := httptest.NewRecorder() + mux.ServeHTTP(rec, req) + if rec.Code != http.StatusNotFound { + t.Fatalf("status = %d, want %d", rec.Code, http.StatusNotFound) + } +} + +func TestSessionPolling(t *testing.T) { + resetSignals() + mux := newMux() + + offer := `{"sessionId":"sess-poll","sdp":"offer-sdp","fromPeer":"alice"}` + offerReq := httptest.NewRequest(http.MethodPost, "/signal/offer", bytes.NewBufferString(offer)) + offerRec := httptest.NewRecorder() + mux.ServeHTTP(offerRec, offerReq) + if offerRec.Code != http.StatusAccepted { + t.Fatalf("offer status = %d, want %d", offerRec.Code, http.StatusAccepted) + } + + answer := `{"sessionId":"sess-poll","sdp":"answer-sdp","fromPeer":"bob"}` + answerReq := httptest.NewRequest(http.MethodPost, "/signal/answer", bytes.NewBufferString(answer)) + answerRec := httptest.NewRecorder() + mux.ServeHTTP(answerRec, answerReq) + if answerRec.Code != http.StatusAccepted { + t.Fatalf("answer status = %d, want %d", answerRec.Code, http.StatusAccepted) + } + + pollReq := httptest.NewRequest(http.MethodGet, "/signal/session/sess-poll", nil) + pollRec := httptest.NewRecorder() + mux.ServeHTTP(pollRec, pollReq) + if pollRec.Code != http.StatusOK { + t.Fatalf("poll status = %d, want %d", pollRec.Code, http.StatusOK) + } + + var resp sessionStateResponse + if err := json.NewDecoder(pollRec.Body).Decode(&resp); err != nil { + t.Fatalf("decode poll response: %v", err) + } + if !resp.HasOffer || !resp.HasAnswer { + t.Fatalf("expected offer+answer true, got %+v", resp) + } + if resp.OfferPeer != "alice" || resp.AnswerPeer != "bob" { + t.Fatalf("unexpected peers: %+v", resp) + } +} + +func TestSessionPollingErrors(t *testing.T) { + resetSignals() + mux := newMux() + + t.Run("method not allowed", func(t *testing.T) { + req := httptest.NewRequest(http.MethodPost, "/signal/session/s1", nil) + rec := httptest.NewRecorder() + mux.ServeHTTP(rec, req) + if rec.Code != http.StatusMethodNotAllowed { + t.Fatalf("status = %d, want %d", rec.Code, http.StatusMethodNotAllowed) + } + if allow := rec.Header().Get("Allow"); allow != "GET, DELETE" { + t.Fatalf("allow = %q, want %q", allow, "GET, DELETE") + } + }) + + t.Run("not found", func(t *testing.T) { + req := httptest.NewRequest(http.MethodGet, "/signal/session/none", nil) + rec := httptest.NewRecorder() + mux.ServeHTTP(rec, req) + if rec.Code != http.StatusNotFound { + t.Fatalf("status = %d, want %d", rec.Code, http.StatusNotFound) + } + }) +} + +func TestSessionDeleteLifecycle(t *testing.T) { + resetSignals() + mux := newMux() + + offer := `{"sessionId":"sess-del","sdp":"offer-sdp","fromPeer":"alice"}` + offerReq := httptest.NewRequest(http.MethodPost, "/signal/offer", bytes.NewBufferString(offer)) + offerRec := httptest.NewRecorder() + mux.ServeHTTP(offerRec, offerReq) + if offerRec.Code != http.StatusAccepted { + t.Fatalf("offer status = %d, want %d", offerRec.Code, http.StatusAccepted) + } + + delReq := httptest.NewRequest(http.MethodDelete, "/signal/session/sess-del", nil) + delRec := httptest.NewRecorder() + mux.ServeHTTP(delRec, delReq) + if delRec.Code != http.StatusNoContent { + t.Fatalf("delete status = %d, want %d", delRec.Code, http.StatusNoContent) + } + + getReq := httptest.NewRequest(http.MethodGet, "/signal/session/sess-del", nil) + getRec := httptest.NewRecorder() + mux.ServeHTTP(getRec, getReq) + if getRec.Code != http.StatusNotFound { + t.Fatalf("post-delete get status = %d, want %d", getRec.Code, http.StatusNotFound) + } + + delAgainReq := httptest.NewRequest(http.MethodDelete, "/signal/session/sess-del", nil) + delAgainRec := httptest.NewRecorder() + mux.ServeHTTP(delAgainRec, delAgainReq) + if delAgainRec.Code != http.StatusNotFound { + t.Fatalf("second delete status = %d, want %d", delAgainRec.Code, http.StatusNotFound) + } +} + +func TestSessionSdpEndpoint(t *testing.T) { + resetSignals() + mux := newMux() + + offer := `{"sessionId":"sess-sdp","sdp":"offer-sdp","fromPeer":"alice"}` + offerReq := httptest.NewRequest(http.MethodPost, "/signal/offer", bytes.NewBufferString(offer)) + offerRec := httptest.NewRecorder() + mux.ServeHTTP(offerRec, offerReq) + if offerRec.Code != http.StatusAccepted { + t.Fatalf("offer status = %d, want %d", offerRec.Code, http.StatusAccepted) + } + + answer := `{"sessionId":"sess-sdp","sdp":"answer-sdp","fromPeer":"bob"}` + answerReq := httptest.NewRequest(http.MethodPost, "/signal/answer", bytes.NewBufferString(answer)) + answerRec := httptest.NewRecorder() + mux.ServeHTTP(answerRec, answerReq) + if answerRec.Code != http.StatusAccepted { + t.Fatalf("answer status = %d, want %d", answerRec.Code, http.StatusAccepted) + } + + req := httptest.NewRequest(http.MethodGet, "/signal/sdp/sess-sdp", nil) + rec := httptest.NewRecorder() + mux.ServeHTTP(rec, req) + if rec.Code != http.StatusOK { + t.Fatalf("sdp status = %d, want %d", rec.Code, http.StatusOK) + } + + var resp sessionSdpResponse + if err := json.NewDecoder(rec.Body).Decode(&resp); err != nil { + t.Fatalf("decode sdp response: %v", err) + } + if resp.SessionID != "sess-sdp" { + t.Fatalf("sessionId = %q, want %q", resp.SessionID, "sess-sdp") + } + if resp.OfferSdp != "offer-sdp" || resp.AnswerSdp != "answer-sdp" { + t.Fatalf("unexpected sdp payloads: %+v", resp) + } +} + +func TestSessionExpiryViaCleanupEndpoint(t *testing.T) { + resetSignals() + sessionTTL = 1 * time.Second + now := time.Date(2026, 5, 7, 0, 0, 0, 0, time.UTC) + nowUTC = func() time.Time { return now } + mux := newMux() + + offer := `{"sessionId":"sess-expired","sdp":"offer-sdp","fromPeer":"alice"}` + offerReq := httptest.NewRequest(http.MethodPost, "/signal/offer", bytes.NewBufferString(offer)) + offerRec := httptest.NewRecorder() + mux.ServeHTTP(offerRec, offerReq) + if offerRec.Code != http.StatusAccepted { + t.Fatalf("offer status = %d, want %d", offerRec.Code, http.StatusAccepted) + } + + now = now.Add(2 * time.Second) + cleanupReq := httptest.NewRequest(http.MethodPost, "/signal/cleanup", nil) + cleanupRec := httptest.NewRecorder() + mux.ServeHTTP(cleanupRec, cleanupReq) + if cleanupRec.Code != http.StatusOK { + t.Fatalf("cleanup status = %d, want %d", cleanupRec.Code, http.StatusOK) + } + + var cleanupBody map[string]int + if err := json.NewDecoder(cleanupRec.Body).Decode(&cleanupBody); err != nil { + t.Fatalf("decode cleanup response: %v", err) + } + if cleanupBody["deletedSessions"] != 1 { + t.Fatalf("deletedSessions = %d, want 1", cleanupBody["deletedSessions"]) + } + + getReq := httptest.NewRequest(http.MethodGet, "/signal/session/sess-expired", nil) + getRec := httptest.NewRecorder() + mux.ServeHTTP(getRec, getReq) + if getRec.Code != http.StatusNotFound { + t.Fatalf("status = %d, want %d", getRec.Code, http.StatusNotFound) + } +} + +func TestCleanupEndpointMethodNotAllowed(t *testing.T) { + resetSignals() + mux := newMux() + + req := httptest.NewRequest(http.MethodGet, "/signal/cleanup", nil) + rec := httptest.NewRecorder() + mux.ServeHTTP(rec, req) + if rec.Code != http.StatusMethodNotAllowed { + t.Fatalf("status = %d, want %d", rec.Code, http.StatusMethodNotAllowed) + } + if allow := rec.Header().Get("Allow"); allow != http.MethodPost { + t.Fatalf("allow = %q, want %q", allow, http.MethodPost) + } +} + +func TestSessionSdpEndpointErrors(t *testing.T) { + resetSignals() + mux := newMux() + + t.Run("method not allowed", func(t *testing.T) { + req := httptest.NewRequest(http.MethodPost, "/signal/sdp/s1", nil) + rec := httptest.NewRecorder() + mux.ServeHTTP(rec, req) + if rec.Code != http.StatusMethodNotAllowed { + t.Fatalf("status = %d, want %d", rec.Code, http.StatusMethodNotAllowed) + } + if allow := rec.Header().Get("Allow"); allow != http.MethodGet { + t.Fatalf("allow = %q, want %q", allow, http.MethodGet) + } + }) + + t.Run("not found", func(t *testing.T) { + req := httptest.NewRequest(http.MethodGet, "/signal/sdp/none", nil) + rec := httptest.NewRecorder() + mux.ServeHTTP(rec, req) + if rec.Code != http.StatusNotFound { + t.Fatalf("status = %d, want %d", rec.Code, http.StatusNotFound) + } + }) + + t.Run("session exists but no sdp", func(t *testing.T) { + signalsMu.Lock() + signals["empty-sdp"] = signalRecord{} + signalsMu.Unlock() + + req := httptest.NewRequest(http.MethodGet, "/signal/sdp/empty-sdp", nil) + rec := httptest.NewRecorder() + mux.ServeHTTP(rec, req) + if rec.Code != http.StatusNotFound { + t.Fatalf("status = %d, want %d", rec.Code, http.StatusNotFound) + } + }) +} diff --git a/implementations/02-nearby-connections/nearby-card-drop/signaling-server/signaling-server b/implementations/02-nearby-connections/nearby-card-drop/signaling-server/signaling-server new file mode 100755 index 0000000..5f8de66 Binary files /dev/null and b/implementations/02-nearby-connections/nearby-card-drop/signaling-server/signaling-server differ diff --git a/implementations/03-animated-qr-visual-handshake/README.md b/implementations/03-animated-qr-visual-handshake/README.md new file mode 100644 index 0000000..d92e186 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/README.md @@ -0,0 +1,26 @@ +# Plan 03: Animated QR Visual Handshake + +Scaffold for the animated QR visual handshake implementation. + +## Structure + +- `fountain-core/`: Rust fountain codec crate with deterministic mixed-symbol repair decoding. +- `clients/ios-scanner/`: iOS scanner client notes. +- `clients/android-scanner/`: Android scanner client notes. +- `tools/qr-frame-generator/`: QR frame generation and payload parser notes. +- `tools/replay-benchmark/`: Replay benchmark tool notes. +- `docs/scanner-player-contract.md`: Lightweight scanner/player integration contract. + +## Progress + +Completed: +- Multi-symbol repair codec in `fountain-core` (deterministic LT-like mixed XOR symbols + peeling decoder). +- Decoder/test coverage for duplicate detection, incomplete sets, mixed metadata rejection, and multi-loss recovery. +- Scanner/player payload contract for frame-level integration. +- Sample payload parser utility for scanner-side ingestion validation. +- Replay benchmark expanded to recovery-rate sweeps across multiple drop percentages. + +Uncompleted: +- Runtime scanner clients (iOS/Android) direct decode integration wiring. +- Live animated playback loop integration with capture timing telemetry. +- End-to-end device-to-device runtime validation across mixed camera conditions. diff --git a/implementations/03-animated-qr-visual-handshake/clients/android-scanner/README.md b/implementations/03-animated-qr-visual-handshake/clients/android-scanner/README.md new file mode 100644 index 0000000..063d935 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/clients/android-scanner/README.md @@ -0,0 +1,8 @@ +# Android Scanner Client + +Placeholder scaffold for the Plan 03 Android scanner implementation. + +Planned responsibilities: +- Camera frame capture for animated QR sequences. +- Symbol extraction and ordering. +- Integration with `fountain-core` decode logic via JNI or equivalent. diff --git a/implementations/03-animated-qr-visual-handshake/clients/ios-scanner/README.md b/implementations/03-animated-qr-visual-handshake/clients/ios-scanner/README.md new file mode 100644 index 0000000..f778b03 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/clients/ios-scanner/README.md @@ -0,0 +1,8 @@ +# iOS Scanner Client + +Placeholder scaffold for the Plan 03 iOS scanner implementation. + +Planned responsibilities: +- Camera frame capture for animated QR sequences. +- Symbol extraction and ordering. +- Integration with `fountain-core` decode logic via FFI or equivalent. diff --git a/implementations/03-animated-qr-visual-handshake/docs/scanner-player-contract.md b/implementations/03-animated-qr-visual-handshake/docs/scanner-player-contract.md new file mode 100644 index 0000000..c588bdf --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/docs/scanner-player-contract.md @@ -0,0 +1,40 @@ +# Scanner/Player Integration Contract (v1) + +This contract defines the lightweight frame payload format and scanner behavior for animated QR playback. + +## Frame Payload Format + +Each QR frame carries one UTF-8 string: + +`xhv1::::::` + +Fields: +- `xhv1`: protocol/version marker. +- `transfer_id`: unsigned 64-bit decimal transfer identifier. +- `payload_len`: original payload byte length. +- `sequence`: symbol sequence number in `[0, total)`. +- `total`: total symbol count emitted by encoder. +- `neighbors_csv`: comma-separated source shard indices used to build this symbol. + - Data symbols: one value equal to `sequence` (example: `7`). + - Mixed repair symbols: multiple values (example: `0,3,5`). +- `chunk_b64`: standard Base64 payload bytes for the symbol. + +## Receiver Contract + +- Group symbols by `transfer_id`. +- Reject symbols with mixed `payload_len` or `total` inside the same transfer bucket. +- De-duplicate by `sequence`; conflicting duplicates are invalid. +- Decode once enough equations exist to recover all data symbols. +- On decode success, truncate to `payload_len` bytes. + +## Player Contract + +- Prefer repeating the full symbol loop at least 2-3 times. +- Maintain stable ordering by ascending `sequence` for deterministic scanner behavior. +- Keep frame dwell time stable (for example 60-120 ms) to reduce capture jitter. + +## Error Handling + +- Invalid format or parse failure: drop frame. +- Conflicting duplicates: discard transfer. +- Decode timeout (implementation-defined): surface retry prompt to user. diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/Cargo.lock b/implementations/03-animated-qr-visual-handshake/fountain-core/Cargo.lock new file mode 100644 index 0000000..7179c2b --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "fountain-core" +version = "0.1.0" diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/Cargo.toml b/implementations/03-animated-qr-visual-handshake/fountain-core/Cargo.toml new file mode 100644 index 0000000..6346b11 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "fountain-core" +version = "0.1.0" +edition = "2021" + +[lib] +name = "fountain_core" +path = "src/lib.rs" + +[dependencies] diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/src/decoder.rs b/implementations/03-animated-qr-visual-handshake/fountain-core/src/decoder.rs new file mode 100644 index 0000000..985cd08 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/src/decoder.rs @@ -0,0 +1,191 @@ +use crate::symbol::Symbol; +use std::collections::{BTreeMap, BTreeSet}; + +#[derive(Clone)] +struct Equation { + vars: BTreeSet, + mixed: Vec, +} + +pub fn decode(symbols: &[Symbol]) -> Result, &'static str> { + if symbols.is_empty() { + return Ok(Vec::new()); + } + + let first = &symbols[0]; + let expected_total = first.total; + if expected_total == 0 { + return Err("invalid total count"); + } + + let transfer_id = first.transfer_id; + let payload_len = first.payload_len; + + let mut unique: BTreeMap = BTreeMap::new(); + for symbol in symbols { + validate_symbol_shape(symbol, expected_total, transfer_id, payload_len)?; + + if let Some(existing) = unique.get(&symbol.sequence) { + if existing.data != symbol.data || existing.neighbors != symbol.neighbors { + return Err("conflicting duplicate symbol"); + } + continue; + } + unique.insert(symbol.sequence, symbol); + } + + let data_total = infer_data_total(expected_total, unique.values().copied())?; + if data_total == 0 { + return Ok(Vec::new()); + } + + let frame_size = unique + .values() + .next() + .map(|s| s.data.len()) + .ok_or("incomplete symbol set")?; + + let mut resolved: Vec>> = vec![None; data_total as usize]; + let mut equations: Vec = Vec::new(); + + for symbol in unique.values().copied() { + if symbol.neighbors.is_empty() { + return Err("invalid neighbors"); + } + if symbol.data.len() != frame_size { + return Err("inconsistent symbol size"); + } + for &n in &symbol.neighbors { + if n >= data_total { + return Err("invalid neighbors"); + } + } + + if symbol.neighbors.len() == 1 { + let idx = symbol.neighbors[0] as usize; + insert_or_check(&mut resolved[idx], symbol.data.clone())?; + continue; + } + + equations.push(Equation { + vars: symbol.neighbors.iter().copied().collect(), + mixed: symbol.data.clone(), + }); + } + + peel_decode(&mut resolved, &mut equations, frame_size)?; + + if resolved.iter().any(Option::is_none) { + return Err("incomplete symbol set"); + } + + let mut output = Vec::with_capacity((data_total as usize) * frame_size); + for chunk in resolved { + output.extend_from_slice(chunk.as_ref().ok_or("incomplete symbol set")?); + } + + if output.len() < payload_len { + return Err("payload length mismatch"); + } + output.truncate(payload_len); + Ok(output) +} + +fn validate_symbol_shape( + symbol: &Symbol, + expected_total: u32, + transfer_id: u64, + payload_len: usize, +) -> Result<(), &'static str> { + if symbol.total != expected_total { + return Err("inconsistent total count"); + } + if symbol.transfer_id != transfer_id { + return Err("mixed transfer ids"); + } + if symbol.payload_len != payload_len { + return Err("mixed payload lengths"); + } + if symbol.sequence >= expected_total { + return Err("invalid sequence"); + } + Ok(()) +} + +fn infer_data_total<'a>(expected_total: u32, symbols: impl Iterator) -> Result { + let mut max_neighbor: Option = None; + for symbol in symbols { + for &n in &symbol.neighbors { + max_neighbor = Some(max_neighbor.map_or(n, |m| m.max(n))); + } + } + + let max_data_seq = max_neighbor.ok_or("incomplete symbol set")?; + let data_total = max_data_seq + 1; + if data_total > expected_total { + return Err("invalid total count"); + } + Ok(data_total) +} + +fn insert_or_check(slot: &mut Option>, chunk: Vec) -> Result<(), &'static str> { + if let Some(existing) = slot { + if existing != &chunk { + return Err("conflicting duplicate symbol"); + } + return Ok(()); + } + *slot = Some(chunk); + Ok(()) +} + +fn peel_decode( + resolved: &mut [Option>], + equations: &mut [Equation], + frame_size: usize, +) -> Result<(), &'static str> { + let mut changed = true; + while changed { + changed = false; + + for eq in equations.iter_mut() { + let known: Vec = eq + .vars + .iter() + .copied() + .filter(|idx| resolved[*idx as usize].is_some()) + .collect(); + + for idx in known { + if let Some(chunk) = &resolved[idx as usize] { + xor_into(&mut eq.mixed, chunk); + eq.vars.remove(&idx); + } + } + + if eq.vars.is_empty() { + if eq.mixed.iter().any(|b| *b != 0) { + return Err("conflicting duplicate symbol"); + } + continue; + } + + if eq.vars.len() == 1 { + let idx = *eq.vars.iter().next().ok_or("incomplete symbol set")?; + let slot = &mut resolved[idx as usize]; + insert_or_check(slot, eq.mixed.clone())?; + eq.vars.clear(); + eq.mixed = vec![0u8; frame_size]; + changed = true; + } + } + } + + Ok(()) +} + +fn xor_into(target: &mut [u8], src: &[u8]) { + for (dst, b) in target.iter_mut().zip(src.iter()) { + *dst ^= *b; + } +} diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/src/encoder.rs b/implementations/03-animated-qr-visual-handshake/fountain-core/src/encoder.rs new file mode 100644 index 0000000..9886eff --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/src/encoder.rs @@ -0,0 +1,111 @@ +use crate::symbol::Symbol; + +pub fn encode(payload: &[u8], frame_size: usize) -> Vec { + if frame_size == 0 { + return Vec::new(); + } + + let data_total = payload.len().div_ceil(frame_size) as u32; + if data_total == 0 { + return Vec::new(); + } + + let repair_total = repair_symbol_count(data_total); + let total = data_total + repair_total; + let transfer_id = transfer_id_for(payload); + let payload_len = payload.len(); + + let data_chunks = chunk_with_padding(payload, frame_size); + + let mut symbols: Vec = data_chunks + .iter() + .enumerate() + .map(|(index, chunk)| { + Symbol::new( + transfer_id, + payload_len, + index as u32, + total, + vec![index as u32], + chunk.clone(), + ) + }) + .collect(); + + for repair_seq in 0..repair_total { + let sequence = data_total + repair_seq; + let neighbors = choose_neighbors(transfer_id, data_total, repair_seq); + let mut mixed = vec![0u8; frame_size]; + for &idx in &neighbors { + xor_into(&mut mixed, &data_chunks[idx as usize]); + } + symbols.push(Symbol::new( + transfer_id, + payload_len, + sequence, + total, + neighbors, + mixed, + )); + } + + symbols +} + +fn repair_symbol_count(data_total: u32) -> u32 { + // Light overhead with better-than-single-parity recovery odds. + data_total.clamp(2, 8) +} + +fn transfer_id_for(payload: &[u8]) -> u64 { + let mut hash: u64 = 1469598103934665603; + for &b in payload { + hash ^= b as u64; + hash = hash.wrapping_mul(1099511628211); + } + hash +} + +fn chunk_with_padding(payload: &[u8], frame_size: usize) -> Vec> { + payload + .chunks(frame_size) + .map(|chunk| { + let mut out = vec![0u8; frame_size]; + out[..chunk.len()].copy_from_slice(chunk); + out + }) + .collect() +} + +fn choose_neighbors(transfer_id: u64, data_total: u32, repair_seq: u32) -> Vec { + if data_total == 1 { + return vec![0]; + } + + let mut state = transfer_id ^ ((repair_seq as u64).wrapping_mul(0x9E37_79B9_7F4A_7C15)); + let max_degree = data_total.min(4); + let degree = 2 + (next_u32(&mut state) % (max_degree - 1)); + + let mut chosen = Vec::with_capacity(degree as usize); + while chosen.len() < degree as usize { + let candidate = next_u32(&mut state) % data_total; + if !chosen.contains(&candidate) { + chosen.push(candidate); + } + } + chosen.sort_unstable(); + chosen +} + +fn next_u32(state: &mut u64) -> u32 { + *state ^= *state >> 12; + *state ^= *state << 25; + *state ^= *state >> 27; + ((*state).wrapping_mul(2685821657736338717) >> 32) as u32 +} + +fn xor_into(target: &mut [u8], src: &[u8]) { + for (dst, b) in target.iter_mut().zip(src.iter()) { + *dst ^= *b; + } +} diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/src/lib.rs b/implementations/03-animated-qr-visual-handshake/fountain-core/src/lib.rs new file mode 100644 index 0000000..9adfb52 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/src/lib.rs @@ -0,0 +1,113 @@ +pub mod decoder; +pub mod encoder; +pub mod symbol; + +#[cfg(test)] +mod tests { + use crate::decoder::decode; + use crate::encoder::encode; + use crate::symbol::Symbol; + + #[test] + fn roundtrip_encode_decode() { + let payload = b"visual-handshake"; + let symbols = encode(payload, 6); + let decoded = decode(&symbols).expect("decode should succeed"); + assert_eq!(decoded, payload); + } + + #[test] + fn decode_recovers_multiple_missing_symbols_with_mixed_repair() { + let payload = b"visual-handshake-runtime-integration"; + let mut symbols = encode(payload, 4); + symbols.retain(|s| s.sequence != 1 && s.sequence != 3); + let decoded = decode(&symbols).expect("decode should recover"); + assert_eq!(decoded, payload); + } + + #[test] + fn decode_rejects_incomplete_symbol_set() { + let payload = b"visual-handshake"; + let mut symbols = encode(payload, 4); + symbols.retain(|s| s.sequence >= 4); + let err = decode(&symbols).expect_err("decode should fail"); + assert_eq!(err, "incomplete symbol set"); + } + + #[test] + fn decode_rejects_mixed_transfer_ids() { + let symbols = vec![ + Symbol::new(1, 10, 0, 3, vec![0], b"hello".to_vec()), + Symbol::new(2, 10, 1, 3, vec![1], b"world".to_vec()), + ]; + let err = decode(&symbols).expect_err("decode should fail"); + assert_eq!(err, "mixed transfer ids"); + } + + #[test] + fn decode_accepts_out_of_order_symbols() { + let symbols = vec![ + Symbol::new(7, 3, 2, 3, vec![2], b"c".to_vec()), + Symbol::new(7, 3, 0, 3, vec![0], b"a".to_vec()), + Symbol::new(7, 3, 1, 3, vec![1], b"b".to_vec()), + ]; + let decoded = decode(&symbols).expect("decode should succeed"); + assert_eq!(decoded, b"abc"); + } + + #[test] + fn decode_accepts_identical_duplicate_symbols() { + let symbols = vec![ + Symbol::new(9, 6, 0, 3, vec![0], b"foo".to_vec()), + Symbol::new(9, 6, 0, 3, vec![0], b"foo".to_vec()), + Symbol::new(9, 6, 1, 3, vec![1], b"bar".to_vec()), + ]; + let decoded = decode(&symbols).expect("decode should succeed"); + assert_eq!(decoded, b"foobar"); + } + + #[test] + fn decode_rejects_conflicting_duplicate_symbols() { + let symbols = vec![ + Symbol::new(11, 6, 0, 3, vec![0], b"foo".to_vec()), + Symbol::new(11, 6, 0, 3, vec![0], b"zzz".to_vec()), + Symbol::new(11, 6, 1, 3, vec![1], b"bar".to_vec()), + ]; + let err = decode(&symbols).expect_err("decode should fail"); + assert_eq!(err, "conflicting duplicate symbol"); + } + + #[test] + fn decode_rejects_mixed_payload_lengths() { + let symbols = vec![ + Symbol::new(21, 6, 0, 3, vec![0], b"foo".to_vec()), + Symbol::new(21, 7, 1, 3, vec![1], b"bar".to_vec()), + ]; + let err = decode(&symbols).expect_err("decode should fail"); + assert_eq!(err, "mixed payload lengths"); + } + + #[test] + fn decode_rejects_invalid_total_count_zero() { + let symbols = vec![Symbol::new(31, 3, 0, 0, vec![0], b"abc".to_vec())]; + let err = decode(&symbols).expect_err("decode should fail"); + assert_eq!(err, "invalid total count"); + } + + #[test] + fn decode_preserves_trailing_zero_bytes_with_complete_set() { + let payload = vec![0x51, 0x52, 0x53, 0x00, 0x00]; + let symbols = encode(&payload, 4); + let decoded = decode(&symbols).expect("decode should succeed"); + assert_eq!(decoded, payload); + } + + #[test] + fn decode_preserves_trailing_zero_bytes_when_recovering_missing_chunks() { + let payload = vec![0x41, 0x42, 0x43, 0x44, 0x00, 0x00, 0x00, 0x00]; + let mut symbols = encode(&payload, 4); + symbols.retain(|s| s.sequence != 1); + let decoded = decode(&symbols).expect("decode should recover"); + assert_eq!(decoded, payload); + } +} diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/src/symbol.rs b/implementations/03-animated-qr-visual-handshake/fountain-core/src/symbol.rs new file mode 100644 index 0000000..87d23b4 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/src/symbol.rs @@ -0,0 +1,29 @@ +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Symbol { + pub transfer_id: u64, + pub payload_len: usize, + pub sequence: u32, + pub total: u32, + pub neighbors: Vec, + pub data: Vec, +} + +impl Symbol { + pub fn new( + transfer_id: u64, + payload_len: usize, + sequence: u32, + total: u32, + neighbors: Vec, + data: Vec, + ) -> Self { + Self { + transfer_id, + payload_len, + sequence, + total, + neighbors, + data, + } + } +} diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/.rustc_info.json b/implementations/03-animated-qr-visual-handshake/fountain-core/target/.rustc_info.json new file mode 100644 index 0000000..089c4b9 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/target/.rustc_info.json @@ -0,0 +1 @@ +{"rustc_fingerprint":18012616535324830850,"outputs":{"7971740275564407648":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n/Users/dennis_leedennis_lee/.rustup/toolchains/stable-aarch64-apple-darwin\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"aarch64\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_feature=\"aes\"\ntarget_feature=\"crc\"\ntarget_feature=\"dit\"\ntarget_feature=\"dotprod\"\ntarget_feature=\"dpb\"\ntarget_feature=\"dpb2\"\ntarget_feature=\"fcma\"\ntarget_feature=\"fhm\"\ntarget_feature=\"flagm\"\ntarget_feature=\"fp16\"\ntarget_feature=\"frintts\"\ntarget_feature=\"jsconv\"\ntarget_feature=\"lor\"\ntarget_feature=\"lse\"\ntarget_feature=\"neon\"\ntarget_feature=\"paca\"\ntarget_feature=\"pacg\"\ntarget_feature=\"pan\"\ntarget_feature=\"pmuv3\"\ntarget_feature=\"ras\"\ntarget_feature=\"rcpc\"\ntarget_feature=\"rcpc2\"\ntarget_feature=\"rdm\"\ntarget_feature=\"sb\"\ntarget_feature=\"sha2\"\ntarget_feature=\"sha3\"\ntarget_feature=\"ssbs\"\ntarget_feature=\"vh\"\ntarget_has_atomic=\"128\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"macos\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"apple\"\nunix\n","stderr":""},"17747080675513052775":{"success":true,"status":"","code":0,"stdout":"rustc 1.92.0 (ded5c06cf 2025-12-08)\nbinary: rustc\ncommit-hash: ded5c06cf21d2b93bffd5d884aa6e96934ee4234\ncommit-date: 2025-12-08\nhost: aarch64-apple-darwin\nrelease: 1.92.0\nLLVM version: 21.1.3\n","stderr":""}},"successes":{}} \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/CACHEDIR.TAG b/implementations/03-animated-qr-visual-handshake/fountain-core/target/CACHEDIR.TAG new file mode 100644 index 0000000..20d7c31 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/target/CACHEDIR.TAG @@ -0,0 +1,3 @@ +Signature: 8a477f597d28d172789f06886806bc55 +# This file is a cache directory tag created by cargo. +# For information about cache directory tags see https://bford.info/cachedir/ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.cargo-lock b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.cargo-lock new file mode 100644 index 0000000..e69de29 diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-1148e22e56624882/dep-lib-fountain_core b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-1148e22e56624882/dep-lib-fountain_core new file mode 100644 index 0000000..6b38a12 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-1148e22e56624882/dep-lib-fountain_core differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-1148e22e56624882/invoked.timestamp b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-1148e22e56624882/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-1148e22e56624882/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-1148e22e56624882/lib-fountain_core b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-1148e22e56624882/lib-fountain_core new file mode 100644 index 0000000..9254d24 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-1148e22e56624882/lib-fountain_core @@ -0,0 +1 @@ +ae45bfa0f7284020 \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-1148e22e56624882/lib-fountain_core.json b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-1148e22e56624882/lib-fountain_core.json new file mode 100644 index 0000000..90360c9 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-1148e22e56624882/lib-fountain_core.json @@ -0,0 +1 @@ +{"rustc":18415816196306954164,"features":"[]","declared_features":"[]","target":17725555670775808738,"profile":6675295047989516842,"path":10763286916239946207,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/fountain-core-1148e22e56624882/dep-lib-fountain_core","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0} \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-438db3615535319f/dep-test-lib-fountain_core b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-438db3615535319f/dep-test-lib-fountain_core new file mode 100644 index 0000000..f71b1ec Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-438db3615535319f/dep-test-lib-fountain_core differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-438db3615535319f/invoked.timestamp b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-438db3615535319f/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-438db3615535319f/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-438db3615535319f/test-lib-fountain_core b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-438db3615535319f/test-lib-fountain_core new file mode 100644 index 0000000..576994e --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-438db3615535319f/test-lib-fountain_core @@ -0,0 +1 @@ +40b622e23ad4d52b \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-438db3615535319f/test-lib-fountain_core.json b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-438db3615535319f/test-lib-fountain_core.json new file mode 100644 index 0000000..3b42e64 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-438db3615535319f/test-lib-fountain_core.json @@ -0,0 +1 @@ +{"rustc":18415816196306954164,"features":"[]","declared_features":"[]","target":17725555670775808738,"profile":15057526963834790232,"path":10763286916239946207,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/fountain-core-438db3615535319f/dep-test-lib-fountain_core","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0} \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-8f5b793c941efed9/dep-lib-fountain_core b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-8f5b793c941efed9/dep-lib-fountain_core new file mode 100644 index 0000000..193a57e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-8f5b793c941efed9/dep-lib-fountain_core differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-8f5b793c941efed9/invoked.timestamp b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-8f5b793c941efed9/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-8f5b793c941efed9/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-8f5b793c941efed9/lib-fountain_core b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-8f5b793c941efed9/lib-fountain_core new file mode 100644 index 0000000..9b32e72 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-8f5b793c941efed9/lib-fountain_core @@ -0,0 +1 @@ +3bbf4d201494295e \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-8f5b793c941efed9/lib-fountain_core.json b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-8f5b793c941efed9/lib-fountain_core.json new file mode 100644 index 0000000..1bb9af9 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/.fingerprint/fountain-core-8f5b793c941efed9/lib-fountain_core.json @@ -0,0 +1 @@ +{"rustc":18415816196306954164,"features":"[]","declared_features":"[]","target":17725555670775808738,"profile":2330448797067240312,"path":10763286916239946207,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/fountain-core-8f5b793c941efed9/dep-lib-fountain_core","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0} \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0bj604k5pebxvidfom55xtqfs.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0bj604k5pebxvidfom55xtqfs.01yfk63.rcgu.o new file mode 100644 index 0000000..a151b18 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0bj604k5pebxvidfom55xtqfs.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0bj604k5pebxvidfom55xtqfs.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0bj604k5pebxvidfom55xtqfs.0baakfy.rcgu.o new file mode 100644 index 0000000..9a0415e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0bj604k5pebxvidfom55xtqfs.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0bj604k5pebxvidfom55xtqfs.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0bj604k5pebxvidfom55xtqfs.0j1t5jb.rcgu.o new file mode 100644 index 0000000..e3ea395 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0bj604k5pebxvidfom55xtqfs.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0bj604k5pebxvidfom55xtqfs.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0bj604k5pebxvidfom55xtqfs.1a53wod.rcgu.o new file mode 100644 index 0000000..0a3f5da Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0bj604k5pebxvidfom55xtqfs.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0bj604k5pebxvidfom55xtqfs.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0bj604k5pebxvidfom55xtqfs.1wqhz7j.rcgu.o new file mode 100644 index 0000000..0a3f5da Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0bj604k5pebxvidfom55xtqfs.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0z3mbo3a46f9k1qcx837y0pth.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0z3mbo3a46f9k1qcx837y0pth.01yfk63.rcgu.o new file mode 100644 index 0000000..553f0c2 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0z3mbo3a46f9k1qcx837y0pth.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0z3mbo3a46f9k1qcx837y0pth.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0z3mbo3a46f9k1qcx837y0pth.0baakfy.rcgu.o new file mode 100644 index 0000000..948784d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0z3mbo3a46f9k1qcx837y0pth.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0z3mbo3a46f9k1qcx837y0pth.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0z3mbo3a46f9k1qcx837y0pth.0j1t5jb.rcgu.o new file mode 100644 index 0000000..c8ba3c9 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0z3mbo3a46f9k1qcx837y0pth.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0z3mbo3a46f9k1qcx837y0pth.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0z3mbo3a46f9k1qcx837y0pth.1a53wod.rcgu.o new file mode 100644 index 0000000..948784d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0z3mbo3a46f9k1qcx837y0pth.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0z3mbo3a46f9k1qcx837y0pth.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0z3mbo3a46f9k1qcx837y0pth.1wqhz7j.rcgu.o new file mode 100644 index 0000000..948784d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.0z3mbo3a46f9k1qcx837y0pth.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.10psaeoekhlrbhyvljymvx2zj.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.10psaeoekhlrbhyvljymvx2zj.01yfk63.rcgu.o new file mode 100644 index 0000000..2e2783a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.10psaeoekhlrbhyvljymvx2zj.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.10psaeoekhlrbhyvljymvx2zj.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.10psaeoekhlrbhyvljymvx2zj.0baakfy.rcgu.o new file mode 100644 index 0000000..50d7de4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.10psaeoekhlrbhyvljymvx2zj.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.10psaeoekhlrbhyvljymvx2zj.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.10psaeoekhlrbhyvljymvx2zj.0j1t5jb.rcgu.o new file mode 100644 index 0000000..2af3608 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.10psaeoekhlrbhyvljymvx2zj.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.10psaeoekhlrbhyvljymvx2zj.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.10psaeoekhlrbhyvljymvx2zj.1a53wod.rcgu.o new file mode 100644 index 0000000..50d7de4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.10psaeoekhlrbhyvljymvx2zj.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.10psaeoekhlrbhyvljymvx2zj.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.10psaeoekhlrbhyvljymvx2zj.1wqhz7j.rcgu.o new file mode 100644 index 0000000..50d7de4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.10psaeoekhlrbhyvljymvx2zj.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.11ut3szt7jb2abax7eweswdv5.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.11ut3szt7jb2abax7eweswdv5.01yfk63.rcgu.o new file mode 100644 index 0000000..c44780e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.11ut3szt7jb2abax7eweswdv5.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.11ut3szt7jb2abax7eweswdv5.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.11ut3szt7jb2abax7eweswdv5.0baakfy.rcgu.o new file mode 100644 index 0000000..5223f76 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.11ut3szt7jb2abax7eweswdv5.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.11ut3szt7jb2abax7eweswdv5.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.11ut3szt7jb2abax7eweswdv5.0j1t5jb.rcgu.o new file mode 100644 index 0000000..5223f76 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.11ut3szt7jb2abax7eweswdv5.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.11ut3szt7jb2abax7eweswdv5.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.11ut3szt7jb2abax7eweswdv5.1a53wod.rcgu.o new file mode 100644 index 0000000..5223f76 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.11ut3szt7jb2abax7eweswdv5.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.11ut3szt7jb2abax7eweswdv5.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.11ut3szt7jb2abax7eweswdv5.1wqhz7j.rcgu.o new file mode 100644 index 0000000..5223f76 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.11ut3szt7jb2abax7eweswdv5.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.155j07efdvo2bpi84ixmfat5s.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.155j07efdvo2bpi84ixmfat5s.0baakfy.rcgu.o new file mode 100644 index 0000000..91ffaf8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.155j07efdvo2bpi84ixmfat5s.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.155j07efdvo2bpi84ixmfat5s.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.155j07efdvo2bpi84ixmfat5s.0j1t5jb.rcgu.o new file mode 100644 index 0000000..6e9f2c8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.155j07efdvo2bpi84ixmfat5s.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1e4yu42zrpmhocx0bkxd2fg9i.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1e4yu42zrpmhocx0bkxd2fg9i.01yfk63.rcgu.o new file mode 100644 index 0000000..cfcdf6f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1e4yu42zrpmhocx0bkxd2fg9i.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1qmyh1zxvhc3tcxuk0qf03uut.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1qmyh1zxvhc3tcxuk0qf03uut.0baakfy.rcgu.o new file mode 100644 index 0000000..c10abf3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1qmyh1zxvhc3tcxuk0qf03uut.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1qmyh1zxvhc3tcxuk0qf03uut.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1qmyh1zxvhc3tcxuk0qf03uut.0j1t5jb.rcgu.o new file mode 100644 index 0000000..e730ccd Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1qmyh1zxvhc3tcxuk0qf03uut.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1qmyh1zxvhc3tcxuk0qf03uut.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1qmyh1zxvhc3tcxuk0qf03uut.1a53wod.rcgu.o new file mode 100644 index 0000000..076f3d8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1qmyh1zxvhc3tcxuk0qf03uut.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1qmyh1zxvhc3tcxuk0qf03uut.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1qmyh1zxvhc3tcxuk0qf03uut.1wqhz7j.rcgu.o new file mode 100644 index 0000000..076f3d8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1qmyh1zxvhc3tcxuk0qf03uut.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1u6xaezdj078ytxkrumqqhr3l.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1u6xaezdj078ytxkrumqqhr3l.0baakfy.rcgu.o new file mode 100644 index 0000000..830a077 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1u6xaezdj078ytxkrumqqhr3l.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1u6xaezdj078ytxkrumqqhr3l.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1u6xaezdj078ytxkrumqqhr3l.0j1t5jb.rcgu.o new file mode 100644 index 0000000..1772dcb Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.1u6xaezdj078ytxkrumqqhr3l.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.27eazutm8dsill9s9vg6gevuk.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.27eazutm8dsill9s9vg6gevuk.01yfk63.rcgu.o new file mode 100644 index 0000000..8cda9cd Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.27eazutm8dsill9s9vg6gevuk.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.27eazutm8dsill9s9vg6gevuk.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.27eazutm8dsill9s9vg6gevuk.0baakfy.rcgu.o new file mode 100644 index 0000000..8cda9cd Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.27eazutm8dsill9s9vg6gevuk.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.27eazutm8dsill9s9vg6gevuk.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.27eazutm8dsill9s9vg6gevuk.0j1t5jb.rcgu.o new file mode 100644 index 0000000..8cda9cd Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.27eazutm8dsill9s9vg6gevuk.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.27eazutm8dsill9s9vg6gevuk.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.27eazutm8dsill9s9vg6gevuk.1a53wod.rcgu.o new file mode 100644 index 0000000..8cda9cd Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.27eazutm8dsill9s9vg6gevuk.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.27eazutm8dsill9s9vg6gevuk.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.27eazutm8dsill9s9vg6gevuk.1wqhz7j.rcgu.o new file mode 100644 index 0000000..8cda9cd Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.27eazutm8dsill9s9vg6gevuk.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2ftyjmsjyjwrstzah0a9hcs98.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2ftyjmsjyjwrstzah0a9hcs98.0baakfy.rcgu.o new file mode 100644 index 0000000..a1b41bb Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2ftyjmsjyjwrstzah0a9hcs98.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2ftyjmsjyjwrstzah0a9hcs98.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2ftyjmsjyjwrstzah0a9hcs98.0j1t5jb.rcgu.o new file mode 100644 index 0000000..f5607be Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2ftyjmsjyjwrstzah0a9hcs98.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2ftyjmsjyjwrstzah0a9hcs98.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2ftyjmsjyjwrstzah0a9hcs98.1a53wod.rcgu.o new file mode 100644 index 0000000..5c9e9ed Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2ftyjmsjyjwrstzah0a9hcs98.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2ftyjmsjyjwrstzah0a9hcs98.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2ftyjmsjyjwrstzah0a9hcs98.1wqhz7j.rcgu.o new file mode 100644 index 0000000..98e393f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2ftyjmsjyjwrstzah0a9hcs98.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2gma0i2brcjkjxka58aqmuvsq.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2gma0i2brcjkjxka58aqmuvsq.01yfk63.rcgu.o new file mode 100644 index 0000000..c1f2761 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2gma0i2brcjkjxka58aqmuvsq.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2x1x2bhpxv8b6t9o1iqzvkbsw.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2x1x2bhpxv8b6t9o1iqzvkbsw.0baakfy.rcgu.o new file mode 100644 index 0000000..2e3d9b4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2x1x2bhpxv8b6t9o1iqzvkbsw.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2x1x2bhpxv8b6t9o1iqzvkbsw.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2x1x2bhpxv8b6t9o1iqzvkbsw.0j1t5jb.rcgu.o new file mode 100644 index 0000000..caf076a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2x1x2bhpxv8b6t9o1iqzvkbsw.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2x1x2bhpxv8b6t9o1iqzvkbsw.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2x1x2bhpxv8b6t9o1iqzvkbsw.1a53wod.rcgu.o new file mode 100644 index 0000000..74b1b56 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2x1x2bhpxv8b6t9o1iqzvkbsw.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2x1x2bhpxv8b6t9o1iqzvkbsw.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2x1x2bhpxv8b6t9o1iqzvkbsw.1wqhz7j.rcgu.o new file mode 100644 index 0000000..74b1b56 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.2x1x2bhpxv8b6t9o1iqzvkbsw.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3499pk76rpujpkvmh97tdou56.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3499pk76rpujpkvmh97tdou56.01yfk63.rcgu.o new file mode 100644 index 0000000..be4356e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3499pk76rpujpkvmh97tdou56.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3499pk76rpujpkvmh97tdou56.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3499pk76rpujpkvmh97tdou56.0baakfy.rcgu.o new file mode 100644 index 0000000..1f8bba8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3499pk76rpujpkvmh97tdou56.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3499pk76rpujpkvmh97tdou56.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3499pk76rpujpkvmh97tdou56.0j1t5jb.rcgu.o new file mode 100644 index 0000000..8d37f40 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3499pk76rpujpkvmh97tdou56.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3499pk76rpujpkvmh97tdou56.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3499pk76rpujpkvmh97tdou56.1a53wod.rcgu.o new file mode 100644 index 0000000..280a4eb Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3499pk76rpujpkvmh97tdou56.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3499pk76rpujpkvmh97tdou56.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3499pk76rpujpkvmh97tdou56.1wqhz7j.rcgu.o new file mode 100644 index 0000000..280a4eb Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3499pk76rpujpkvmh97tdou56.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3nlc0qy2tu1qedbqboj95ckr3.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3nlc0qy2tu1qedbqboj95ckr3.01yfk63.rcgu.o new file mode 100644 index 0000000..318b642 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3nlc0qy2tu1qedbqboj95ckr3.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3nlc0qy2tu1qedbqboj95ckr3.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3nlc0qy2tu1qedbqboj95ckr3.0baakfy.rcgu.o new file mode 100644 index 0000000..b6c451c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3nlc0qy2tu1qedbqboj95ckr3.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3nlc0qy2tu1qedbqboj95ckr3.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3nlc0qy2tu1qedbqboj95ckr3.0j1t5jb.rcgu.o new file mode 100644 index 0000000..b879071 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3nlc0qy2tu1qedbqboj95ckr3.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3nlc0qy2tu1qedbqboj95ckr3.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3nlc0qy2tu1qedbqboj95ckr3.1a53wod.rcgu.o new file mode 100644 index 0000000..0c23e12 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3nlc0qy2tu1qedbqboj95ckr3.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3nlc0qy2tu1qedbqboj95ckr3.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3nlc0qy2tu1qedbqboj95ckr3.1wqhz7j.rcgu.o new file mode 100644 index 0000000..0c23e12 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.3nlc0qy2tu1qedbqboj95ckr3.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.686xpwzpo5inntdlxbki6r49g.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.686xpwzpo5inntdlxbki6r49g.01yfk63.rcgu.o new file mode 100644 index 0000000..a6d85b5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.686xpwzpo5inntdlxbki6r49g.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.686xpwzpo5inntdlxbki6r49g.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.686xpwzpo5inntdlxbki6r49g.0baakfy.rcgu.o new file mode 100644 index 0000000..6f7d867 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.686xpwzpo5inntdlxbki6r49g.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.686xpwzpo5inntdlxbki6r49g.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.686xpwzpo5inntdlxbki6r49g.0j1t5jb.rcgu.o new file mode 100644 index 0000000..6f7d867 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.686xpwzpo5inntdlxbki6r49g.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.686xpwzpo5inntdlxbki6r49g.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.686xpwzpo5inntdlxbki6r49g.1a53wod.rcgu.o new file mode 100644 index 0000000..6f7d867 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.686xpwzpo5inntdlxbki6r49g.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.686xpwzpo5inntdlxbki6r49g.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.686xpwzpo5inntdlxbki6r49g.1wqhz7j.rcgu.o new file mode 100644 index 0000000..6f7d867 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.686xpwzpo5inntdlxbki6r49g.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6f6failm58awfs2ntxft3g6h1.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6f6failm58awfs2ntxft3g6h1.01yfk63.rcgu.o new file mode 100644 index 0000000..dbad460 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6f6failm58awfs2ntxft3g6h1.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6f6failm58awfs2ntxft3g6h1.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6f6failm58awfs2ntxft3g6h1.0baakfy.rcgu.o new file mode 100644 index 0000000..9d6268b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6f6failm58awfs2ntxft3g6h1.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6f6failm58awfs2ntxft3g6h1.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6f6failm58awfs2ntxft3g6h1.0j1t5jb.rcgu.o new file mode 100644 index 0000000..1a342f4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6f6failm58awfs2ntxft3g6h1.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6ga5kgucl98u82g7jha0s9vqj.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6ga5kgucl98u82g7jha0s9vqj.01yfk63.rcgu.o new file mode 100644 index 0000000..4d85ea6 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6ga5kgucl98u82g7jha0s9vqj.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6ga5kgucl98u82g7jha0s9vqj.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6ga5kgucl98u82g7jha0s9vqj.0baakfy.rcgu.o new file mode 100644 index 0000000..4d85ea6 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6ga5kgucl98u82g7jha0s9vqj.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6ga5kgucl98u82g7jha0s9vqj.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6ga5kgucl98u82g7jha0s9vqj.0j1t5jb.rcgu.o new file mode 100644 index 0000000..4d85ea6 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6ga5kgucl98u82g7jha0s9vqj.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6ga5kgucl98u82g7jha0s9vqj.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6ga5kgucl98u82g7jha0s9vqj.1a53wod.rcgu.o new file mode 100644 index 0000000..dffbcff Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6ga5kgucl98u82g7jha0s9vqj.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6ga5kgucl98u82g7jha0s9vqj.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6ga5kgucl98u82g7jha0s9vqj.1wqhz7j.rcgu.o new file mode 100644 index 0000000..dffbcff Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6ga5kgucl98u82g7jha0s9vqj.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6s00s6gt05jsnl9qpq4isruuz.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6s00s6gt05jsnl9qpq4isruuz.01yfk63.rcgu.o new file mode 100644 index 0000000..4ae087d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6s00s6gt05jsnl9qpq4isruuz.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6s00s6gt05jsnl9qpq4isruuz.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6s00s6gt05jsnl9qpq4isruuz.0baakfy.rcgu.o new file mode 100644 index 0000000..f2180ba Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6s00s6gt05jsnl9qpq4isruuz.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6s00s6gt05jsnl9qpq4isruuz.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6s00s6gt05jsnl9qpq4isruuz.0j1t5jb.rcgu.o new file mode 100644 index 0000000..8576d88 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6s00s6gt05jsnl9qpq4isruuz.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6s00s6gt05jsnl9qpq4isruuz.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6s00s6gt05jsnl9qpq4isruuz.1a53wod.rcgu.o new file mode 100644 index 0000000..ba3e5f7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6s00s6gt05jsnl9qpq4isruuz.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6s00s6gt05jsnl9qpq4isruuz.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6s00s6gt05jsnl9qpq4isruuz.1wqhz7j.rcgu.o new file mode 100644 index 0000000..ba3e5f7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.6s00s6gt05jsnl9qpq4isruuz.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7262unamdoztvcznd8brj781z.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7262unamdoztvcznd8brj781z.01yfk63.rcgu.o new file mode 100644 index 0000000..23dd336 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7262unamdoztvcznd8brj781z.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7262unamdoztvcznd8brj781z.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7262unamdoztvcznd8brj781z.0baakfy.rcgu.o new file mode 100644 index 0000000..819f99a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7262unamdoztvcznd8brj781z.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7262unamdoztvcznd8brj781z.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7262unamdoztvcznd8brj781z.0j1t5jb.rcgu.o new file mode 100644 index 0000000..819f99a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7262unamdoztvcznd8brj781z.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7262unamdoztvcznd8brj781z.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7262unamdoztvcznd8brj781z.1a53wod.rcgu.o new file mode 100644 index 0000000..819f99a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7262unamdoztvcznd8brj781z.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7262unamdoztvcznd8brj781z.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7262unamdoztvcznd8brj781z.1wqhz7j.rcgu.o new file mode 100644 index 0000000..819f99a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7262unamdoztvcznd8brj781z.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.75zoueb06xyw9c82uzo02v5mn.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.75zoueb06xyw9c82uzo02v5mn.01yfk63.rcgu.o new file mode 100644 index 0000000..2ef188e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.75zoueb06xyw9c82uzo02v5mn.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.75zoueb06xyw9c82uzo02v5mn.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.75zoueb06xyw9c82uzo02v5mn.0baakfy.rcgu.o new file mode 100644 index 0000000..993d5fa Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.75zoueb06xyw9c82uzo02v5mn.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.75zoueb06xyw9c82uzo02v5mn.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.75zoueb06xyw9c82uzo02v5mn.0j1t5jb.rcgu.o new file mode 100644 index 0000000..809bcf3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.75zoueb06xyw9c82uzo02v5mn.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.75zoueb06xyw9c82uzo02v5mn.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.75zoueb06xyw9c82uzo02v5mn.1a53wod.rcgu.o new file mode 100644 index 0000000..73a1d2f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.75zoueb06xyw9c82uzo02v5mn.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.75zoueb06xyw9c82uzo02v5mn.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.75zoueb06xyw9c82uzo02v5mn.1wqhz7j.rcgu.o new file mode 100644 index 0000000..73a1d2f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.75zoueb06xyw9c82uzo02v5mn.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.77ql0g0gf5n4vn1eqkiwamnyz.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.77ql0g0gf5n4vn1eqkiwamnyz.01yfk63.rcgu.o new file mode 100644 index 0000000..6267fe0 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.77ql0g0gf5n4vn1eqkiwamnyz.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.77sdxm1yjcka7vupdg63x65ax.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.77sdxm1yjcka7vupdg63x65ax.0baakfy.rcgu.o new file mode 100644 index 0000000..bc9bb75 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.77sdxm1yjcka7vupdg63x65ax.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.77sdxm1yjcka7vupdg63x65ax.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.77sdxm1yjcka7vupdg63x65ax.0j1t5jb.rcgu.o new file mode 100644 index 0000000..bc9bb75 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.77sdxm1yjcka7vupdg63x65ax.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.78zpuuqa2wqpkruy7cgvu6vyh.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.78zpuuqa2wqpkruy7cgvu6vyh.0baakfy.rcgu.o new file mode 100644 index 0000000..3e58b5f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.78zpuuqa2wqpkruy7cgvu6vyh.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.78zpuuqa2wqpkruy7cgvu6vyh.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.78zpuuqa2wqpkruy7cgvu6vyh.0j1t5jb.rcgu.o new file mode 100644 index 0000000..3e58b5f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.78zpuuqa2wqpkruy7cgvu6vyh.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.78zpuuqa2wqpkruy7cgvu6vyh.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.78zpuuqa2wqpkruy7cgvu6vyh.1wqhz7j.rcgu.o new file mode 100644 index 0000000..3e58b5f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.78zpuuqa2wqpkruy7cgvu6vyh.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.790as26ggb0rvbso1d6yn5d1e.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.790as26ggb0rvbso1d6yn5d1e.01yfk63.rcgu.o new file mode 100644 index 0000000..f8fe7b1 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.790as26ggb0rvbso1d6yn5d1e.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7b0x8ha2timby73j77vl9glhd.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7b0x8ha2timby73j77vl9glhd.0baakfy.rcgu.o new file mode 100644 index 0000000..0bcfe8c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7b0x8ha2timby73j77vl9glhd.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7b0x8ha2timby73j77vl9glhd.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7b0x8ha2timby73j77vl9glhd.0j1t5jb.rcgu.o new file mode 100644 index 0000000..5fb1abf Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7b0x8ha2timby73j77vl9glhd.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7b0x8ha2timby73j77vl9glhd.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7b0x8ha2timby73j77vl9glhd.1a53wod.rcgu.o new file mode 100644 index 0000000..c3e13b4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7b0x8ha2timby73j77vl9glhd.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7b0x8ha2timby73j77vl9glhd.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7b0x8ha2timby73j77vl9glhd.1wqhz7j.rcgu.o new file mode 100644 index 0000000..5a2e723 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7b0x8ha2timby73j77vl9glhd.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7c6i8wc28cl9z2n482m7jiy28.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7c6i8wc28cl9z2n482m7jiy28.0baakfy.rcgu.o new file mode 100644 index 0000000..584db0f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7c6i8wc28cl9z2n482m7jiy28.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7c6i8wc28cl9z2n482m7jiy28.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7c6i8wc28cl9z2n482m7jiy28.0j1t5jb.rcgu.o new file mode 100644 index 0000000..584db0f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7c6i8wc28cl9z2n482m7jiy28.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7c6i8wc28cl9z2n482m7jiy28.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7c6i8wc28cl9z2n482m7jiy28.1a53wod.rcgu.o new file mode 100644 index 0000000..584db0f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7c6i8wc28cl9z2n482m7jiy28.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7c6i8wc28cl9z2n482m7jiy28.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7c6i8wc28cl9z2n482m7jiy28.1wqhz7j.rcgu.o new file mode 100644 index 0000000..584db0f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7c6i8wc28cl9z2n482m7jiy28.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7i4vi0nzldgltwxgp62as8dcv.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7i4vi0nzldgltwxgp62as8dcv.01yfk63.rcgu.o new file mode 100644 index 0000000..b60b836 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.7i4vi0nzldgltwxgp62as8dcv.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.8wirdg9fm5dg58xdxlczaooms.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.8wirdg9fm5dg58xdxlczaooms.0baakfy.rcgu.o new file mode 100644 index 0000000..63575de Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.8wirdg9fm5dg58xdxlczaooms.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.8wirdg9fm5dg58xdxlczaooms.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.8wirdg9fm5dg58xdxlczaooms.0j1t5jb.rcgu.o new file mode 100644 index 0000000..63575de Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.8wirdg9fm5dg58xdxlczaooms.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.94w2rpll7vxf9chrbl3ucshw4.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.94w2rpll7vxf9chrbl3ucshw4.01yfk63.rcgu.o new file mode 100644 index 0000000..086984c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.94w2rpll7vxf9chrbl3ucshw4.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9d127iks1cjv6dyjqz9s0xt96.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9d127iks1cjv6dyjqz9s0xt96.01yfk63.rcgu.o new file mode 100644 index 0000000..ad3cf0b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9d127iks1cjv6dyjqz9s0xt96.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9j4v896aekziwx87u8n231zrt.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9j4v896aekziwx87u8n231zrt.01yfk63.rcgu.o new file mode 100644 index 0000000..b5ea658 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9j4v896aekziwx87u8n231zrt.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9smeu5yfbn0p1s5ls488xge4e.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9smeu5yfbn0p1s5ls488xge4e.01yfk63.rcgu.o new file mode 100644 index 0000000..94287ac Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9smeu5yfbn0p1s5ls488xge4e.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9smeu5yfbn0p1s5ls488xge4e.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9smeu5yfbn0p1s5ls488xge4e.0baakfy.rcgu.o new file mode 100644 index 0000000..f9af6b8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9smeu5yfbn0p1s5ls488xge4e.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9smeu5yfbn0p1s5ls488xge4e.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9smeu5yfbn0p1s5ls488xge4e.0j1t5jb.rcgu.o new file mode 100644 index 0000000..54614ff Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9smeu5yfbn0p1s5ls488xge4e.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9smeu5yfbn0p1s5ls488xge4e.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9smeu5yfbn0p1s5ls488xge4e.1a53wod.rcgu.o new file mode 100644 index 0000000..c16c34c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9smeu5yfbn0p1s5ls488xge4e.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9smeu5yfbn0p1s5ls488xge4e.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9smeu5yfbn0p1s5ls488xge4e.1wqhz7j.rcgu.o new file mode 100644 index 0000000..c16c34c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9smeu5yfbn0p1s5ls488xge4e.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9wvmuiuacja4cjwjybz1v2upo.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9wvmuiuacja4cjwjybz1v2upo.01yfk63.rcgu.o new file mode 100644 index 0000000..666c925 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9wvmuiuacja4cjwjybz1v2upo.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9wvmuiuacja4cjwjybz1v2upo.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9wvmuiuacja4cjwjybz1v2upo.0baakfy.rcgu.o new file mode 100644 index 0000000..0ad3e02 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9wvmuiuacja4cjwjybz1v2upo.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9wvmuiuacja4cjwjybz1v2upo.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9wvmuiuacja4cjwjybz1v2upo.0j1t5jb.rcgu.o new file mode 100644 index 0000000..39e2c9b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9wvmuiuacja4cjwjybz1v2upo.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9wvmuiuacja4cjwjybz1v2upo.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9wvmuiuacja4cjwjybz1v2upo.1a53wod.rcgu.o new file mode 100644 index 0000000..18ce10f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9wvmuiuacja4cjwjybz1v2upo.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9wvmuiuacja4cjwjybz1v2upo.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9wvmuiuacja4cjwjybz1v2upo.1wqhz7j.rcgu.o new file mode 100644 index 0000000..da6e0a6 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9wvmuiuacja4cjwjybz1v2upo.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9xsyoqpuj776kk59foki3ixfh.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9xsyoqpuj776kk59foki3ixfh.01yfk63.rcgu.o new file mode 100644 index 0000000..7aea13f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9xsyoqpuj776kk59foki3ixfh.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9xsyoqpuj776kk59foki3ixfh.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9xsyoqpuj776kk59foki3ixfh.0baakfy.rcgu.o new file mode 100644 index 0000000..50222a7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9xsyoqpuj776kk59foki3ixfh.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9xsyoqpuj776kk59foki3ixfh.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9xsyoqpuj776kk59foki3ixfh.0j1t5jb.rcgu.o new file mode 100644 index 0000000..50222a7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9xsyoqpuj776kk59foki3ixfh.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9xsyoqpuj776kk59foki3ixfh.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9xsyoqpuj776kk59foki3ixfh.1a53wod.rcgu.o new file mode 100644 index 0000000..50222a7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9xsyoqpuj776kk59foki3ixfh.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9xsyoqpuj776kk59foki3ixfh.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9xsyoqpuj776kk59foki3ixfh.1wqhz7j.rcgu.o new file mode 100644 index 0000000..50222a7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.9xsyoqpuj776kk59foki3ixfh.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.a8gc85z70ox8jo1nhu2qd19iu.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.a8gc85z70ox8jo1nhu2qd19iu.01yfk63.rcgu.o new file mode 100644 index 0000000..5426762 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.a8gc85z70ox8jo1nhu2qd19iu.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.a8gc85z70ox8jo1nhu2qd19iu.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.a8gc85z70ox8jo1nhu2qd19iu.0baakfy.rcgu.o new file mode 100644 index 0000000..ea903c3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.a8gc85z70ox8jo1nhu2qd19iu.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.a8gc85z70ox8jo1nhu2qd19iu.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.a8gc85z70ox8jo1nhu2qd19iu.0j1t5jb.rcgu.o new file mode 100644 index 0000000..ea903c3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.a8gc85z70ox8jo1nhu2qd19iu.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.a8gc85z70ox8jo1nhu2qd19iu.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.a8gc85z70ox8jo1nhu2qd19iu.1a53wod.rcgu.o new file mode 100644 index 0000000..ea903c3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.a8gc85z70ox8jo1nhu2qd19iu.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.a8gc85z70ox8jo1nhu2qd19iu.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.a8gc85z70ox8jo1nhu2qd19iu.1wqhz7j.rcgu.o new file mode 100644 index 0000000..ea903c3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.a8gc85z70ox8jo1nhu2qd19iu.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aex3c2vfmsk2dpbjpdp9vtmpl.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aex3c2vfmsk2dpbjpdp9vtmpl.01yfk63.rcgu.o new file mode 100644 index 0000000..4177f0f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aex3c2vfmsk2dpbjpdp9vtmpl.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aex3c2vfmsk2dpbjpdp9vtmpl.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aex3c2vfmsk2dpbjpdp9vtmpl.0baakfy.rcgu.o new file mode 100644 index 0000000..1003495 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aex3c2vfmsk2dpbjpdp9vtmpl.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aex3c2vfmsk2dpbjpdp9vtmpl.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aex3c2vfmsk2dpbjpdp9vtmpl.0j1t5jb.rcgu.o new file mode 100644 index 0000000..5ebbe3a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aex3c2vfmsk2dpbjpdp9vtmpl.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aex3c2vfmsk2dpbjpdp9vtmpl.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aex3c2vfmsk2dpbjpdp9vtmpl.1a53wod.rcgu.o new file mode 100644 index 0000000..9210f37 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aex3c2vfmsk2dpbjpdp9vtmpl.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aex3c2vfmsk2dpbjpdp9vtmpl.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aex3c2vfmsk2dpbjpdp9vtmpl.1wqhz7j.rcgu.o new file mode 100644 index 0000000..9210f37 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aex3c2vfmsk2dpbjpdp9vtmpl.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ak8xxvj024fbna6z1xerw8jn1.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ak8xxvj024fbna6z1xerw8jn1.0baakfy.rcgu.o new file mode 100644 index 0000000..6781cad Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ak8xxvj024fbna6z1xerw8jn1.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ak8xxvj024fbna6z1xerw8jn1.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ak8xxvj024fbna6z1xerw8jn1.0j1t5jb.rcgu.o new file mode 100644 index 0000000..6781cad Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ak8xxvj024fbna6z1xerw8jn1.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ak8xxvj024fbna6z1xerw8jn1.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ak8xxvj024fbna6z1xerw8jn1.1a53wod.rcgu.o new file mode 100644 index 0000000..6781cad Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ak8xxvj024fbna6z1xerw8jn1.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ak8xxvj024fbna6z1xerw8jn1.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ak8xxvj024fbna6z1xerw8jn1.1wqhz7j.rcgu.o new file mode 100644 index 0000000..6781cad Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ak8xxvj024fbna6z1xerw8jn1.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.akjjhqjc07a2dvqp3wuwhtqrv.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.akjjhqjc07a2dvqp3wuwhtqrv.01yfk63.rcgu.o new file mode 100644 index 0000000..f024a46 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.akjjhqjc07a2dvqp3wuwhtqrv.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.akjjhqjc07a2dvqp3wuwhtqrv.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.akjjhqjc07a2dvqp3wuwhtqrv.0baakfy.rcgu.o new file mode 100644 index 0000000..390b627 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.akjjhqjc07a2dvqp3wuwhtqrv.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.akjjhqjc07a2dvqp3wuwhtqrv.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.akjjhqjc07a2dvqp3wuwhtqrv.0j1t5jb.rcgu.o new file mode 100644 index 0000000..390b627 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.akjjhqjc07a2dvqp3wuwhtqrv.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.akjjhqjc07a2dvqp3wuwhtqrv.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.akjjhqjc07a2dvqp3wuwhtqrv.1a53wod.rcgu.o new file mode 100644 index 0000000..390b627 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.akjjhqjc07a2dvqp3wuwhtqrv.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.akjjhqjc07a2dvqp3wuwhtqrv.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.akjjhqjc07a2dvqp3wuwhtqrv.1wqhz7j.rcgu.o new file mode 100644 index 0000000..390b627 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.akjjhqjc07a2dvqp3wuwhtqrv.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aunpcmzejd7tzs3wmbd0kw30i.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aunpcmzejd7tzs3wmbd0kw30i.01yfk63.rcgu.o new file mode 100644 index 0000000..ecbd0fa Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aunpcmzejd7tzs3wmbd0kw30i.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aunpcmzejd7tzs3wmbd0kw30i.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aunpcmzejd7tzs3wmbd0kw30i.0baakfy.rcgu.o new file mode 100644 index 0000000..fd5069c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aunpcmzejd7tzs3wmbd0kw30i.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aunpcmzejd7tzs3wmbd0kw30i.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aunpcmzejd7tzs3wmbd0kw30i.0j1t5jb.rcgu.o new file mode 100644 index 0000000..fd5069c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aunpcmzejd7tzs3wmbd0kw30i.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aunpcmzejd7tzs3wmbd0kw30i.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aunpcmzejd7tzs3wmbd0kw30i.1a53wod.rcgu.o new file mode 100644 index 0000000..aefc4e5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aunpcmzejd7tzs3wmbd0kw30i.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aunpcmzejd7tzs3wmbd0kw30i.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aunpcmzejd7tzs3wmbd0kw30i.1wqhz7j.rcgu.o new file mode 100644 index 0000000..aefc4e5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.aunpcmzejd7tzs3wmbd0kw30i.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ay47a7o2bfpch8vmjc5y5kpif.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ay47a7o2bfpch8vmjc5y5kpif.01yfk63.rcgu.o new file mode 100644 index 0000000..eb6ab61 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ay47a7o2bfpch8vmjc5y5kpif.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ay47a7o2bfpch8vmjc5y5kpif.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ay47a7o2bfpch8vmjc5y5kpif.0baakfy.rcgu.o new file mode 100644 index 0000000..74a5389 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ay47a7o2bfpch8vmjc5y5kpif.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ay47a7o2bfpch8vmjc5y5kpif.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ay47a7o2bfpch8vmjc5y5kpif.0j1t5jb.rcgu.o new file mode 100644 index 0000000..74a5389 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ay47a7o2bfpch8vmjc5y5kpif.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ay47a7o2bfpch8vmjc5y5kpif.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ay47a7o2bfpch8vmjc5y5kpif.1a53wod.rcgu.o new file mode 100644 index 0000000..74a5389 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ay47a7o2bfpch8vmjc5y5kpif.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ay47a7o2bfpch8vmjc5y5kpif.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ay47a7o2bfpch8vmjc5y5kpif.1wqhz7j.rcgu.o new file mode 100644 index 0000000..74a5389 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ay47a7o2bfpch8vmjc5y5kpif.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b0poesnte1glg4untjhs5p790.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b0poesnte1glg4untjhs5p790.0baakfy.rcgu.o new file mode 100644 index 0000000..1dceffa Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b0poesnte1glg4untjhs5p790.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b0poesnte1glg4untjhs5p790.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b0poesnte1glg4untjhs5p790.0j1t5jb.rcgu.o new file mode 100644 index 0000000..1dceffa Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b0poesnte1glg4untjhs5p790.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b0poesnte1glg4untjhs5p790.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b0poesnte1glg4untjhs5p790.1a53wod.rcgu.o new file mode 100644 index 0000000..1dceffa Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b0poesnte1glg4untjhs5p790.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b0poesnte1glg4untjhs5p790.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b0poesnte1glg4untjhs5p790.1wqhz7j.rcgu.o new file mode 100644 index 0000000..1dceffa Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b0poesnte1glg4untjhs5p790.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b82094u2cubi35b8xfw07l5zl.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b82094u2cubi35b8xfw07l5zl.01yfk63.rcgu.o new file mode 100644 index 0000000..f0cf63b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b82094u2cubi35b8xfw07l5zl.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b82094u2cubi35b8xfw07l5zl.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b82094u2cubi35b8xfw07l5zl.0baakfy.rcgu.o new file mode 100644 index 0000000..43196e8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b82094u2cubi35b8xfw07l5zl.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b82094u2cubi35b8xfw07l5zl.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b82094u2cubi35b8xfw07l5zl.0j1t5jb.rcgu.o new file mode 100644 index 0000000..03178ba Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b82094u2cubi35b8xfw07l5zl.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b82094u2cubi35b8xfw07l5zl.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b82094u2cubi35b8xfw07l5zl.1a53wod.rcgu.o new file mode 100644 index 0000000..2302a79 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b82094u2cubi35b8xfw07l5zl.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b82094u2cubi35b8xfw07l5zl.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b82094u2cubi35b8xfw07l5zl.1wqhz7j.rcgu.o new file mode 100644 index 0000000..985ec02 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b82094u2cubi35b8xfw07l5zl.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b8meb97n7a5672che5ivrojjn.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b8meb97n7a5672che5ivrojjn.0baakfy.rcgu.o new file mode 100644 index 0000000..d76bfe3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b8meb97n7a5672che5ivrojjn.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b8meb97n7a5672che5ivrojjn.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b8meb97n7a5672che5ivrojjn.0j1t5jb.rcgu.o new file mode 100644 index 0000000..d76bfe3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b8meb97n7a5672che5ivrojjn.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b8meb97n7a5672che5ivrojjn.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b8meb97n7a5672che5ivrojjn.1a53wod.rcgu.o new file mode 100644 index 0000000..d76bfe3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b8meb97n7a5672che5ivrojjn.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b8meb97n7a5672che5ivrojjn.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b8meb97n7a5672che5ivrojjn.1wqhz7j.rcgu.o new file mode 100644 index 0000000..d76bfe3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.b8meb97n7a5672che5ivrojjn.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.bg6qawt04o1sla8eqjerbv50z.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.bg6qawt04o1sla8eqjerbv50z.01yfk63.rcgu.o new file mode 100644 index 0000000..c2fd0b9 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.bg6qawt04o1sla8eqjerbv50z.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.bg6qawt04o1sla8eqjerbv50z.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.bg6qawt04o1sla8eqjerbv50z.0baakfy.rcgu.o new file mode 100644 index 0000000..bee4852 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.bg6qawt04o1sla8eqjerbv50z.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.bg6qawt04o1sla8eqjerbv50z.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.bg6qawt04o1sla8eqjerbv50z.0j1t5jb.rcgu.o new file mode 100644 index 0000000..e216cc5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.bg6qawt04o1sla8eqjerbv50z.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.bg6qawt04o1sla8eqjerbv50z.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.bg6qawt04o1sla8eqjerbv50z.1a53wod.rcgu.o new file mode 100644 index 0000000..c2fd0b9 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.bg6qawt04o1sla8eqjerbv50z.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.bg6qawt04o1sla8eqjerbv50z.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.bg6qawt04o1sla8eqjerbv50z.1wqhz7j.rcgu.o new file mode 100644 index 0000000..c2fd0b9 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.bg6qawt04o1sla8eqjerbv50z.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.bieao4w9ntrb2ejvacgphuebw.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.bieao4w9ntrb2ejvacgphuebw.01yfk63.rcgu.o new file mode 100644 index 0000000..4b1b874 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.bieao4w9ntrb2ejvacgphuebw.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ccs1cco4vzdstes508v950mte.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ccs1cco4vzdstes508v950mte.01yfk63.rcgu.o new file mode 100644 index 0000000..bb92f32 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ccs1cco4vzdstes508v950mte.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ccs1cco4vzdstes508v950mte.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ccs1cco4vzdstes508v950mte.0baakfy.rcgu.o new file mode 100644 index 0000000..9b9ec5d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ccs1cco4vzdstes508v950mte.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ccs1cco4vzdstes508v950mte.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ccs1cco4vzdstes508v950mte.0j1t5jb.rcgu.o new file mode 100644 index 0000000..d319415 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ccs1cco4vzdstes508v950mte.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ccs1cco4vzdstes508v950mte.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ccs1cco4vzdstes508v950mte.1a53wod.rcgu.o new file mode 100644 index 0000000..9b9ec5d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ccs1cco4vzdstes508v950mte.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ccs1cco4vzdstes508v950mte.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ccs1cco4vzdstes508v950mte.1wqhz7j.rcgu.o new file mode 100644 index 0000000..9b9ec5d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ccs1cco4vzdstes508v950mte.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cghv663je18dmb2kn2sakwlzq.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cghv663je18dmb2kn2sakwlzq.0baakfy.rcgu.o new file mode 100644 index 0000000..03a5b91 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cghv663je18dmb2kn2sakwlzq.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cghv663je18dmb2kn2sakwlzq.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cghv663je18dmb2kn2sakwlzq.0j1t5jb.rcgu.o new file mode 100644 index 0000000..03a5b91 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cghv663je18dmb2kn2sakwlzq.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cghv663je18dmb2kn2sakwlzq.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cghv663je18dmb2kn2sakwlzq.1a53wod.rcgu.o new file mode 100644 index 0000000..03a5b91 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cghv663je18dmb2kn2sakwlzq.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cghv663je18dmb2kn2sakwlzq.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cghv663je18dmb2kn2sakwlzq.1wqhz7j.rcgu.o new file mode 100644 index 0000000..03a5b91 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cghv663je18dmb2kn2sakwlzq.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ch54tldomfyj2lu7hmdja7lsx.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ch54tldomfyj2lu7hmdja7lsx.01yfk63.rcgu.o new file mode 100644 index 0000000..d1e0502 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ch54tldomfyj2lu7hmdja7lsx.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ctnya8log9y6xtk6hzrvetag8.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ctnya8log9y6xtk6hzrvetag8.0baakfy.rcgu.o new file mode 100644 index 0000000..7e36e96 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ctnya8log9y6xtk6hzrvetag8.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ctnya8log9y6xtk6hzrvetag8.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ctnya8log9y6xtk6hzrvetag8.0j1t5jb.rcgu.o new file mode 100644 index 0000000..b0395fa Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ctnya8log9y6xtk6hzrvetag8.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ctnya8log9y6xtk6hzrvetag8.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ctnya8log9y6xtk6hzrvetag8.1a53wod.rcgu.o new file mode 100644 index 0000000..8d2a056 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ctnya8log9y6xtk6hzrvetag8.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ctnya8log9y6xtk6hzrvetag8.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ctnya8log9y6xtk6hzrvetag8.1wqhz7j.rcgu.o new file mode 100644 index 0000000..5e9c651 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ctnya8log9y6xtk6hzrvetag8.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cuomokicj392lf6fwcnlfpwxu.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cuomokicj392lf6fwcnlfpwxu.0baakfy.rcgu.o new file mode 100644 index 0000000..37818c3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cuomokicj392lf6fwcnlfpwxu.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cuomokicj392lf6fwcnlfpwxu.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cuomokicj392lf6fwcnlfpwxu.0j1t5jb.rcgu.o new file mode 100644 index 0000000..37818c3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cuomokicj392lf6fwcnlfpwxu.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cvmzge7iimi1i60wjw7hnffcl.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cvmzge7iimi1i60wjw7hnffcl.01yfk63.rcgu.o new file mode 100644 index 0000000..152f74c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.cvmzge7iimi1i60wjw7hnffcl.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.d b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.d new file mode 100644 index 0000000..6b1b4b9 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.d @@ -0,0 +1,10 @@ +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.d: src/lib.rs src/decoder.rs src/encoder.rs src/symbol.rs + +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/libfountain_core-1148e22e56624882.rlib: src/lib.rs src/decoder.rs src/encoder.rs src/symbol.rs + +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/libfountain_core-1148e22e56624882.rmeta: src/lib.rs src/decoder.rs src/encoder.rs src/symbol.rs + +src/lib.rs: +src/decoder.rs: +src/encoder.rs: +src/symbol.rs: diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.daq29zdtvse961fisffrp1tdt.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.daq29zdtvse961fisffrp1tdt.0baakfy.rcgu.o new file mode 100644 index 0000000..193d6ff Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.daq29zdtvse961fisffrp1tdt.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.daq29zdtvse961fisffrp1tdt.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.daq29zdtvse961fisffrp1tdt.0j1t5jb.rcgu.o new file mode 100644 index 0000000..5054440 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.daq29zdtvse961fisffrp1tdt.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.daq29zdtvse961fisffrp1tdt.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.daq29zdtvse961fisffrp1tdt.1a53wod.rcgu.o new file mode 100644 index 0000000..5054440 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.daq29zdtvse961fisffrp1tdt.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.daq29zdtvse961fisffrp1tdt.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.daq29zdtvse961fisffrp1tdt.1wqhz7j.rcgu.o new file mode 100644 index 0000000..5054440 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.daq29zdtvse961fisffrp1tdt.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.dikhll4t4sm8pkjwtl8zpyzc5.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.dikhll4t4sm8pkjwtl8zpyzc5.01yfk63.rcgu.o new file mode 100644 index 0000000..2e15c5b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.dikhll4t4sm8pkjwtl8zpyzc5.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.e72h4ej9ypzpbmw89666rhrix.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.e72h4ej9ypzpbmw89666rhrix.01yfk63.rcgu.o new file mode 100644 index 0000000..e4f51da Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.e72h4ej9ypzpbmw89666rhrix.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.e72h4ej9ypzpbmw89666rhrix.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.e72h4ej9ypzpbmw89666rhrix.0baakfy.rcgu.o new file mode 100644 index 0000000..e4f51da Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.e72h4ej9ypzpbmw89666rhrix.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.e72h4ej9ypzpbmw89666rhrix.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.e72h4ej9ypzpbmw89666rhrix.0j1t5jb.rcgu.o new file mode 100644 index 0000000..e4f51da Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.e72h4ej9ypzpbmw89666rhrix.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.e72h4ej9ypzpbmw89666rhrix.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.e72h4ej9ypzpbmw89666rhrix.1a53wod.rcgu.o new file mode 100644 index 0000000..e4f51da Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.e72h4ej9ypzpbmw89666rhrix.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.e72h4ej9ypzpbmw89666rhrix.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.e72h4ej9ypzpbmw89666rhrix.1wqhz7j.rcgu.o new file mode 100644 index 0000000..e4f51da Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.e72h4ej9ypzpbmw89666rhrix.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ed8a6qtazenykprs8ji4kbsk5.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ed8a6qtazenykprs8ji4kbsk5.0baakfy.rcgu.o new file mode 100644 index 0000000..c4ae9e8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ed8a6qtazenykprs8ji4kbsk5.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ed8a6qtazenykprs8ji4kbsk5.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ed8a6qtazenykprs8ji4kbsk5.0j1t5jb.rcgu.o new file mode 100644 index 0000000..58752a8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ed8a6qtazenykprs8ji4kbsk5.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ed8a6qtazenykprs8ji4kbsk5.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ed8a6qtazenykprs8ji4kbsk5.1a53wod.rcgu.o new file mode 100644 index 0000000..812d2a3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ed8a6qtazenykprs8ji4kbsk5.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ed8a6qtazenykprs8ji4kbsk5.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ed8a6qtazenykprs8ji4kbsk5.1wqhz7j.rcgu.o new file mode 100644 index 0000000..812d2a3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.ed8a6qtazenykprs8ji4kbsk5.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.essn4xjc3vw6kwvh2a8ij7s2t.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.essn4xjc3vw6kwvh2a8ij7s2t.0baakfy.rcgu.o new file mode 100644 index 0000000..92a626f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.essn4xjc3vw6kwvh2a8ij7s2t.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.essn4xjc3vw6kwvh2a8ij7s2t.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.essn4xjc3vw6kwvh2a8ij7s2t.0j1t5jb.rcgu.o new file mode 100644 index 0000000..eedc276 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.essn4xjc3vw6kwvh2a8ij7s2t.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.essn4xjc3vw6kwvh2a8ij7s2t.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.essn4xjc3vw6kwvh2a8ij7s2t.1a53wod.rcgu.o new file mode 100644 index 0000000..f635684 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.essn4xjc3vw6kwvh2a8ij7s2t.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.essn4xjc3vw6kwvh2a8ij7s2t.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.essn4xjc3vw6kwvh2a8ij7s2t.1wqhz7j.rcgu.o new file mode 100644 index 0000000..f635684 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.essn4xjc3vw6kwvh2a8ij7s2t.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.f1xag6xzn7mtpo9gi8t1sy37u.01yfk63.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.f1xag6xzn7mtpo9gi8t1sy37u.01yfk63.rcgu.o new file mode 100644 index 0000000..9838640 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.f1xag6xzn7mtpo9gi8t1sy37u.01yfk63.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.f1xag6xzn7mtpo9gi8t1sy37u.0baakfy.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.f1xag6xzn7mtpo9gi8t1sy37u.0baakfy.rcgu.o new file mode 100644 index 0000000..9838640 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.f1xag6xzn7mtpo9gi8t1sy37u.0baakfy.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.f1xag6xzn7mtpo9gi8t1sy37u.0j1t5jb.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.f1xag6xzn7mtpo9gi8t1sy37u.0j1t5jb.rcgu.o new file mode 100644 index 0000000..9838640 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.f1xag6xzn7mtpo9gi8t1sy37u.0j1t5jb.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.f1xag6xzn7mtpo9gi8t1sy37u.1a53wod.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.f1xag6xzn7mtpo9gi8t1sy37u.1a53wod.rcgu.o new file mode 100644 index 0000000..9838640 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.f1xag6xzn7mtpo9gi8t1sy37u.1a53wod.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.f1xag6xzn7mtpo9gi8t1sy37u.1wqhz7j.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.f1xag6xzn7mtpo9gi8t1sy37u.1wqhz7j.rcgu.o new file mode 100644 index 0000000..9838640 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-1148e22e56624882.f1xag6xzn7mtpo9gi8t1sy37u.1wqhz7j.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f new file mode 100755 index 0000000..035f275 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.00yz8zoqpkeodxepmc7wc6jbs.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.00yz8zoqpkeodxepmc7wc6jbs.0bjco5x.rcgu.o new file mode 100644 index 0000000..5678379 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.00yz8zoqpkeodxepmc7wc6jbs.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.00yz8zoqpkeodxepmc7wc6jbs.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.00yz8zoqpkeodxepmc7wc6jbs.0g4pcz5.rcgu.o new file mode 100644 index 0000000..0e21d63 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.00yz8zoqpkeodxepmc7wc6jbs.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.00yz8zoqpkeodxepmc7wc6jbs.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.00yz8zoqpkeodxepmc7wc6jbs.0qbw46o.rcgu.o new file mode 100644 index 0000000..d4a34c4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.00yz8zoqpkeodxepmc7wc6jbs.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.00yz8zoqpkeodxepmc7wc6jbs.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.00yz8zoqpkeodxepmc7wc6jbs.1skfroh.rcgu.o new file mode 100644 index 0000000..0e21d63 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.00yz8zoqpkeodxepmc7wc6jbs.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.08io4b9eckdl0vqrjyshmbal5.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.08io4b9eckdl0vqrjyshmbal5.0985k0v.rcgu.o new file mode 100644 index 0000000..5b7bea4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.08io4b9eckdl0vqrjyshmbal5.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.08io4b9eckdl0vqrjyshmbal5.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.08io4b9eckdl0vqrjyshmbal5.0bjco5x.rcgu.o new file mode 100644 index 0000000..5116c08 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.08io4b9eckdl0vqrjyshmbal5.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.08io4b9eckdl0vqrjyshmbal5.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.08io4b9eckdl0vqrjyshmbal5.0g4pcz5.rcgu.o new file mode 100644 index 0000000..4ec6c12 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.08io4b9eckdl0vqrjyshmbal5.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.08io4b9eckdl0vqrjyshmbal5.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.08io4b9eckdl0vqrjyshmbal5.0qbw46o.rcgu.o new file mode 100644 index 0000000..5116c08 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.08io4b9eckdl0vqrjyshmbal5.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.08io4b9eckdl0vqrjyshmbal5.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.08io4b9eckdl0vqrjyshmbal5.1skfroh.rcgu.o new file mode 100644 index 0000000..4ec6c12 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.08io4b9eckdl0vqrjyshmbal5.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0qyrvgntddq762hgls1rb6eke.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0qyrvgntddq762hgls1rb6eke.0985k0v.rcgu.o new file mode 100644 index 0000000..0720823 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0qyrvgntddq762hgls1rb6eke.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0r3a3fguian47zqu1huomd8j0.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0r3a3fguian47zqu1huomd8j0.0bjco5x.rcgu.o new file mode 100644 index 0000000..2d1baa5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0r3a3fguian47zqu1huomd8j0.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0r3a3fguian47zqu1huomd8j0.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0r3a3fguian47zqu1huomd8j0.0g4pcz5.rcgu.o new file mode 100644 index 0000000..2d1baa5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0r3a3fguian47zqu1huomd8j0.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0r3a3fguian47zqu1huomd8j0.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0r3a3fguian47zqu1huomd8j0.0qbw46o.rcgu.o new file mode 100644 index 0000000..2d1baa5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0r3a3fguian47zqu1huomd8j0.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0r3a3fguian47zqu1huomd8j0.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0r3a3fguian47zqu1huomd8j0.1skfroh.rcgu.o new file mode 100644 index 0000000..2d1baa5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0r3a3fguian47zqu1huomd8j0.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0w9pc5dnfgqffn5elr9bfa1zz.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0w9pc5dnfgqffn5elr9bfa1zz.0985k0v.rcgu.o new file mode 100644 index 0000000..a8e3773 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0w9pc5dnfgqffn5elr9bfa1zz.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0w9pc5dnfgqffn5elr9bfa1zz.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0w9pc5dnfgqffn5elr9bfa1zz.0bjco5x.rcgu.o new file mode 100644 index 0000000..a8e3773 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0w9pc5dnfgqffn5elr9bfa1zz.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0w9pc5dnfgqffn5elr9bfa1zz.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0w9pc5dnfgqffn5elr9bfa1zz.0g4pcz5.rcgu.o new file mode 100644 index 0000000..a8e3773 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0w9pc5dnfgqffn5elr9bfa1zz.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0w9pc5dnfgqffn5elr9bfa1zz.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0w9pc5dnfgqffn5elr9bfa1zz.0qbw46o.rcgu.o new file mode 100644 index 0000000..a8e3773 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0w9pc5dnfgqffn5elr9bfa1zz.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0w9pc5dnfgqffn5elr9bfa1zz.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0w9pc5dnfgqffn5elr9bfa1zz.1skfroh.rcgu.o new file mode 100644 index 0000000..a8e3773 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0w9pc5dnfgqffn5elr9bfa1zz.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0wz64d8m8k9578j6puokt99yk.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0wz64d8m8k9578j6puokt99yk.0bjco5x.rcgu.o new file mode 100644 index 0000000..b7c6987 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0wz64d8m8k9578j6puokt99yk.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0wz64d8m8k9578j6puokt99yk.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0wz64d8m8k9578j6puokt99yk.0g4pcz5.rcgu.o new file mode 100644 index 0000000..ba233cc Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0wz64d8m8k9578j6puokt99yk.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0wz64d8m8k9578j6puokt99yk.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0wz64d8m8k9578j6puokt99yk.0qbw46o.rcgu.o new file mode 100644 index 0000000..5d556d4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0wz64d8m8k9578j6puokt99yk.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0wz64d8m8k9578j6puokt99yk.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0wz64d8m8k9578j6puokt99yk.1skfroh.rcgu.o new file mode 100644 index 0000000..e50e9c7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.0wz64d8m8k9578j6puokt99yk.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.17dom2g7ilq1mijoj1201n4dd.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.17dom2g7ilq1mijoj1201n4dd.0985k0v.rcgu.o new file mode 100644 index 0000000..c5b21d8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.17dom2g7ilq1mijoj1201n4dd.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.17dom2g7ilq1mijoj1201n4dd.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.17dom2g7ilq1mijoj1201n4dd.0bjco5x.rcgu.o new file mode 100644 index 0000000..c5b21d8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.17dom2g7ilq1mijoj1201n4dd.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.17dom2g7ilq1mijoj1201n4dd.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.17dom2g7ilq1mijoj1201n4dd.0g4pcz5.rcgu.o new file mode 100644 index 0000000..c5b21d8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.17dom2g7ilq1mijoj1201n4dd.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.17dom2g7ilq1mijoj1201n4dd.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.17dom2g7ilq1mijoj1201n4dd.0qbw46o.rcgu.o new file mode 100644 index 0000000..c5b21d8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.17dom2g7ilq1mijoj1201n4dd.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.17dom2g7ilq1mijoj1201n4dd.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.17dom2g7ilq1mijoj1201n4dd.1skfroh.rcgu.o new file mode 100644 index 0000000..c5b21d8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.17dom2g7ilq1mijoj1201n4dd.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1ep4a553mfhhi0ge1l11fh3gl.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1ep4a553mfhhi0ge1l11fh3gl.0985k0v.rcgu.o new file mode 100644 index 0000000..3ae548d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1ep4a553mfhhi0ge1l11fh3gl.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1ep4a553mfhhi0ge1l11fh3gl.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1ep4a553mfhhi0ge1l11fh3gl.0bjco5x.rcgu.o new file mode 100644 index 0000000..3ae548d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1ep4a553mfhhi0ge1l11fh3gl.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1ep4a553mfhhi0ge1l11fh3gl.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1ep4a553mfhhi0ge1l11fh3gl.0g4pcz5.rcgu.o new file mode 100644 index 0000000..3ae548d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1ep4a553mfhhi0ge1l11fh3gl.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1ep4a553mfhhi0ge1l11fh3gl.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1ep4a553mfhhi0ge1l11fh3gl.0qbw46o.rcgu.o new file mode 100644 index 0000000..3ae548d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1ep4a553mfhhi0ge1l11fh3gl.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1ep4a553mfhhi0ge1l11fh3gl.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1ep4a553mfhhi0ge1l11fh3gl.1skfroh.rcgu.o new file mode 100644 index 0000000..3ae548d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1ep4a553mfhhi0ge1l11fh3gl.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1fdhma4g9zy1on3e6exw8nj91.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1fdhma4g9zy1on3e6exw8nj91.0985k0v.rcgu.o new file mode 100644 index 0000000..33036a1 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1fdhma4g9zy1on3e6exw8nj91.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1oapsgxpyeqknqwmqeasperqj.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1oapsgxpyeqknqwmqeasperqj.0985k0v.rcgu.o new file mode 100644 index 0000000..6c729b4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1oapsgxpyeqknqwmqeasperqj.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1oapsgxpyeqknqwmqeasperqj.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1oapsgxpyeqknqwmqeasperqj.0bjco5x.rcgu.o new file mode 100644 index 0000000..6c729b4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1oapsgxpyeqknqwmqeasperqj.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1oapsgxpyeqknqwmqeasperqj.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1oapsgxpyeqknqwmqeasperqj.0g4pcz5.rcgu.o new file mode 100644 index 0000000..6c729b4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1oapsgxpyeqknqwmqeasperqj.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1oapsgxpyeqknqwmqeasperqj.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1oapsgxpyeqknqwmqeasperqj.0qbw46o.rcgu.o new file mode 100644 index 0000000..6c729b4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1oapsgxpyeqknqwmqeasperqj.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1oapsgxpyeqknqwmqeasperqj.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1oapsgxpyeqknqwmqeasperqj.1skfroh.rcgu.o new file mode 100644 index 0000000..6c729b4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1oapsgxpyeqknqwmqeasperqj.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1pejgjpnu8ltk1aoryi3kme1u.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1pejgjpnu8ltk1aoryi3kme1u.0985k0v.rcgu.o new file mode 100644 index 0000000..5ac6077 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1pejgjpnu8ltk1aoryi3kme1u.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1pejgjpnu8ltk1aoryi3kme1u.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1pejgjpnu8ltk1aoryi3kme1u.0bjco5x.rcgu.o new file mode 100644 index 0000000..b5d622b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1pejgjpnu8ltk1aoryi3kme1u.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1pejgjpnu8ltk1aoryi3kme1u.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1pejgjpnu8ltk1aoryi3kme1u.0g4pcz5.rcgu.o new file mode 100644 index 0000000..b5d622b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1pejgjpnu8ltk1aoryi3kme1u.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1pejgjpnu8ltk1aoryi3kme1u.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1pejgjpnu8ltk1aoryi3kme1u.0qbw46o.rcgu.o new file mode 100644 index 0000000..b5d622b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1pejgjpnu8ltk1aoryi3kme1u.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1pejgjpnu8ltk1aoryi3kme1u.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1pejgjpnu8ltk1aoryi3kme1u.1skfroh.rcgu.o new file mode 100644 index 0000000..5ac6077 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1pejgjpnu8ltk1aoryi3kme1u.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1r5rnye6dfbxv411t9i9xm7do.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1r5rnye6dfbxv411t9i9xm7do.0985k0v.rcgu.o new file mode 100644 index 0000000..59215f3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1r5rnye6dfbxv411t9i9xm7do.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1r5rnye6dfbxv411t9i9xm7do.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1r5rnye6dfbxv411t9i9xm7do.0bjco5x.rcgu.o new file mode 100644 index 0000000..03094bf Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1r5rnye6dfbxv411t9i9xm7do.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1r5rnye6dfbxv411t9i9xm7do.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1r5rnye6dfbxv411t9i9xm7do.0g4pcz5.rcgu.o new file mode 100644 index 0000000..03094bf Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1r5rnye6dfbxv411t9i9xm7do.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1r5rnye6dfbxv411t9i9xm7do.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1r5rnye6dfbxv411t9i9xm7do.0qbw46o.rcgu.o new file mode 100644 index 0000000..03094bf Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1r5rnye6dfbxv411t9i9xm7do.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1r5rnye6dfbxv411t9i9xm7do.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1r5rnye6dfbxv411t9i9xm7do.1skfroh.rcgu.o new file mode 100644 index 0000000..59215f3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1r5rnye6dfbxv411t9i9xm7do.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1yigxcpoxtln99a39x61q0jnl.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1yigxcpoxtln99a39x61q0jnl.0985k0v.rcgu.o new file mode 100644 index 0000000..8b9497c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1yigxcpoxtln99a39x61q0jnl.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1yigxcpoxtln99a39x61q0jnl.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1yigxcpoxtln99a39x61q0jnl.0bjco5x.rcgu.o new file mode 100644 index 0000000..46f72d7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1yigxcpoxtln99a39x61q0jnl.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1yigxcpoxtln99a39x61q0jnl.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1yigxcpoxtln99a39x61q0jnl.0g4pcz5.rcgu.o new file mode 100644 index 0000000..58c6a57 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1yigxcpoxtln99a39x61q0jnl.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1yigxcpoxtln99a39x61q0jnl.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1yigxcpoxtln99a39x61q0jnl.0qbw46o.rcgu.o new file mode 100644 index 0000000..e2cd07e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1yigxcpoxtln99a39x61q0jnl.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1yigxcpoxtln99a39x61q0jnl.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1yigxcpoxtln99a39x61q0jnl.1skfroh.rcgu.o new file mode 100644 index 0000000..58c6a57 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.1yigxcpoxtln99a39x61q0jnl.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.26ozx4aju4dfwj21kzlz4tc42.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.26ozx4aju4dfwj21kzlz4tc42.0985k0v.rcgu.o new file mode 100644 index 0000000..92ecae1 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.26ozx4aju4dfwj21kzlz4tc42.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.29zhjs3djncd7s5soxqvtlxds.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.29zhjs3djncd7s5soxqvtlxds.0bjco5x.rcgu.o new file mode 100644 index 0000000..b03d43b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.29zhjs3djncd7s5soxqvtlxds.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.29zhjs3djncd7s5soxqvtlxds.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.29zhjs3djncd7s5soxqvtlxds.0qbw46o.rcgu.o new file mode 100644 index 0000000..b03d43b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.29zhjs3djncd7s5soxqvtlxds.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2ct9lbxv1emxzfzy6iwhne04x.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2ct9lbxv1emxzfzy6iwhne04x.0985k0v.rcgu.o new file mode 100644 index 0000000..7769703 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2ct9lbxv1emxzfzy6iwhne04x.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2ct9lbxv1emxzfzy6iwhne04x.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2ct9lbxv1emxzfzy6iwhne04x.0bjco5x.rcgu.o new file mode 100644 index 0000000..d17f4f7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2ct9lbxv1emxzfzy6iwhne04x.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2ct9lbxv1emxzfzy6iwhne04x.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2ct9lbxv1emxzfzy6iwhne04x.0g4pcz5.rcgu.o new file mode 100644 index 0000000..3e7a402 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2ct9lbxv1emxzfzy6iwhne04x.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2ct9lbxv1emxzfzy6iwhne04x.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2ct9lbxv1emxzfzy6iwhne04x.0qbw46o.rcgu.o new file mode 100644 index 0000000..d17f4f7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2ct9lbxv1emxzfzy6iwhne04x.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2ct9lbxv1emxzfzy6iwhne04x.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2ct9lbxv1emxzfzy6iwhne04x.1skfroh.rcgu.o new file mode 100644 index 0000000..7769703 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2ct9lbxv1emxzfzy6iwhne04x.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2xdc050t2t0imspjvto7sy76i.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2xdc050t2t0imspjvto7sy76i.0985k0v.rcgu.o new file mode 100644 index 0000000..ebe1554 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2xdc050t2t0imspjvto7sy76i.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2xdc050t2t0imspjvto7sy76i.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2xdc050t2t0imspjvto7sy76i.0bjco5x.rcgu.o new file mode 100644 index 0000000..8a8f228 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2xdc050t2t0imspjvto7sy76i.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2xdc050t2t0imspjvto7sy76i.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2xdc050t2t0imspjvto7sy76i.0g4pcz5.rcgu.o new file mode 100644 index 0000000..8a8f228 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2xdc050t2t0imspjvto7sy76i.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2xdc050t2t0imspjvto7sy76i.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2xdc050t2t0imspjvto7sy76i.0qbw46o.rcgu.o new file mode 100644 index 0000000..8a8f228 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2xdc050t2t0imspjvto7sy76i.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2xdc050t2t0imspjvto7sy76i.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2xdc050t2t0imspjvto7sy76i.1skfroh.rcgu.o new file mode 100644 index 0000000..a6f490d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.2xdc050t2t0imspjvto7sy76i.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.376h0hvdh900cjccwcdwv2l38.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.376h0hvdh900cjccwcdwv2l38.0bjco5x.rcgu.o new file mode 100644 index 0000000..734f287 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.376h0hvdh900cjccwcdwv2l38.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.376h0hvdh900cjccwcdwv2l38.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.376h0hvdh900cjccwcdwv2l38.0g4pcz5.rcgu.o new file mode 100644 index 0000000..ffcea71 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.376h0hvdh900cjccwcdwv2l38.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.376h0hvdh900cjccwcdwv2l38.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.376h0hvdh900cjccwcdwv2l38.0qbw46o.rcgu.o new file mode 100644 index 0000000..6aa9e58 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.376h0hvdh900cjccwcdwv2l38.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.376h0hvdh900cjccwcdwv2l38.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.376h0hvdh900cjccwcdwv2l38.1skfroh.rcgu.o new file mode 100644 index 0000000..ffcea71 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.376h0hvdh900cjccwcdwv2l38.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3879egwkd5ngjjtlc9syek8gb.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3879egwkd5ngjjtlc9syek8gb.0985k0v.rcgu.o new file mode 100644 index 0000000..4cc9205 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3879egwkd5ngjjtlc9syek8gb.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3879egwkd5ngjjtlc9syek8gb.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3879egwkd5ngjjtlc9syek8gb.0bjco5x.rcgu.o new file mode 100644 index 0000000..35d664a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3879egwkd5ngjjtlc9syek8gb.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3879egwkd5ngjjtlc9syek8gb.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3879egwkd5ngjjtlc9syek8gb.0g4pcz5.rcgu.o new file mode 100644 index 0000000..35d664a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3879egwkd5ngjjtlc9syek8gb.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3879egwkd5ngjjtlc9syek8gb.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3879egwkd5ngjjtlc9syek8gb.0qbw46o.rcgu.o new file mode 100644 index 0000000..35d664a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3879egwkd5ngjjtlc9syek8gb.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3879egwkd5ngjjtlc9syek8gb.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3879egwkd5ngjjtlc9syek8gb.1skfroh.rcgu.o new file mode 100644 index 0000000..35d664a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3879egwkd5ngjjtlc9syek8gb.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3wmslub1l3oc6q820hwj4fs7x.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3wmslub1l3oc6q820hwj4fs7x.0bjco5x.rcgu.o new file mode 100644 index 0000000..5135f5f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3wmslub1l3oc6q820hwj4fs7x.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3wmslub1l3oc6q820hwj4fs7x.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3wmslub1l3oc6q820hwj4fs7x.0g4pcz5.rcgu.o new file mode 100644 index 0000000..8193165 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3wmslub1l3oc6q820hwj4fs7x.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3wmslub1l3oc6q820hwj4fs7x.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3wmslub1l3oc6q820hwj4fs7x.0qbw46o.rcgu.o new file mode 100644 index 0000000..8193165 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3wmslub1l3oc6q820hwj4fs7x.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3wmslub1l3oc6q820hwj4fs7x.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3wmslub1l3oc6q820hwj4fs7x.1skfroh.rcgu.o new file mode 100644 index 0000000..8193165 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3wmslub1l3oc6q820hwj4fs7x.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3yz3ab55pkwdrtqcj15woctyw.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3yz3ab55pkwdrtqcj15woctyw.0985k0v.rcgu.o new file mode 100644 index 0000000..815232e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3yz3ab55pkwdrtqcj15woctyw.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3yz3ab55pkwdrtqcj15woctyw.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3yz3ab55pkwdrtqcj15woctyw.0bjco5x.rcgu.o new file mode 100644 index 0000000..815232e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3yz3ab55pkwdrtqcj15woctyw.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3yz3ab55pkwdrtqcj15woctyw.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3yz3ab55pkwdrtqcj15woctyw.0g4pcz5.rcgu.o new file mode 100644 index 0000000..815232e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3yz3ab55pkwdrtqcj15woctyw.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3yz3ab55pkwdrtqcj15woctyw.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3yz3ab55pkwdrtqcj15woctyw.0qbw46o.rcgu.o new file mode 100644 index 0000000..815232e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3yz3ab55pkwdrtqcj15woctyw.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3yz3ab55pkwdrtqcj15woctyw.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3yz3ab55pkwdrtqcj15woctyw.1skfroh.rcgu.o new file mode 100644 index 0000000..815232e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3yz3ab55pkwdrtqcj15woctyw.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3zy7upvs6xwt941haf3ge5t75.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3zy7upvs6xwt941haf3ge5t75.0bjco5x.rcgu.o new file mode 100644 index 0000000..d721f9a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3zy7upvs6xwt941haf3ge5t75.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3zy7upvs6xwt941haf3ge5t75.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3zy7upvs6xwt941haf3ge5t75.0g4pcz5.rcgu.o new file mode 100644 index 0000000..d721f9a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3zy7upvs6xwt941haf3ge5t75.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3zy7upvs6xwt941haf3ge5t75.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3zy7upvs6xwt941haf3ge5t75.0qbw46o.rcgu.o new file mode 100644 index 0000000..d721f9a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.3zy7upvs6xwt941haf3ge5t75.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.4kfbq27gfmqloniiz10t8t9o8.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.4kfbq27gfmqloniiz10t8t9o8.0985k0v.rcgu.o new file mode 100644 index 0000000..de7139d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.4kfbq27gfmqloniiz10t8t9o8.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.4kfbq27gfmqloniiz10t8t9o8.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.4kfbq27gfmqloniiz10t8t9o8.0bjco5x.rcgu.o new file mode 100644 index 0000000..de7139d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.4kfbq27gfmqloniiz10t8t9o8.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.4kfbq27gfmqloniiz10t8t9o8.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.4kfbq27gfmqloniiz10t8t9o8.0g4pcz5.rcgu.o new file mode 100644 index 0000000..de7139d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.4kfbq27gfmqloniiz10t8t9o8.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.4kfbq27gfmqloniiz10t8t9o8.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.4kfbq27gfmqloniiz10t8t9o8.0qbw46o.rcgu.o new file mode 100644 index 0000000..de7139d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.4kfbq27gfmqloniiz10t8t9o8.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.4kfbq27gfmqloniiz10t8t9o8.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.4kfbq27gfmqloniiz10t8t9o8.1skfroh.rcgu.o new file mode 100644 index 0000000..de7139d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.4kfbq27gfmqloniiz10t8t9o8.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.50z1dyxvw33cbja6a7wdds1n1.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.50z1dyxvw33cbja6a7wdds1n1.0985k0v.rcgu.o new file mode 100644 index 0000000..c7719b6 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.50z1dyxvw33cbja6a7wdds1n1.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.50z1dyxvw33cbja6a7wdds1n1.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.50z1dyxvw33cbja6a7wdds1n1.0bjco5x.rcgu.o new file mode 100644 index 0000000..3a34bb7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.50z1dyxvw33cbja6a7wdds1n1.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.50z1dyxvw33cbja6a7wdds1n1.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.50z1dyxvw33cbja6a7wdds1n1.0g4pcz5.rcgu.o new file mode 100644 index 0000000..91cbf67 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.50z1dyxvw33cbja6a7wdds1n1.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.50z1dyxvw33cbja6a7wdds1n1.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.50z1dyxvw33cbja6a7wdds1n1.0qbw46o.rcgu.o new file mode 100644 index 0000000..987469d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.50z1dyxvw33cbja6a7wdds1n1.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.50z1dyxvw33cbja6a7wdds1n1.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.50z1dyxvw33cbja6a7wdds1n1.1skfroh.rcgu.o new file mode 100644 index 0000000..91cbf67 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.50z1dyxvw33cbja6a7wdds1n1.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.51qzzb3c4k34ct2nj7q2843dm.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.51qzzb3c4k34ct2nj7q2843dm.0985k0v.rcgu.o new file mode 100644 index 0000000..e849d6d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.51qzzb3c4k34ct2nj7q2843dm.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.51qzzb3c4k34ct2nj7q2843dm.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.51qzzb3c4k34ct2nj7q2843dm.0bjco5x.rcgu.o new file mode 100644 index 0000000..8557cf8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.51qzzb3c4k34ct2nj7q2843dm.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.51qzzb3c4k34ct2nj7q2843dm.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.51qzzb3c4k34ct2nj7q2843dm.0g4pcz5.rcgu.o new file mode 100644 index 0000000..e849d6d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.51qzzb3c4k34ct2nj7q2843dm.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.51qzzb3c4k34ct2nj7q2843dm.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.51qzzb3c4k34ct2nj7q2843dm.0qbw46o.rcgu.o new file mode 100644 index 0000000..faab833 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.51qzzb3c4k34ct2nj7q2843dm.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.51qzzb3c4k34ct2nj7q2843dm.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.51qzzb3c4k34ct2nj7q2843dm.1skfroh.rcgu.o new file mode 100644 index 0000000..e849d6d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.51qzzb3c4k34ct2nj7q2843dm.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.53ophst253s9emqtohd5m9dlb.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.53ophst253s9emqtohd5m9dlb.0985k0v.rcgu.o new file mode 100644 index 0000000..c170791 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.53ophst253s9emqtohd5m9dlb.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.53ophst253s9emqtohd5m9dlb.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.53ophst253s9emqtohd5m9dlb.0bjco5x.rcgu.o new file mode 100644 index 0000000..a86c53f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.53ophst253s9emqtohd5m9dlb.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.53ophst253s9emqtohd5m9dlb.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.53ophst253s9emqtohd5m9dlb.0g4pcz5.rcgu.o new file mode 100644 index 0000000..2017492 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.53ophst253s9emqtohd5m9dlb.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.53ophst253s9emqtohd5m9dlb.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.53ophst253s9emqtohd5m9dlb.0qbw46o.rcgu.o new file mode 100644 index 0000000..05565f5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.53ophst253s9emqtohd5m9dlb.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.53ophst253s9emqtohd5m9dlb.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.53ophst253s9emqtohd5m9dlb.1skfroh.rcgu.o new file mode 100644 index 0000000..df7dcde Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.53ophst253s9emqtohd5m9dlb.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5o2j8wnabqmxwphy6u9ib74uq.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5o2j8wnabqmxwphy6u9ib74uq.0bjco5x.rcgu.o new file mode 100644 index 0000000..992d503 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5o2j8wnabqmxwphy6u9ib74uq.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5o2j8wnabqmxwphy6u9ib74uq.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5o2j8wnabqmxwphy6u9ib74uq.0g4pcz5.rcgu.o new file mode 100644 index 0000000..992d503 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5o2j8wnabqmxwphy6u9ib74uq.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5o2j8wnabqmxwphy6u9ib74uq.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5o2j8wnabqmxwphy6u9ib74uq.0qbw46o.rcgu.o new file mode 100644 index 0000000..992d503 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5o2j8wnabqmxwphy6u9ib74uq.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5o2j8wnabqmxwphy6u9ib74uq.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5o2j8wnabqmxwphy6u9ib74uq.1skfroh.rcgu.o new file mode 100644 index 0000000..992d503 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5o2j8wnabqmxwphy6u9ib74uq.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5w9b7m0lyjqzn8wuiyl3acb36.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5w9b7m0lyjqzn8wuiyl3acb36.0985k0v.rcgu.o new file mode 100644 index 0000000..f061b0b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5w9b7m0lyjqzn8wuiyl3acb36.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5w9b7m0lyjqzn8wuiyl3acb36.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5w9b7m0lyjqzn8wuiyl3acb36.0bjco5x.rcgu.o new file mode 100644 index 0000000..89ccd64 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5w9b7m0lyjqzn8wuiyl3acb36.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5w9b7m0lyjqzn8wuiyl3acb36.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5w9b7m0lyjqzn8wuiyl3acb36.0g4pcz5.rcgu.o new file mode 100644 index 0000000..89ccd64 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5w9b7m0lyjqzn8wuiyl3acb36.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5w9b7m0lyjqzn8wuiyl3acb36.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5w9b7m0lyjqzn8wuiyl3acb36.0qbw46o.rcgu.o new file mode 100644 index 0000000..9110790 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5w9b7m0lyjqzn8wuiyl3acb36.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5w9b7m0lyjqzn8wuiyl3acb36.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5w9b7m0lyjqzn8wuiyl3acb36.1skfroh.rcgu.o new file mode 100644 index 0000000..eaba559 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5w9b7m0lyjqzn8wuiyl3acb36.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5wjiypvy8y0fqvq3jjl1lny4v.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5wjiypvy8y0fqvq3jjl1lny4v.0985k0v.rcgu.o new file mode 100644 index 0000000..1491511 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.5wjiypvy8y0fqvq3jjl1lny4v.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.656wifro0snexehgn7g51bv85.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.656wifro0snexehgn7g51bv85.0985k0v.rcgu.o new file mode 100644 index 0000000..ab37277 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.656wifro0snexehgn7g51bv85.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.656wifro0snexehgn7g51bv85.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.656wifro0snexehgn7g51bv85.0bjco5x.rcgu.o new file mode 100644 index 0000000..d576178 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.656wifro0snexehgn7g51bv85.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.656wifro0snexehgn7g51bv85.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.656wifro0snexehgn7g51bv85.0g4pcz5.rcgu.o new file mode 100644 index 0000000..d576178 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.656wifro0snexehgn7g51bv85.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.656wifro0snexehgn7g51bv85.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.656wifro0snexehgn7g51bv85.0qbw46o.rcgu.o new file mode 100644 index 0000000..d576178 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.656wifro0snexehgn7g51bv85.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.656wifro0snexehgn7g51bv85.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.656wifro0snexehgn7g51bv85.1skfroh.rcgu.o new file mode 100644 index 0000000..d576178 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.656wifro0snexehgn7g51bv85.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.7wv7m29eaz2jb2lgl4iu6p7af.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.7wv7m29eaz2jb2lgl4iu6p7af.0985k0v.rcgu.o new file mode 100644 index 0000000..81e82f7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.7wv7m29eaz2jb2lgl4iu6p7af.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.7wv7m29eaz2jb2lgl4iu6p7af.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.7wv7m29eaz2jb2lgl4iu6p7af.0bjco5x.rcgu.o new file mode 100644 index 0000000..ec4496e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.7wv7m29eaz2jb2lgl4iu6p7af.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.7wv7m29eaz2jb2lgl4iu6p7af.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.7wv7m29eaz2jb2lgl4iu6p7af.0g4pcz5.rcgu.o new file mode 100644 index 0000000..79049e0 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.7wv7m29eaz2jb2lgl4iu6p7af.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.7wv7m29eaz2jb2lgl4iu6p7af.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.7wv7m29eaz2jb2lgl4iu6p7af.0qbw46o.rcgu.o new file mode 100644 index 0000000..82545df Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.7wv7m29eaz2jb2lgl4iu6p7af.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.7wv7m29eaz2jb2lgl4iu6p7af.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.7wv7m29eaz2jb2lgl4iu6p7af.1skfroh.rcgu.o new file mode 100644 index 0000000..83eaabd Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.7wv7m29eaz2jb2lgl4iu6p7af.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.80sk2newm7tky0017xrj14qv8.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.80sk2newm7tky0017xrj14qv8.0985k0v.rcgu.o new file mode 100644 index 0000000..dba5fc1 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.80sk2newm7tky0017xrj14qv8.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.80sk2newm7tky0017xrj14qv8.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.80sk2newm7tky0017xrj14qv8.0bjco5x.rcgu.o new file mode 100644 index 0000000..1fa0460 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.80sk2newm7tky0017xrj14qv8.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.80sk2newm7tky0017xrj14qv8.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.80sk2newm7tky0017xrj14qv8.0g4pcz5.rcgu.o new file mode 100644 index 0000000..1fa0460 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.80sk2newm7tky0017xrj14qv8.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.80sk2newm7tky0017xrj14qv8.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.80sk2newm7tky0017xrj14qv8.0qbw46o.rcgu.o new file mode 100644 index 0000000..1fa0460 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.80sk2newm7tky0017xrj14qv8.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.80sk2newm7tky0017xrj14qv8.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.80sk2newm7tky0017xrj14qv8.1skfroh.rcgu.o new file mode 100644 index 0000000..1fa0460 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.80sk2newm7tky0017xrj14qv8.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.86n1e6yv72owi4qrwz91d4l5y.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.86n1e6yv72owi4qrwz91d4l5y.0985k0v.rcgu.o new file mode 100644 index 0000000..6a71443 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.86n1e6yv72owi4qrwz91d4l5y.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8qdilsalzgna7irtfmp01erh1.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8qdilsalzgna7irtfmp01erh1.0bjco5x.rcgu.o new file mode 100644 index 0000000..b0fc7d7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8qdilsalzgna7irtfmp01erh1.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8qdilsalzgna7irtfmp01erh1.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8qdilsalzgna7irtfmp01erh1.0g4pcz5.rcgu.o new file mode 100644 index 0000000..dcf86c7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8qdilsalzgna7irtfmp01erh1.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8qdilsalzgna7irtfmp01erh1.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8qdilsalzgna7irtfmp01erh1.0qbw46o.rcgu.o new file mode 100644 index 0000000..f5416b1 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8qdilsalzgna7irtfmp01erh1.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8qdilsalzgna7irtfmp01erh1.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8qdilsalzgna7irtfmp01erh1.1skfroh.rcgu.o new file mode 100644 index 0000000..a706085 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8qdilsalzgna7irtfmp01erh1.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8s0rbzcjkvhu7jd0rftgt6qia.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8s0rbzcjkvhu7jd0rftgt6qia.0985k0v.rcgu.o new file mode 100644 index 0000000..0242735 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8s0rbzcjkvhu7jd0rftgt6qia.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8s0rbzcjkvhu7jd0rftgt6qia.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8s0rbzcjkvhu7jd0rftgt6qia.0bjco5x.rcgu.o new file mode 100644 index 0000000..4cf592c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8s0rbzcjkvhu7jd0rftgt6qia.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8s0rbzcjkvhu7jd0rftgt6qia.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8s0rbzcjkvhu7jd0rftgt6qia.0g4pcz5.rcgu.o new file mode 100644 index 0000000..4cf592c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8s0rbzcjkvhu7jd0rftgt6qia.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8s0rbzcjkvhu7jd0rftgt6qia.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8s0rbzcjkvhu7jd0rftgt6qia.0qbw46o.rcgu.o new file mode 100644 index 0000000..4c15170 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8s0rbzcjkvhu7jd0rftgt6qia.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8s0rbzcjkvhu7jd0rftgt6qia.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8s0rbzcjkvhu7jd0rftgt6qia.1skfroh.rcgu.o new file mode 100644 index 0000000..4cf592c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8s0rbzcjkvhu7jd0rftgt6qia.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8ygy0piqirq25hhfhmsug7ym1.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8ygy0piqirq25hhfhmsug7ym1.0bjco5x.rcgu.o new file mode 100644 index 0000000..6e5b295 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8ygy0piqirq25hhfhmsug7ym1.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8ygy0piqirq25hhfhmsug7ym1.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8ygy0piqirq25hhfhmsug7ym1.0g4pcz5.rcgu.o new file mode 100644 index 0000000..2928029 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8ygy0piqirq25hhfhmsug7ym1.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8ygy0piqirq25hhfhmsug7ym1.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8ygy0piqirq25hhfhmsug7ym1.0qbw46o.rcgu.o new file mode 100644 index 0000000..a235587 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8ygy0piqirq25hhfhmsug7ym1.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8ygy0piqirq25hhfhmsug7ym1.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8ygy0piqirq25hhfhmsug7ym1.1skfroh.rcgu.o new file mode 100644 index 0000000..c7cb7aa Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.8ygy0piqirq25hhfhmsug7ym1.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.92m17unjpyntvduuvuybz6ylb.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.92m17unjpyntvduuvuybz6ylb.0bjco5x.rcgu.o new file mode 100644 index 0000000..9cb4379 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.92m17unjpyntvduuvuybz6ylb.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.92m17unjpyntvduuvuybz6ylb.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.92m17unjpyntvduuvuybz6ylb.0g4pcz5.rcgu.o new file mode 100644 index 0000000..7db590b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.92m17unjpyntvduuvuybz6ylb.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.92m17unjpyntvduuvuybz6ylb.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.92m17unjpyntvduuvuybz6ylb.0qbw46o.rcgu.o new file mode 100644 index 0000000..e2d08c8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.92m17unjpyntvduuvuybz6ylb.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.92m17unjpyntvduuvuybz6ylb.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.92m17unjpyntvduuvuybz6ylb.1skfroh.rcgu.o new file mode 100644 index 0000000..7db590b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.92m17unjpyntvduuvuybz6ylb.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9458kp1zorembbsd4dxj80hwh.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9458kp1zorembbsd4dxj80hwh.0985k0v.rcgu.o new file mode 100644 index 0000000..e01badc Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9458kp1zorembbsd4dxj80hwh.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9458kp1zorembbsd4dxj80hwh.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9458kp1zorembbsd4dxj80hwh.0bjco5x.rcgu.o new file mode 100644 index 0000000..1d7181b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9458kp1zorembbsd4dxj80hwh.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9458kp1zorembbsd4dxj80hwh.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9458kp1zorembbsd4dxj80hwh.0g4pcz5.rcgu.o new file mode 100644 index 0000000..1d7181b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9458kp1zorembbsd4dxj80hwh.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9458kp1zorembbsd4dxj80hwh.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9458kp1zorembbsd4dxj80hwh.0qbw46o.rcgu.o new file mode 100644 index 0000000..1d7181b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9458kp1zorembbsd4dxj80hwh.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9458kp1zorembbsd4dxj80hwh.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9458kp1zorembbsd4dxj80hwh.1skfroh.rcgu.o new file mode 100644 index 0000000..1d7181b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9458kp1zorembbsd4dxj80hwh.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.99282rbs75s2b8cztmlhqve7r.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.99282rbs75s2b8cztmlhqve7r.0985k0v.rcgu.o new file mode 100644 index 0000000..1c684a6 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.99282rbs75s2b8cztmlhqve7r.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.99282rbs75s2b8cztmlhqve7r.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.99282rbs75s2b8cztmlhqve7r.0bjco5x.rcgu.o new file mode 100644 index 0000000..878600d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.99282rbs75s2b8cztmlhqve7r.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.99282rbs75s2b8cztmlhqve7r.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.99282rbs75s2b8cztmlhqve7r.0g4pcz5.rcgu.o new file mode 100644 index 0000000..878600d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.99282rbs75s2b8cztmlhqve7r.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.99282rbs75s2b8cztmlhqve7r.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.99282rbs75s2b8cztmlhqve7r.0qbw46o.rcgu.o new file mode 100644 index 0000000..16d20b4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.99282rbs75s2b8cztmlhqve7r.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.99282rbs75s2b8cztmlhqve7r.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.99282rbs75s2b8cztmlhqve7r.1skfroh.rcgu.o new file mode 100644 index 0000000..878600d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.99282rbs75s2b8cztmlhqve7r.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9jladbgd9xbkh0qayled0hy6m.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9jladbgd9xbkh0qayled0hy6m.0985k0v.rcgu.o new file mode 100644 index 0000000..6bec726 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9jladbgd9xbkh0qayled0hy6m.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9jladbgd9xbkh0qayled0hy6m.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9jladbgd9xbkh0qayled0hy6m.0bjco5x.rcgu.o new file mode 100644 index 0000000..56ee957 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9jladbgd9xbkh0qayled0hy6m.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9jladbgd9xbkh0qayled0hy6m.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9jladbgd9xbkh0qayled0hy6m.0g4pcz5.rcgu.o new file mode 100644 index 0000000..56ee957 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9jladbgd9xbkh0qayled0hy6m.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9jladbgd9xbkh0qayled0hy6m.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9jladbgd9xbkh0qayled0hy6m.0qbw46o.rcgu.o new file mode 100644 index 0000000..56ee957 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9jladbgd9xbkh0qayled0hy6m.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9jladbgd9xbkh0qayled0hy6m.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9jladbgd9xbkh0qayled0hy6m.1skfroh.rcgu.o new file mode 100644 index 0000000..56ee957 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9jladbgd9xbkh0qayled0hy6m.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9mhs7kxj7p11s1ciq120kk4ql.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9mhs7kxj7p11s1ciq120kk4ql.0985k0v.rcgu.o new file mode 100644 index 0000000..b783d3d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9mhs7kxj7p11s1ciq120kk4ql.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9mhs7kxj7p11s1ciq120kk4ql.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9mhs7kxj7p11s1ciq120kk4ql.0bjco5x.rcgu.o new file mode 100644 index 0000000..dfe2f08 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9mhs7kxj7p11s1ciq120kk4ql.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9mhs7kxj7p11s1ciq120kk4ql.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9mhs7kxj7p11s1ciq120kk4ql.0g4pcz5.rcgu.o new file mode 100644 index 0000000..b099566 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9mhs7kxj7p11s1ciq120kk4ql.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9mhs7kxj7p11s1ciq120kk4ql.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9mhs7kxj7p11s1ciq120kk4ql.0qbw46o.rcgu.o new file mode 100644 index 0000000..60056a7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9mhs7kxj7p11s1ciq120kk4ql.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9mhs7kxj7p11s1ciq120kk4ql.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9mhs7kxj7p11s1ciq120kk4ql.1skfroh.rcgu.o new file mode 100644 index 0000000..b099566 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9mhs7kxj7p11s1ciq120kk4ql.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9ygnt0w995l0jqmx11a7ncwwk.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9ygnt0w995l0jqmx11a7ncwwk.0bjco5x.rcgu.o new file mode 100644 index 0000000..bc377a9 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9ygnt0w995l0jqmx11a7ncwwk.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9ygnt0w995l0jqmx11a7ncwwk.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9ygnt0w995l0jqmx11a7ncwwk.0qbw46o.rcgu.o new file mode 100644 index 0000000..bc377a9 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9ygnt0w995l0jqmx11a7ncwwk.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9zyoh6b3nub0u1xv0sfnehwwu.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9zyoh6b3nub0u1xv0sfnehwwu.0985k0v.rcgu.o new file mode 100644 index 0000000..43248ea Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9zyoh6b3nub0u1xv0sfnehwwu.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9zyoh6b3nub0u1xv0sfnehwwu.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9zyoh6b3nub0u1xv0sfnehwwu.0bjco5x.rcgu.o new file mode 100644 index 0000000..875afcb Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9zyoh6b3nub0u1xv0sfnehwwu.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9zyoh6b3nub0u1xv0sfnehwwu.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9zyoh6b3nub0u1xv0sfnehwwu.0qbw46o.rcgu.o new file mode 100644 index 0000000..d4769c9 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.9zyoh6b3nub0u1xv0sfnehwwu.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.a5mxl9mnspnyimx9xsmjpj19k.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.a5mxl9mnspnyimx9xsmjpj19k.0985k0v.rcgu.o new file mode 100644 index 0000000..a4ecc3e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.a5mxl9mnspnyimx9xsmjpj19k.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.a8e3h5o44d1h9j9lkmncruxyg.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.a8e3h5o44d1h9j9lkmncruxyg.0985k0v.rcgu.o new file mode 100644 index 0000000..bdca6e3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.a8e3h5o44d1h9j9lkmncruxyg.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.a8e3h5o44d1h9j9lkmncruxyg.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.a8e3h5o44d1h9j9lkmncruxyg.0bjco5x.rcgu.o new file mode 100644 index 0000000..bdca6e3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.a8e3h5o44d1h9j9lkmncruxyg.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.a8e3h5o44d1h9j9lkmncruxyg.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.a8e3h5o44d1h9j9lkmncruxyg.0g4pcz5.rcgu.o new file mode 100644 index 0000000..155c447 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.a8e3h5o44d1h9j9lkmncruxyg.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.a8e3h5o44d1h9j9lkmncruxyg.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.a8e3h5o44d1h9j9lkmncruxyg.0qbw46o.rcgu.o new file mode 100644 index 0000000..bdca6e3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.a8e3h5o44d1h9j9lkmncruxyg.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.a8e3h5o44d1h9j9lkmncruxyg.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.a8e3h5o44d1h9j9lkmncruxyg.1skfroh.rcgu.o new file mode 100644 index 0000000..155c447 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.a8e3h5o44d1h9j9lkmncruxyg.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ady26yo4utx5a5g6kinnz55ya.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ady26yo4utx5a5g6kinnz55ya.0985k0v.rcgu.o new file mode 100644 index 0000000..091cdd3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ady26yo4utx5a5g6kinnz55ya.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ady26yo4utx5a5g6kinnz55ya.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ady26yo4utx5a5g6kinnz55ya.0bjco5x.rcgu.o new file mode 100644 index 0000000..4fe80d4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ady26yo4utx5a5g6kinnz55ya.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ady26yo4utx5a5g6kinnz55ya.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ady26yo4utx5a5g6kinnz55ya.0g4pcz5.rcgu.o new file mode 100644 index 0000000..4fe80d4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ady26yo4utx5a5g6kinnz55ya.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ady26yo4utx5a5g6kinnz55ya.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ady26yo4utx5a5g6kinnz55ya.0qbw46o.rcgu.o new file mode 100644 index 0000000..4fe80d4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ady26yo4utx5a5g6kinnz55ya.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ady26yo4utx5a5g6kinnz55ya.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ady26yo4utx5a5g6kinnz55ya.1skfroh.rcgu.o new file mode 100644 index 0000000..4fe80d4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ady26yo4utx5a5g6kinnz55ya.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.aq3smbm17dqdi68u4bd9bpcoh.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.aq3smbm17dqdi68u4bd9bpcoh.0985k0v.rcgu.o new file mode 100644 index 0000000..18d892c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.aq3smbm17dqdi68u4bd9bpcoh.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.aq3smbm17dqdi68u4bd9bpcoh.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.aq3smbm17dqdi68u4bd9bpcoh.0bjco5x.rcgu.o new file mode 100644 index 0000000..696a950 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.aq3smbm17dqdi68u4bd9bpcoh.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.aq3smbm17dqdi68u4bd9bpcoh.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.aq3smbm17dqdi68u4bd9bpcoh.0g4pcz5.rcgu.o new file mode 100644 index 0000000..c0cf75d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.aq3smbm17dqdi68u4bd9bpcoh.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.aq3smbm17dqdi68u4bd9bpcoh.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.aq3smbm17dqdi68u4bd9bpcoh.0qbw46o.rcgu.o new file mode 100644 index 0000000..aa41c5d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.aq3smbm17dqdi68u4bd9bpcoh.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.aq3smbm17dqdi68u4bd9bpcoh.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.aq3smbm17dqdi68u4bd9bpcoh.1skfroh.rcgu.o new file mode 100644 index 0000000..18d892c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.aq3smbm17dqdi68u4bd9bpcoh.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.avvyke8267gdgdlar77m7pohf.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.avvyke8267gdgdlar77m7pohf.0985k0v.rcgu.o new file mode 100644 index 0000000..6bedf28 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.avvyke8267gdgdlar77m7pohf.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.avvyke8267gdgdlar77m7pohf.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.avvyke8267gdgdlar77m7pohf.0bjco5x.rcgu.o new file mode 100644 index 0000000..6bedf28 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.avvyke8267gdgdlar77m7pohf.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.avvyke8267gdgdlar77m7pohf.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.avvyke8267gdgdlar77m7pohf.0g4pcz5.rcgu.o new file mode 100644 index 0000000..6bedf28 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.avvyke8267gdgdlar77m7pohf.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.avvyke8267gdgdlar77m7pohf.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.avvyke8267gdgdlar77m7pohf.0qbw46o.rcgu.o new file mode 100644 index 0000000..6bedf28 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.avvyke8267gdgdlar77m7pohf.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.avvyke8267gdgdlar77m7pohf.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.avvyke8267gdgdlar77m7pohf.1skfroh.rcgu.o new file mode 100644 index 0000000..6bedf28 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.avvyke8267gdgdlar77m7pohf.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b1hspnliauri2zv4znamans9f.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b1hspnliauri2zv4znamans9f.0985k0v.rcgu.o new file mode 100644 index 0000000..40a75e5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b1hspnliauri2zv4znamans9f.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b1hspnliauri2zv4znamans9f.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b1hspnliauri2zv4znamans9f.0bjco5x.rcgu.o new file mode 100644 index 0000000..3857dda Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b1hspnliauri2zv4znamans9f.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b1hspnliauri2zv4znamans9f.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b1hspnliauri2zv4znamans9f.0g4pcz5.rcgu.o new file mode 100644 index 0000000..3857dda Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b1hspnliauri2zv4znamans9f.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b1hspnliauri2zv4znamans9f.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b1hspnliauri2zv4znamans9f.0qbw46o.rcgu.o new file mode 100644 index 0000000..3857dda Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b1hspnliauri2zv4znamans9f.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b1hspnliauri2zv4znamans9f.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b1hspnliauri2zv4znamans9f.1skfroh.rcgu.o new file mode 100644 index 0000000..40a75e5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b1hspnliauri2zv4znamans9f.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b2vurdbpjptqsp8sqay4ko603.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b2vurdbpjptqsp8sqay4ko603.0985k0v.rcgu.o new file mode 100644 index 0000000..4c8d42b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b2vurdbpjptqsp8sqay4ko603.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b7rkipql4a0hp1c3tvqbsml5i.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b7rkipql4a0hp1c3tvqbsml5i.0985k0v.rcgu.o new file mode 100644 index 0000000..340b94f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.b7rkipql4a0hp1c3tvqbsml5i.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.bln8mwbz336ek9561yd92t12m.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.bln8mwbz336ek9561yd92t12m.0985k0v.rcgu.o new file mode 100644 index 0000000..c1276f0 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.bln8mwbz336ek9561yd92t12m.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.brg2tst5g9on4zvj3u5tjzx16.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.brg2tst5g9on4zvj3u5tjzx16.0985k0v.rcgu.o new file mode 100644 index 0000000..5cd75d5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.brg2tst5g9on4zvj3u5tjzx16.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.brg2tst5g9on4zvj3u5tjzx16.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.brg2tst5g9on4zvj3u5tjzx16.0bjco5x.rcgu.o new file mode 100644 index 0000000..4229f21 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.brg2tst5g9on4zvj3u5tjzx16.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.brg2tst5g9on4zvj3u5tjzx16.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.brg2tst5g9on4zvj3u5tjzx16.0g4pcz5.rcgu.o new file mode 100644 index 0000000..4229f21 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.brg2tst5g9on4zvj3u5tjzx16.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.brg2tst5g9on4zvj3u5tjzx16.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.brg2tst5g9on4zvj3u5tjzx16.0qbw46o.rcgu.o new file mode 100644 index 0000000..4229f21 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.brg2tst5g9on4zvj3u5tjzx16.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.brg2tst5g9on4zvj3u5tjzx16.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.brg2tst5g9on4zvj3u5tjzx16.1skfroh.rcgu.o new file mode 100644 index 0000000..5cd75d5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.brg2tst5g9on4zvj3u5tjzx16.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.budmeoqmjkb4kkm7m37b2wpvy.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.budmeoqmjkb4kkm7m37b2wpvy.0985k0v.rcgu.o new file mode 100644 index 0000000..4d393ca Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.budmeoqmjkb4kkm7m37b2wpvy.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.byefa4c4uf6vc0gpz9ted0hai.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.byefa4c4uf6vc0gpz9ted0hai.0985k0v.rcgu.o new file mode 100644 index 0000000..1e99f3f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.byefa4c4uf6vc0gpz9ted0hai.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.byefa4c4uf6vc0gpz9ted0hai.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.byefa4c4uf6vc0gpz9ted0hai.0bjco5x.rcgu.o new file mode 100644 index 0000000..f43328d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.byefa4c4uf6vc0gpz9ted0hai.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.byefa4c4uf6vc0gpz9ted0hai.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.byefa4c4uf6vc0gpz9ted0hai.0g4pcz5.rcgu.o new file mode 100644 index 0000000..24108cc Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.byefa4c4uf6vc0gpz9ted0hai.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.byefa4c4uf6vc0gpz9ted0hai.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.byefa4c4uf6vc0gpz9ted0hai.0qbw46o.rcgu.o new file mode 100644 index 0000000..85f70ba Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.byefa4c4uf6vc0gpz9ted0hai.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.byefa4c4uf6vc0gpz9ted0hai.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.byefa4c4uf6vc0gpz9ted0hai.1skfroh.rcgu.o new file mode 100644 index 0000000..724f6a6 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.byefa4c4uf6vc0gpz9ted0hai.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.c6jw0wtxx11apwivk7slyncyf.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.c6jw0wtxx11apwivk7slyncyf.0985k0v.rcgu.o new file mode 100644 index 0000000..5c3c6c6 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.c6jw0wtxx11apwivk7slyncyf.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.c6jw0wtxx11apwivk7slyncyf.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.c6jw0wtxx11apwivk7slyncyf.0bjco5x.rcgu.o new file mode 100644 index 0000000..ffe9395 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.c6jw0wtxx11apwivk7slyncyf.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.c6jw0wtxx11apwivk7slyncyf.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.c6jw0wtxx11apwivk7slyncyf.0g4pcz5.rcgu.o new file mode 100644 index 0000000..5c3c6c6 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.c6jw0wtxx11apwivk7slyncyf.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.c6jw0wtxx11apwivk7slyncyf.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.c6jw0wtxx11apwivk7slyncyf.0qbw46o.rcgu.o new file mode 100644 index 0000000..4f6969c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.c6jw0wtxx11apwivk7slyncyf.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.c6jw0wtxx11apwivk7slyncyf.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.c6jw0wtxx11apwivk7slyncyf.1skfroh.rcgu.o new file mode 100644 index 0000000..5c3c6c6 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.c6jw0wtxx11apwivk7slyncyf.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.c8jeupzv10k5ifnde9i3a63cv.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.c8jeupzv10k5ifnde9i3a63cv.0985k0v.rcgu.o new file mode 100644 index 0000000..724c532 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.c8jeupzv10k5ifnde9i3a63cv.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.cop5yos05p0gvvjkl25nbvqjc.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.cop5yos05p0gvvjkl25nbvqjc.0985k0v.rcgu.o new file mode 100644 index 0000000..9d96a01 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.cop5yos05p0gvvjkl25nbvqjc.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.cop5yos05p0gvvjkl25nbvqjc.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.cop5yos05p0gvvjkl25nbvqjc.0bjco5x.rcgu.o new file mode 100644 index 0000000..8bd7af5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.cop5yos05p0gvvjkl25nbvqjc.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.cop5yos05p0gvvjkl25nbvqjc.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.cop5yos05p0gvvjkl25nbvqjc.0g4pcz5.rcgu.o new file mode 100644 index 0000000..8de3aed Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.cop5yos05p0gvvjkl25nbvqjc.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.cop5yos05p0gvvjkl25nbvqjc.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.cop5yos05p0gvvjkl25nbvqjc.0qbw46o.rcgu.o new file mode 100644 index 0000000..02d502a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.cop5yos05p0gvvjkl25nbvqjc.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.cop5yos05p0gvvjkl25nbvqjc.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.cop5yos05p0gvvjkl25nbvqjc.1skfroh.rcgu.o new file mode 100644 index 0000000..8de3aed Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.cop5yos05p0gvvjkl25nbvqjc.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.d b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.d new file mode 100644 index 0000000..f54a84a --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.d @@ -0,0 +1,8 @@ +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.d: src/lib.rs src/decoder.rs src/encoder.rs src/symbol.rs + +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f: src/lib.rs src/decoder.rs src/encoder.rs src/symbol.rs + +src/lib.rs: +src/decoder.rs: +src/encoder.rs: +src/symbol.rs: diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.d97f2c4l8u9l84wraay2m8f3o.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.d97f2c4l8u9l84wraay2m8f3o.0bjco5x.rcgu.o new file mode 100644 index 0000000..aa5df0e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.d97f2c4l8u9l84wraay2m8f3o.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.d97f2c4l8u9l84wraay2m8f3o.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.d97f2c4l8u9l84wraay2m8f3o.0g4pcz5.rcgu.o new file mode 100644 index 0000000..aa5df0e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.d97f2c4l8u9l84wraay2m8f3o.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.d97f2c4l8u9l84wraay2m8f3o.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.d97f2c4l8u9l84wraay2m8f3o.0qbw46o.rcgu.o new file mode 100644 index 0000000..aa5df0e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.d97f2c4l8u9l84wraay2m8f3o.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.d97f2c4l8u9l84wraay2m8f3o.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.d97f2c4l8u9l84wraay2m8f3o.1skfroh.rcgu.o new file mode 100644 index 0000000..aa5df0e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.d97f2c4l8u9l84wraay2m8f3o.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.djr3bn130dx9ip50szo18dngr.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.djr3bn130dx9ip50szo18dngr.0bjco5x.rcgu.o new file mode 100644 index 0000000..4c5be35 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.djr3bn130dx9ip50szo18dngr.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.djr3bn130dx9ip50szo18dngr.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.djr3bn130dx9ip50szo18dngr.0g4pcz5.rcgu.o new file mode 100644 index 0000000..29d81cb Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.djr3bn130dx9ip50szo18dngr.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.djr3bn130dx9ip50szo18dngr.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.djr3bn130dx9ip50szo18dngr.0qbw46o.rcgu.o new file mode 100644 index 0000000..e0e7f68 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.djr3bn130dx9ip50szo18dngr.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.djr3bn130dx9ip50szo18dngr.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.djr3bn130dx9ip50szo18dngr.1skfroh.rcgu.o new file mode 100644 index 0000000..29d81cb Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.djr3bn130dx9ip50szo18dngr.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dn344xbuc31yofx8v9zkx6csv.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dn344xbuc31yofx8v9zkx6csv.0985k0v.rcgu.o new file mode 100644 index 0000000..2e06138 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dn344xbuc31yofx8v9zkx6csv.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dn344xbuc31yofx8v9zkx6csv.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dn344xbuc31yofx8v9zkx6csv.0bjco5x.rcgu.o new file mode 100644 index 0000000..a1ad77c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dn344xbuc31yofx8v9zkx6csv.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dn344xbuc31yofx8v9zkx6csv.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dn344xbuc31yofx8v9zkx6csv.0g4pcz5.rcgu.o new file mode 100644 index 0000000..7fac31c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dn344xbuc31yofx8v9zkx6csv.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dn344xbuc31yofx8v9zkx6csv.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dn344xbuc31yofx8v9zkx6csv.0qbw46o.rcgu.o new file mode 100644 index 0000000..4e22b9a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dn344xbuc31yofx8v9zkx6csv.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dn344xbuc31yofx8v9zkx6csv.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dn344xbuc31yofx8v9zkx6csv.1skfroh.rcgu.o new file mode 100644 index 0000000..7fac31c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dn344xbuc31yofx8v9zkx6csv.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dqigc3gndrv1s6smjwgswogq8.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dqigc3gndrv1s6smjwgswogq8.0985k0v.rcgu.o new file mode 100644 index 0000000..2e4a99e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dqigc3gndrv1s6smjwgswogq8.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dqigc3gndrv1s6smjwgswogq8.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dqigc3gndrv1s6smjwgswogq8.0bjco5x.rcgu.o new file mode 100644 index 0000000..a30b789 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dqigc3gndrv1s6smjwgswogq8.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dqigc3gndrv1s6smjwgswogq8.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dqigc3gndrv1s6smjwgswogq8.0g4pcz5.rcgu.o new file mode 100644 index 0000000..c0d6d77 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dqigc3gndrv1s6smjwgswogq8.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dqigc3gndrv1s6smjwgswogq8.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dqigc3gndrv1s6smjwgswogq8.0qbw46o.rcgu.o new file mode 100644 index 0000000..a30b789 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dqigc3gndrv1s6smjwgswogq8.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dqigc3gndrv1s6smjwgswogq8.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dqigc3gndrv1s6smjwgswogq8.1skfroh.rcgu.o new file mode 100644 index 0000000..2e4a99e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.dqigc3gndrv1s6smjwgswogq8.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.duns98bjnh6wi5kxiscs0t88m.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.duns98bjnh6wi5kxiscs0t88m.0bjco5x.rcgu.o new file mode 100644 index 0000000..e97f68c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.duns98bjnh6wi5kxiscs0t88m.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.duns98bjnh6wi5kxiscs0t88m.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.duns98bjnh6wi5kxiscs0t88m.0g4pcz5.rcgu.o new file mode 100644 index 0000000..e97f68c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.duns98bjnh6wi5kxiscs0t88m.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.duns98bjnh6wi5kxiscs0t88m.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.duns98bjnh6wi5kxiscs0t88m.0qbw46o.rcgu.o new file mode 100644 index 0000000..e97f68c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.duns98bjnh6wi5kxiscs0t88m.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e3or4iwrfppqu88q3lanvoi73.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e3or4iwrfppqu88q3lanvoi73.0bjco5x.rcgu.o new file mode 100644 index 0000000..2025e68 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e3or4iwrfppqu88q3lanvoi73.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e3or4iwrfppqu88q3lanvoi73.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e3or4iwrfppqu88q3lanvoi73.0g4pcz5.rcgu.o new file mode 100644 index 0000000..2025e68 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e3or4iwrfppqu88q3lanvoi73.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e3or4iwrfppqu88q3lanvoi73.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e3or4iwrfppqu88q3lanvoi73.0qbw46o.rcgu.o new file mode 100644 index 0000000..2025e68 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e3or4iwrfppqu88q3lanvoi73.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e3or4iwrfppqu88q3lanvoi73.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e3or4iwrfppqu88q3lanvoi73.1skfroh.rcgu.o new file mode 100644 index 0000000..2025e68 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e3or4iwrfppqu88q3lanvoi73.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e50sasdlgvwe2l9iz7j04oimm.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e50sasdlgvwe2l9iz7j04oimm.0985k0v.rcgu.o new file mode 100644 index 0000000..ac7c444 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e50sasdlgvwe2l9iz7j04oimm.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e5m0lj32fqjm01ystyfh7gach.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e5m0lj32fqjm01ystyfh7gach.0985k0v.rcgu.o new file mode 100644 index 0000000..1d1062b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e5m0lj32fqjm01ystyfh7gach.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e5m0lj32fqjm01ystyfh7gach.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e5m0lj32fqjm01ystyfh7gach.0bjco5x.rcgu.o new file mode 100644 index 0000000..80912c3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e5m0lj32fqjm01ystyfh7gach.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e5m0lj32fqjm01ystyfh7gach.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e5m0lj32fqjm01ystyfh7gach.0g4pcz5.rcgu.o new file mode 100644 index 0000000..8e32b19 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e5m0lj32fqjm01ystyfh7gach.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e5m0lj32fqjm01ystyfh7gach.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e5m0lj32fqjm01ystyfh7gach.0qbw46o.rcgu.o new file mode 100644 index 0000000..2ab9fa0 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e5m0lj32fqjm01ystyfh7gach.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e5m0lj32fqjm01ystyfh7gach.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e5m0lj32fqjm01ystyfh7gach.1skfroh.rcgu.o new file mode 100644 index 0000000..13133a3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.e5m0lj32fqjm01ystyfh7gach.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ebv0591344la8unu8qg9ou5f1.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ebv0591344la8unu8qg9ou5f1.0bjco5x.rcgu.o new file mode 100644 index 0000000..9457a8b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ebv0591344la8unu8qg9ou5f1.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ebv0591344la8unu8qg9ou5f1.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ebv0591344la8unu8qg9ou5f1.0g4pcz5.rcgu.o new file mode 100644 index 0000000..9457a8b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ebv0591344la8unu8qg9ou5f1.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ebv0591344la8unu8qg9ou5f1.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ebv0591344la8unu8qg9ou5f1.0qbw46o.rcgu.o new file mode 100644 index 0000000..9457a8b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ebv0591344la8unu8qg9ou5f1.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ebv0591344la8unu8qg9ou5f1.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ebv0591344la8unu8qg9ou5f1.1skfroh.rcgu.o new file mode 100644 index 0000000..9457a8b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.ebv0591344la8unu8qg9ou5f1.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.emjw14o7hkmtzdwlt8ar3e7c1.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.emjw14o7hkmtzdwlt8ar3e7c1.0985k0v.rcgu.o new file mode 100644 index 0000000..0d7b12f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.emjw14o7hkmtzdwlt8ar3e7c1.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.emjw14o7hkmtzdwlt8ar3e7c1.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.emjw14o7hkmtzdwlt8ar3e7c1.0bjco5x.rcgu.o new file mode 100644 index 0000000..0d7b12f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.emjw14o7hkmtzdwlt8ar3e7c1.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.emjw14o7hkmtzdwlt8ar3e7c1.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.emjw14o7hkmtzdwlt8ar3e7c1.0g4pcz5.rcgu.o new file mode 100644 index 0000000..0d7b12f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.emjw14o7hkmtzdwlt8ar3e7c1.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.emjw14o7hkmtzdwlt8ar3e7c1.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.emjw14o7hkmtzdwlt8ar3e7c1.0qbw46o.rcgu.o new file mode 100644 index 0000000..0d7b12f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.emjw14o7hkmtzdwlt8ar3e7c1.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.emjw14o7hkmtzdwlt8ar3e7c1.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.emjw14o7hkmtzdwlt8ar3e7c1.1skfroh.rcgu.o new file mode 100644 index 0000000..0d7b12f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.emjw14o7hkmtzdwlt8ar3e7c1.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f0gv0xl35902e8iez2frskrkk.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f0gv0xl35902e8iez2frskrkk.0bjco5x.rcgu.o new file mode 100644 index 0000000..fa431f6 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f0gv0xl35902e8iez2frskrkk.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f0gv0xl35902e8iez2frskrkk.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f0gv0xl35902e8iez2frskrkk.0qbw46o.rcgu.o new file mode 100644 index 0000000..fa431f6 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f0gv0xl35902e8iez2frskrkk.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f17j5xmm7f5xkorlnhmn4icrw.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f17j5xmm7f5xkorlnhmn4icrw.0985k0v.rcgu.o new file mode 100644 index 0000000..ae2eaaf Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f17j5xmm7f5xkorlnhmn4icrw.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f17j5xmm7f5xkorlnhmn4icrw.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f17j5xmm7f5xkorlnhmn4icrw.0bjco5x.rcgu.o new file mode 100644 index 0000000..ae2eaaf Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f17j5xmm7f5xkorlnhmn4icrw.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f17j5xmm7f5xkorlnhmn4icrw.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f17j5xmm7f5xkorlnhmn4icrw.0g4pcz5.rcgu.o new file mode 100644 index 0000000..ae2eaaf Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f17j5xmm7f5xkorlnhmn4icrw.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f17j5xmm7f5xkorlnhmn4icrw.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f17j5xmm7f5xkorlnhmn4icrw.0qbw46o.rcgu.o new file mode 100644 index 0000000..ae2eaaf Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f17j5xmm7f5xkorlnhmn4icrw.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f17j5xmm7f5xkorlnhmn4icrw.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f17j5xmm7f5xkorlnhmn4icrw.1skfroh.rcgu.o new file mode 100644 index 0000000..ae2eaaf Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f17j5xmm7f5xkorlnhmn4icrw.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f2yypmtfike81c4dmeuaz1ctd.0985k0v.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f2yypmtfike81c4dmeuaz1ctd.0985k0v.rcgu.o new file mode 100644 index 0000000..a67cf35 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f2yypmtfike81c4dmeuaz1ctd.0985k0v.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f2yypmtfike81c4dmeuaz1ctd.0bjco5x.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f2yypmtfike81c4dmeuaz1ctd.0bjco5x.rcgu.o new file mode 100644 index 0000000..85c49f3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f2yypmtfike81c4dmeuaz1ctd.0bjco5x.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f2yypmtfike81c4dmeuaz1ctd.0g4pcz5.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f2yypmtfike81c4dmeuaz1ctd.0g4pcz5.rcgu.o new file mode 100644 index 0000000..2daf3f0 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f2yypmtfike81c4dmeuaz1ctd.0g4pcz5.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f2yypmtfike81c4dmeuaz1ctd.0qbw46o.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f2yypmtfike81c4dmeuaz1ctd.0qbw46o.rcgu.o new file mode 100644 index 0000000..59a84c7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f2yypmtfike81c4dmeuaz1ctd.0qbw46o.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f2yypmtfike81c4dmeuaz1ctd.1skfroh.rcgu.o b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f2yypmtfike81c4dmeuaz1ctd.1skfroh.rcgu.o new file mode 100644 index 0000000..2daf3f0 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-438db3615535319f.f2yypmtfike81c4dmeuaz1ctd.1skfroh.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-8f5b793c941efed9.d b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-8f5b793c941efed9.d new file mode 100644 index 0000000..8093ba8 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-8f5b793c941efed9.d @@ -0,0 +1,8 @@ +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/fountain_core-8f5b793c941efed9.d: src/lib.rs src/decoder.rs src/encoder.rs src/symbol.rs + +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/libfountain_core-8f5b793c941efed9.rmeta: src/lib.rs src/decoder.rs src/encoder.rs src/symbol.rs + +src/lib.rs: +src/decoder.rs: +src/encoder.rs: +src/symbol.rs: diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/libfountain_core-1148e22e56624882.rlib b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/libfountain_core-1148e22e56624882.rlib new file mode 100644 index 0000000..6371df9 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/libfountain_core-1148e22e56624882.rlib differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/libfountain_core-1148e22e56624882.rmeta b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/libfountain_core-1148e22e56624882.rmeta new file mode 100644 index 0000000..0b65448 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/libfountain_core-1148e22e56624882.rmeta differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/libfountain_core-8f5b793c941efed9.rmeta b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/libfountain_core-8f5b793c941efed9.rmeta new file mode 100644 index 0000000..9b8e8d1 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/deps/libfountain_core-8f5b793c941efed9.rmeta differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/incremental/fountain_core-259epqzeg11m4/s-hiaqe6cr7v-0acc9h0-4kzgaz8xwqp7yzvicg2nyegsb/dep-graph.bin b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/incremental/fountain_core-259epqzeg11m4/s-hiaqe6cr7v-0acc9h0-4kzgaz8xwqp7yzvicg2nyegsb/dep-graph.bin new file mode 100644 index 0000000..cc3c79a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/incremental/fountain_core-259epqzeg11m4/s-hiaqe6cr7v-0acc9h0-4kzgaz8xwqp7yzvicg2nyegsb/dep-graph.bin differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/incremental/fountain_core-259epqzeg11m4/s-hiaqe6cr7v-0acc9h0-4kzgaz8xwqp7yzvicg2nyegsb/metadata.rmeta b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/incremental/fountain_core-259epqzeg11m4/s-hiaqe6cr7v-0acc9h0-4kzgaz8xwqp7yzvicg2nyegsb/metadata.rmeta new file mode 100644 index 0000000..9b8e8d1 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/incremental/fountain_core-259epqzeg11m4/s-hiaqe6cr7v-0acc9h0-4kzgaz8xwqp7yzvicg2nyegsb/metadata.rmeta differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/incremental/fountain_core-259epqzeg11m4/s-hiaqe6cr7v-0acc9h0-4kzgaz8xwqp7yzvicg2nyegsb/query-cache.bin b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/incremental/fountain_core-259epqzeg11m4/s-hiaqe6cr7v-0acc9h0-4kzgaz8xwqp7yzvicg2nyegsb/query-cache.bin new file mode 100644 index 0000000..3fce617 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/incremental/fountain_core-259epqzeg11m4/s-hiaqe6cr7v-0acc9h0-4kzgaz8xwqp7yzvicg2nyegsb/query-cache.bin differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/incremental/fountain_core-259epqzeg11m4/s-hiaqe6cr7v-0acc9h0-4kzgaz8xwqp7yzvicg2nyegsb/work-products.bin b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/incremental/fountain_core-259epqzeg11m4/s-hiaqe6cr7v-0acc9h0-4kzgaz8xwqp7yzvicg2nyegsb/work-products.bin new file mode 100644 index 0000000..f6a3243 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/incremental/fountain_core-259epqzeg11m4/s-hiaqe6cr7v-0acc9h0-4kzgaz8xwqp7yzvicg2nyegsb/work-products.bin differ diff --git a/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/incremental/fountain_core-259epqzeg11m4/s-hiaqe6cr7v-0acc9h0.lock b/implementations/03-animated-qr-visual-handshake/fountain-core/target/debug/incremental/fountain_core-259epqzeg11m4/s-hiaqe6cr7v-0acc9h0.lock new file mode 100755 index 0000000..e69de29 diff --git a/implementations/03-animated-qr-visual-handshake/tools/qr-frame-generator/README.md b/implementations/03-animated-qr-visual-handshake/tools/qr-frame-generator/README.md new file mode 100644 index 0000000..d1aab0d --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/qr-frame-generator/README.md @@ -0,0 +1,21 @@ +# QR Frame Generator + +Runnable utility to chunk input into frame payload strings suitable for animated QR transport. + +## Generator + +```bash +python3 tools/qr-frame-generator/generate_frames.py --text "hello" --frame-bytes 6 --format jsonl +``` + +Output format `jsonl` emits rows with metadata + `payload_string` in this shape: + +`xhv1::::::` + +## Parser Utility + +```bash +python3 tools/qr-frame-generator/parse_payload.py "xhv1:123:5:0:2:0:aGVsbG8=" +``` + +Parses the payload into structured JSON, including decoded chunk bytes (`chunk_hex`). diff --git a/implementations/03-animated-qr-visual-handshake/tools/qr-frame-generator/generate_frames.py b/implementations/03-animated-qr-visual-handshake/tools/qr-frame-generator/generate_frames.py new file mode 100755 index 0000000..d625ceb --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/qr-frame-generator/generate_frames.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python3 +import argparse +import base64 +import hashlib +import json +import sys +from typing import Iterable + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description="Chunk input and emit QR frame payload strings with metadata." + ) + source = parser.add_mutually_exclusive_group(required=True) + source.add_argument("--text", help="Plain UTF-8 text input") + source.add_argument( + "--base64", dest="base64_input", help="Base64-encoded binary input" + ) + parser.add_argument( + "--frame-bytes", type=int, default=64, help="Data bytes per frame (default: 64)" + ) + parser.add_argument( + "--transfer-id", + help="Optional transfer id override (default derives from SHA-256 digest)", + ) + parser.add_argument( + "--format", + choices=["jsonl", "plain"], + default="jsonl", + help="Output format (default: jsonl)", + ) + return parser.parse_args() + + +def chunk_bytes(buf: bytes, width: int) -> Iterable[bytes]: + for i in range(0, len(buf), width): + yield buf[i : i + width] + + +def derive_transfer_id(payload: bytes) -> str: + digest = hashlib.sha256(payload).hexdigest() + return digest[:16] + + +def main() -> int: + args = parse_args() + if args.frame_bytes <= 0: + print("frame size must be > 0", file=sys.stderr) + return 2 + + if args.text is not None: + payload = args.text.encode("utf-8") + input_mode = "text" + else: + try: + payload = base64.b64decode(args.base64_input, validate=True) + except Exception as exc: # noqa: BLE001 + print(f"invalid base64: {exc}", file=sys.stderr) + return 2 + input_mode = "base64" + + transfer_id = args.transfer_id or derive_transfer_id(payload) + frames = list(chunk_bytes(payload, args.frame_bytes)) + total = len(frames) + + for seq, frame in enumerate(frames): + frame_b64 = base64.b64encode(frame).decode("ascii") + neighbors_csv = str(seq) + payload_string = f"xhv1:{transfer_id}:{len(payload)}:{seq}:{total}:{neighbors_csv}:{frame_b64}" + if args.format == "plain": + print(payload_string) + continue + + row = { + "transfer_id": transfer_id, + "input_mode": input_mode, + "payload_len": len(payload), + "frame_bytes": args.frame_bytes, + "sequence": seq, + "total": total, + "neighbors_csv": neighbors_csv, + "chunk_b64": frame_b64, + "payload_string": payload_string, + } + print(json.dumps(row, separators=(",", ":"))) + + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/implementations/03-animated-qr-visual-handshake/tools/qr-frame-generator/parse_payload.py b/implementations/03-animated-qr-visual-handshake/tools/qr-frame-generator/parse_payload.py new file mode 100644 index 0000000..cf173ca --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/qr-frame-generator/parse_payload.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 +"""Parse xhv1 frame payload strings into structured fields.""" + +import argparse +import base64 +import json +from dataclasses import asdict, dataclass + + +@dataclass +class ParsedFrame: + version: str + transfer_id: int + payload_len: int + sequence: int + total: int + neighbors: list[int] + chunk_hex: str + chunk_b64: str + + +def parse_payload(payload: str) -> ParsedFrame: + parts = payload.strip().split(":") + if len(parts) != 7: + raise ValueError("expected 7 colon-delimited fields") + + version, transfer_id, payload_len, sequence, total, neighbors_csv, chunk_b64 = parts + if version != "xhv1": + raise ValueError("unsupported version") + + neighbors = [int(v) for v in neighbors_csv.split(",") if v] + if not neighbors: + raise ValueError("neighbors field must not be empty") + + chunk = base64.b64decode(chunk_b64, validate=True) + + return ParsedFrame( + version=version, + transfer_id=int(transfer_id), + payload_len=int(payload_len), + sequence=int(sequence), + total=int(total), + neighbors=neighbors, + chunk_hex=chunk.hex(), + chunk_b64=chunk_b64, + ) + + +def main() -> None: + parser = argparse.ArgumentParser(description="Parse xhv1 frame payload string.") + parser.add_argument("payload", help="payload in xhv1 format") + args = parser.parse_args() + + parsed = parse_payload(args.payload) + print(json.dumps(asdict(parsed), ensure_ascii=True, indent=2)) + + +if __name__ == "__main__": + main() diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/Cargo.lock b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/Cargo.lock new file mode 100644 index 0000000..bfc266d --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/Cargo.lock @@ -0,0 +1,14 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "fountain-core" +version = "0.1.0" + +[[package]] +name = "replay-benchmark" +version = "0.1.0" +dependencies = [ + "fountain-core", +] diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/Cargo.toml b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/Cargo.toml new file mode 100644 index 0000000..2cc00b1 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "replay-benchmark" +version = "0.1.0" +edition = "2021" + +[dependencies] +fountain-core = { path = "../../fountain-core" } diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/README.md b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/README.md new file mode 100644 index 0000000..54f9ffe --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/README.md @@ -0,0 +1,19 @@ +# Replay Benchmark + +Companion benchmark utility that replays encoded symbols with deterministic frame drops and evaluates decode recovery rates via `fountain-core` APIs. + +## Usage + +```bash +cargo run --manifest-path tools/replay-benchmark/Cargo.toml -- "visual-handshake" 6 "0,10,20,30,40,50" 20 +``` + +Arguments: +1. `payload` (default: `animated-qr-visual-handshake`) +2. `frame_size` in bytes (default: `12`) +3. `drop_percents_csv` 0-99 list (default: `0,10,20,30,40,50`) +4. `runs_per_drop` (default: `20`) + +Output includes a CSV summary per drop percentage: + +`drop_percent,recovery_rate,decoded_match_rate,avg_received_symbols` diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/src/main.rs b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/src/main.rs new file mode 100644 index 0000000..a1eaac5 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/src/main.rs @@ -0,0 +1,88 @@ +use fountain_core::decoder::decode; +use fountain_core::encoder::encode; + +fn should_drop(seq: u32, percent: u8) -> bool { + if percent == 0 { + return false; + } + (seq.wrapping_mul(37).wrapping_add(17) % 100) < percent as u32 +} + +fn parse_drop_list(raw: Option) -> Vec { + let Some(raw) = raw else { + return vec![0, 10, 20, 30, 40, 50]; + }; + + let mut out: Vec = raw + .split(',') + .filter_map(|v| v.trim().parse::().ok()) + .map(|v| v.min(99)) + .collect(); + + if out.is_empty() { + out = vec![0, 10, 20, 30, 40, 50]; + } + out.sort_unstable(); + out.dedup(); + out +} + +fn main() { + let mut args = std::env::args().skip(1); + let payload = args + .next() + .unwrap_or_else(|| "animated-qr-visual-handshake".to_string()); + let frame_size = args + .next() + .and_then(|v| v.parse::().ok()) + .unwrap_or(12); + let drop_percents = parse_drop_list(args.next()); + let runs = args + .next() + .and_then(|v| v.parse::().ok()) + .unwrap_or(20) + .max(1); + + let encoded = encode(payload.as_bytes(), frame_size); + + println!("payload_len={}", payload.len()); + println!("frame_size={}", frame_size); + println!("encoded_symbols={}", encoded.len()); + println!("runs_per_drop={}", runs); + println!("drop_percents={:?}", drop_percents); + println!("drop_percent,recovery_rate,decoded_match_rate,avg_received_symbols"); + + for drop_percent in drop_percents { + let mut success_count = 0u32; + let mut match_count = 0u32; + let mut received_total = 0u32; + + for run in 0..runs { + let sent: Vec<_> = encoded + .iter() + .filter(|s| !should_drop(s.sequence.wrapping_add(run), drop_percent)) + .cloned() + .collect(); + + received_total += sent.len() as u32; + match decode(&sent) { + Ok(decoded) => { + success_count += 1; + if decoded == payload.as_bytes() { + match_count += 1; + } + } + Err(_) => {} + } + } + + let recovery_rate = success_count as f64 / runs as f64; + let match_rate = match_count as f64 / runs as f64; + let avg_received = received_total as f64 / runs as f64; + + println!( + "{},{:.3},{:.3},{:.2}", + drop_percent, recovery_rate, match_rate, avg_received + ); + } +} diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/.rustc_info.json b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/.rustc_info.json new file mode 100644 index 0000000..089c4b9 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/.rustc_info.json @@ -0,0 +1 @@ +{"rustc_fingerprint":18012616535324830850,"outputs":{"7971740275564407648":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n/Users/dennis_leedennis_lee/.rustup/toolchains/stable-aarch64-apple-darwin\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"aarch64\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_feature=\"aes\"\ntarget_feature=\"crc\"\ntarget_feature=\"dit\"\ntarget_feature=\"dotprod\"\ntarget_feature=\"dpb\"\ntarget_feature=\"dpb2\"\ntarget_feature=\"fcma\"\ntarget_feature=\"fhm\"\ntarget_feature=\"flagm\"\ntarget_feature=\"fp16\"\ntarget_feature=\"frintts\"\ntarget_feature=\"jsconv\"\ntarget_feature=\"lor\"\ntarget_feature=\"lse\"\ntarget_feature=\"neon\"\ntarget_feature=\"paca\"\ntarget_feature=\"pacg\"\ntarget_feature=\"pan\"\ntarget_feature=\"pmuv3\"\ntarget_feature=\"ras\"\ntarget_feature=\"rcpc\"\ntarget_feature=\"rcpc2\"\ntarget_feature=\"rdm\"\ntarget_feature=\"sb\"\ntarget_feature=\"sha2\"\ntarget_feature=\"sha3\"\ntarget_feature=\"ssbs\"\ntarget_feature=\"vh\"\ntarget_has_atomic=\"128\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"macos\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"apple\"\nunix\n","stderr":""},"17747080675513052775":{"success":true,"status":"","code":0,"stdout":"rustc 1.92.0 (ded5c06cf 2025-12-08)\nbinary: rustc\ncommit-hash: ded5c06cf21d2b93bffd5d884aa6e96934ee4234\ncommit-date: 2025-12-08\nhost: aarch64-apple-darwin\nrelease: 1.92.0\nLLVM version: 21.1.3\n","stderr":""}},"successes":{}} \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/CACHEDIR.TAG b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/CACHEDIR.TAG new file mode 100644 index 0000000..20d7c31 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/CACHEDIR.TAG @@ -0,0 +1,3 @@ +Signature: 8a477f597d28d172789f06886806bc55 +# This file is a cache directory tag created by cargo. +# For information about cache directory tags see https://bford.info/cachedir/ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.cargo-lock b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.cargo-lock new file mode 100644 index 0000000..e69de29 diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/fountain-core-ea9c6a1f1ce4a562/dep-lib-fountain_core b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/fountain-core-ea9c6a1f1ce4a562/dep-lib-fountain_core new file mode 100644 index 0000000..7e74ee9 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/fountain-core-ea9c6a1f1ce4a562/dep-lib-fountain_core differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/fountain-core-ea9c6a1f1ce4a562/invoked.timestamp b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/fountain-core-ea9c6a1f1ce4a562/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/fountain-core-ea9c6a1f1ce4a562/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/fountain-core-ea9c6a1f1ce4a562/lib-fountain_core b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/fountain-core-ea9c6a1f1ce4a562/lib-fountain_core new file mode 100644 index 0000000..4be0715 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/fountain-core-ea9c6a1f1ce4a562/lib-fountain_core @@ -0,0 +1 @@ +e392818568bb776b \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/fountain-core-ea9c6a1f1ce4a562/lib-fountain_core.json b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/fountain-core-ea9c6a1f1ce4a562/lib-fountain_core.json new file mode 100644 index 0000000..e1e5f65 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/fountain-core-ea9c6a1f1ce4a562/lib-fountain_core.json @@ -0,0 +1 @@ +{"rustc":18415816196306954164,"features":"[]","declared_features":"[]","target":17725555670775808738,"profile":6675295047989516842,"path":5909882800487166671,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/fountain-core-ea9c6a1f1ce4a562/dep-lib-fountain_core","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0} \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-1af0e6b6768dba03/bin-replay-benchmark b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-1af0e6b6768dba03/bin-replay-benchmark new file mode 100644 index 0000000..d99d10d --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-1af0e6b6768dba03/bin-replay-benchmark @@ -0,0 +1 @@ +e40c1c192ef441fe \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-1af0e6b6768dba03/bin-replay-benchmark.json b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-1af0e6b6768dba03/bin-replay-benchmark.json new file mode 100644 index 0000000..80057a4 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-1af0e6b6768dba03/bin-replay-benchmark.json @@ -0,0 +1 @@ +{"rustc":18415816196306954164,"features":"[]","declared_features":"[]","target":14575289204989322514,"profile":6675295047989516842,"path":4942398508502643691,"deps":[[18177454002193631099,"fountain_core",false,7743864141877711587]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/replay-benchmark-1af0e6b6768dba03/dep-bin-replay-benchmark","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0} \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-1af0e6b6768dba03/dep-bin-replay-benchmark b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-1af0e6b6768dba03/dep-bin-replay-benchmark new file mode 100644 index 0000000..5c54f74 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-1af0e6b6768dba03/dep-bin-replay-benchmark differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-1af0e6b6768dba03/invoked.timestamp b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-1af0e6b6768dba03/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-1af0e6b6768dba03/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-5214607ad0166ce1/dep-test-bin-replay-benchmark b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-5214607ad0166ce1/dep-test-bin-replay-benchmark new file mode 100644 index 0000000..5c54f74 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-5214607ad0166ce1/dep-test-bin-replay-benchmark differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-5214607ad0166ce1/invoked.timestamp b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-5214607ad0166ce1/invoked.timestamp new file mode 100644 index 0000000..e00328d --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-5214607ad0166ce1/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-5214607ad0166ce1/test-bin-replay-benchmark b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-5214607ad0166ce1/test-bin-replay-benchmark new file mode 100644 index 0000000..9ec4c15 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-5214607ad0166ce1/test-bin-replay-benchmark @@ -0,0 +1 @@ +a06b39ab2551418b \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-5214607ad0166ce1/test-bin-replay-benchmark.json b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-5214607ad0166ce1/test-bin-replay-benchmark.json new file mode 100644 index 0000000..608d31e --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/.fingerprint/replay-benchmark-5214607ad0166ce1/test-bin-replay-benchmark.json @@ -0,0 +1 @@ +{"rustc":18415816196306954164,"features":"[]","declared_features":"[]","target":14575289204989322514,"profile":15057526963834790232,"path":4942398508502643691,"deps":[[18177454002193631099,"fountain_core",false,7743864141877711587]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/replay-benchmark-5214607ad0166ce1/dep-test-bin-replay-benchmark","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0} \ No newline at end of file diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.003a5qa6hswosm0x8k4ok5ldz.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.003a5qa6hswosm0x8k4ok5ldz.08ai3k3.rcgu.o new file mode 100644 index 0000000..9db58bf Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.003a5qa6hswosm0x8k4ok5ldz.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.003a5qa6hswosm0x8k4ok5ldz.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.003a5qa6hswosm0x8k4ok5ldz.1p8vpix.rcgu.o new file mode 100644 index 0000000..9db58bf Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.003a5qa6hswosm0x8k4ok5ldz.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.0712u3e4u8kxlzqkpbfc5n240.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.0712u3e4u8kxlzqkpbfc5n240.1p8vpix.rcgu.o new file mode 100644 index 0000000..d05a230 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.0712u3e4u8kxlzqkpbfc5n240.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.07oe19ozifk0he0kgcf13csor.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.07oe19ozifk0he0kgcf13csor.1p8vpix.rcgu.o new file mode 100644 index 0000000..8c901e4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.07oe19ozifk0he0kgcf13csor.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.09ufmvshmdnj8fy6hqg3x7s11.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.09ufmvshmdnj8fy6hqg3x7s11.08ai3k3.rcgu.o new file mode 100644 index 0000000..aaa07f5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.09ufmvshmdnj8fy6hqg3x7s11.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.09ufmvshmdnj8fy6hqg3x7s11.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.09ufmvshmdnj8fy6hqg3x7s11.1p8vpix.rcgu.o new file mode 100644 index 0000000..d844ce5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.09ufmvshmdnj8fy6hqg3x7s11.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.0nl9881bws0ua01mdmlooz3ch.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.0nl9881bws0ua01mdmlooz3ch.08ai3k3.rcgu.o new file mode 100644 index 0000000..6e47c26 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.0nl9881bws0ua01mdmlooz3ch.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.0nl9881bws0ua01mdmlooz3ch.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.0nl9881bws0ua01mdmlooz3ch.1p8vpix.rcgu.o new file mode 100644 index 0000000..36f3bfc Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.0nl9881bws0ua01mdmlooz3ch.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.0pgwvez9h04ty211hcnvgxysm.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.0pgwvez9h04ty211hcnvgxysm.08ai3k3.rcgu.o new file mode 100644 index 0000000..e84de91 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.0pgwvez9h04ty211hcnvgxysm.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.0pgwvez9h04ty211hcnvgxysm.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.0pgwvez9h04ty211hcnvgxysm.1p8vpix.rcgu.o new file mode 100644 index 0000000..2a7521a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.0pgwvez9h04ty211hcnvgxysm.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.0ropfcre8mo0fccv675pexy8o.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.0ropfcre8mo0fccv675pexy8o.1p8vpix.rcgu.o new file mode 100644 index 0000000..21cdfd6 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.0ropfcre8mo0fccv675pexy8o.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.12jvnd6an8m2q58iypscl1uvg.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.12jvnd6an8m2q58iypscl1uvg.08ai3k3.rcgu.o new file mode 100644 index 0000000..eb40356 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.12jvnd6an8m2q58iypscl1uvg.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.12jvnd6an8m2q58iypscl1uvg.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.12jvnd6an8m2q58iypscl1uvg.1p8vpix.rcgu.o new file mode 100644 index 0000000..5db955a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.12jvnd6an8m2q58iypscl1uvg.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.14uageycto33n76wogvolns9e.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.14uageycto33n76wogvolns9e.08ai3k3.rcgu.o new file mode 100644 index 0000000..0a563f1 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.14uageycto33n76wogvolns9e.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.14uageycto33n76wogvolns9e.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.14uageycto33n76wogvolns9e.1p8vpix.rcgu.o new file mode 100644 index 0000000..15b10a8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.14uageycto33n76wogvolns9e.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.1ccgbr46r6be2qiqr6ymttxna.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.1ccgbr46r6be2qiqr6ymttxna.08ai3k3.rcgu.o new file mode 100644 index 0000000..5f50b2b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.1ccgbr46r6be2qiqr6ymttxna.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.1ccgbr46r6be2qiqr6ymttxna.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.1ccgbr46r6be2qiqr6ymttxna.1p8vpix.rcgu.o new file mode 100644 index 0000000..5f50b2b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.1ccgbr46r6be2qiqr6ymttxna.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.1iwt1x6va9503h1gi6f52x7a1.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.1iwt1x6va9503h1gi6f52x7a1.08ai3k3.rcgu.o new file mode 100644 index 0000000..612a9c6 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.1iwt1x6va9503h1gi6f52x7a1.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.1iwt1x6va9503h1gi6f52x7a1.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.1iwt1x6va9503h1gi6f52x7a1.1p8vpix.rcgu.o new file mode 100644 index 0000000..70702ea Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.1iwt1x6va9503h1gi6f52x7a1.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.1j5yfwcjemhkr4v1c6zs5lfen.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.1j5yfwcjemhkr4v1c6zs5lfen.1p8vpix.rcgu.o new file mode 100644 index 0000000..31c1fd7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.1j5yfwcjemhkr4v1c6zs5lfen.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.1t6gyb57klqqezi0g7cvrxg65.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.1t6gyb57klqqezi0g7cvrxg65.1p8vpix.rcgu.o new file mode 100644 index 0000000..72647ad Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.1t6gyb57klqqezi0g7cvrxg65.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.204c2vbb1vv80kdgqbo3qufzs.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.204c2vbb1vv80kdgqbo3qufzs.1p8vpix.rcgu.o new file mode 100644 index 0000000..370696b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.204c2vbb1vv80kdgqbo3qufzs.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.206u3p0lewey5o4jp561jxyla.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.206u3p0lewey5o4jp561jxyla.08ai3k3.rcgu.o new file mode 100644 index 0000000..efbe798 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.206u3p0lewey5o4jp561jxyla.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.206u3p0lewey5o4jp561jxyla.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.206u3p0lewey5o4jp561jxyla.1p8vpix.rcgu.o new file mode 100644 index 0000000..efbe798 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.206u3p0lewey5o4jp561jxyla.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.21sciyydsimk5idvszdqqut7u.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.21sciyydsimk5idvszdqqut7u.08ai3k3.rcgu.o new file mode 100644 index 0000000..3ce762e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.21sciyydsimk5idvszdqqut7u.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.21sciyydsimk5idvszdqqut7u.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.21sciyydsimk5idvszdqqut7u.1p8vpix.rcgu.o new file mode 100644 index 0000000..b1cbfca Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.21sciyydsimk5idvszdqqut7u.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.2k12ocngbw8c5dxh68w64jafa.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.2k12ocngbw8c5dxh68w64jafa.1p8vpix.rcgu.o new file mode 100644 index 0000000..05bd8c2 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.2k12ocngbw8c5dxh68w64jafa.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.3hc5q3nmblf1wc0q83q0wk6ur.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.3hc5q3nmblf1wc0q83q0wk6ur.08ai3k3.rcgu.o new file mode 100644 index 0000000..05a7ccb Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.3hc5q3nmblf1wc0q83q0wk6ur.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.3hc5q3nmblf1wc0q83q0wk6ur.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.3hc5q3nmblf1wc0q83q0wk6ur.1p8vpix.rcgu.o new file mode 100644 index 0000000..e6c6611 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.3hc5q3nmblf1wc0q83q0wk6ur.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.3u05spkw6jd43s69m41jqmzrv.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.3u05spkw6jd43s69m41jqmzrv.08ai3k3.rcgu.o new file mode 100644 index 0000000..9469800 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.3u05spkw6jd43s69m41jqmzrv.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.3u05spkw6jd43s69m41jqmzrv.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.3u05spkw6jd43s69m41jqmzrv.1p8vpix.rcgu.o new file mode 100644 index 0000000..9469800 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.3u05spkw6jd43s69m41jqmzrv.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.4h55zj4oerl82iwgv1b92rdbq.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.4h55zj4oerl82iwgv1b92rdbq.08ai3k3.rcgu.o new file mode 100644 index 0000000..830483f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.4h55zj4oerl82iwgv1b92rdbq.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.4h55zj4oerl82iwgv1b92rdbq.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.4h55zj4oerl82iwgv1b92rdbq.1p8vpix.rcgu.o new file mode 100644 index 0000000..136acb3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.4h55zj4oerl82iwgv1b92rdbq.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.5aubi0fdifsjrirfz7a36bvl3.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.5aubi0fdifsjrirfz7a36bvl3.08ai3k3.rcgu.o new file mode 100644 index 0000000..c75267e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.5aubi0fdifsjrirfz7a36bvl3.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.5aubi0fdifsjrirfz7a36bvl3.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.5aubi0fdifsjrirfz7a36bvl3.1p8vpix.rcgu.o new file mode 100644 index 0000000..048a496 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.5aubi0fdifsjrirfz7a36bvl3.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.5m4egfnxrrollh6ndveanxwl8.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.5m4egfnxrrollh6ndveanxwl8.08ai3k3.rcgu.o new file mode 100644 index 0000000..bf35048 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.5m4egfnxrrollh6ndveanxwl8.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.5m4egfnxrrollh6ndveanxwl8.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.5m4egfnxrrollh6ndveanxwl8.1p8vpix.rcgu.o new file mode 100644 index 0000000..1f7b83e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.5m4egfnxrrollh6ndveanxwl8.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.5yyfwyv26i2tbwi8xuwwz21ai.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.5yyfwyv26i2tbwi8xuwwz21ai.08ai3k3.rcgu.o new file mode 100644 index 0000000..c30b6cc Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.5yyfwyv26i2tbwi8xuwwz21ai.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.5yyfwyv26i2tbwi8xuwwz21ai.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.5yyfwyv26i2tbwi8xuwwz21ai.1p8vpix.rcgu.o new file mode 100644 index 0000000..8f6c66c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.5yyfwyv26i2tbwi8xuwwz21ai.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.61a2s2p4coy7kf2db8w35zrpw.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.61a2s2p4coy7kf2db8w35zrpw.1p8vpix.rcgu.o new file mode 100644 index 0000000..c9f2bc0 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.61a2s2p4coy7kf2db8w35zrpw.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.66sqkgrc88zpyzvk5x8nbelhx.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.66sqkgrc88zpyzvk5x8nbelhx.08ai3k3.rcgu.o new file mode 100644 index 0000000..b60ca85 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.66sqkgrc88zpyzvk5x8nbelhx.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.66sqkgrc88zpyzvk5x8nbelhx.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.66sqkgrc88zpyzvk5x8nbelhx.1p8vpix.rcgu.o new file mode 100644 index 0000000..dc9bc1e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.66sqkgrc88zpyzvk5x8nbelhx.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.67i4urmi4bgh0pkv02ebevpen.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.67i4urmi4bgh0pkv02ebevpen.08ai3k3.rcgu.o new file mode 100644 index 0000000..ed420b7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.67i4urmi4bgh0pkv02ebevpen.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.67i4urmi4bgh0pkv02ebevpen.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.67i4urmi4bgh0pkv02ebevpen.1p8vpix.rcgu.o new file mode 100644 index 0000000..5b36401 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.67i4urmi4bgh0pkv02ebevpen.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6c67a3leds0uoy2ydnmy55mhh.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6c67a3leds0uoy2ydnmy55mhh.08ai3k3.rcgu.o new file mode 100644 index 0000000..894f003 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6c67a3leds0uoy2ydnmy55mhh.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6c67a3leds0uoy2ydnmy55mhh.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6c67a3leds0uoy2ydnmy55mhh.1p8vpix.rcgu.o new file mode 100644 index 0000000..894f003 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6c67a3leds0uoy2ydnmy55mhh.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6kmjzw0myzhsa3zw3gm037z2o.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6kmjzw0myzhsa3zw3gm037z2o.08ai3k3.rcgu.o new file mode 100644 index 0000000..ec5fa74 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6kmjzw0myzhsa3zw3gm037z2o.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6kmjzw0myzhsa3zw3gm037z2o.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6kmjzw0myzhsa3zw3gm037z2o.1p8vpix.rcgu.o new file mode 100644 index 0000000..46d7c19 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6kmjzw0myzhsa3zw3gm037z2o.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6s0p1k5tknxlaq4qs8u5x7wey.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6s0p1k5tknxlaq4qs8u5x7wey.08ai3k3.rcgu.o new file mode 100644 index 0000000..d61eb0b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6s0p1k5tknxlaq4qs8u5x7wey.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6s0p1k5tknxlaq4qs8u5x7wey.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6s0p1k5tknxlaq4qs8u5x7wey.1p8vpix.rcgu.o new file mode 100644 index 0000000..d61eb0b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6s0p1k5tknxlaq4qs8u5x7wey.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6t1sa7r9z4g8qmkac974q5iqe.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6t1sa7r9z4g8qmkac974q5iqe.08ai3k3.rcgu.o new file mode 100644 index 0000000..82a0d11 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6t1sa7r9z4g8qmkac974q5iqe.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6t1sa7r9z4g8qmkac974q5iqe.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6t1sa7r9z4g8qmkac974q5iqe.1p8vpix.rcgu.o new file mode 100644 index 0000000..82a0d11 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.6t1sa7r9z4g8qmkac974q5iqe.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.70puas0t4dgzrucdq2houvgya.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.70puas0t4dgzrucdq2houvgya.1p8vpix.rcgu.o new file mode 100644 index 0000000..8812d6c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.70puas0t4dgzrucdq2houvgya.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.76qg434jmp62w8qx4yvaangfn.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.76qg434jmp62w8qx4yvaangfn.08ai3k3.rcgu.o new file mode 100644 index 0000000..50e8b5b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.76qg434jmp62w8qx4yvaangfn.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.76qg434jmp62w8qx4yvaangfn.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.76qg434jmp62w8qx4yvaangfn.1p8vpix.rcgu.o new file mode 100644 index 0000000..50e8b5b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.76qg434jmp62w8qx4yvaangfn.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.775yzkrrbq8bpuc21viqqr0yn.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.775yzkrrbq8bpuc21viqqr0yn.08ai3k3.rcgu.o new file mode 100644 index 0000000..5f62886 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.775yzkrrbq8bpuc21viqqr0yn.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.775yzkrrbq8bpuc21viqqr0yn.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.775yzkrrbq8bpuc21viqqr0yn.1p8vpix.rcgu.o new file mode 100644 index 0000000..d0aa5f2 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.775yzkrrbq8bpuc21viqqr0yn.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.7jbn0pxncgggdcl8bapie6hq1.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.7jbn0pxncgggdcl8bapie6hq1.1p8vpix.rcgu.o new file mode 100644 index 0000000..6ff5fd8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.7jbn0pxncgggdcl8bapie6hq1.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.7jnov796pnwk226hh2uuhw6vx.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.7jnov796pnwk226hh2uuhw6vx.08ai3k3.rcgu.o new file mode 100644 index 0000000..1c35158 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.7jnov796pnwk226hh2uuhw6vx.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.7jnov796pnwk226hh2uuhw6vx.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.7jnov796pnwk226hh2uuhw6vx.1p8vpix.rcgu.o new file mode 100644 index 0000000..8c4f56d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.7jnov796pnwk226hh2uuhw6vx.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.7oyf7lxafknrw76ecna4fftua.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.7oyf7lxafknrw76ecna4fftua.1p8vpix.rcgu.o new file mode 100644 index 0000000..12aa3a0 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.7oyf7lxafknrw76ecna4fftua.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.8hau85p62a827kh44a3hldgmw.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.8hau85p62a827kh44a3hldgmw.08ai3k3.rcgu.o new file mode 100644 index 0000000..e907f98 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.8hau85p62a827kh44a3hldgmw.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.8hau85p62a827kh44a3hldgmw.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.8hau85p62a827kh44a3hldgmw.1p8vpix.rcgu.o new file mode 100644 index 0000000..e907f98 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.8hau85p62a827kh44a3hldgmw.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.8o4jjwbhcrjd03hwwszn8igty.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.8o4jjwbhcrjd03hwwszn8igty.08ai3k3.rcgu.o new file mode 100644 index 0000000..5de229b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.8o4jjwbhcrjd03hwwszn8igty.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.8o4jjwbhcrjd03hwwszn8igty.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.8o4jjwbhcrjd03hwwszn8igty.1p8vpix.rcgu.o new file mode 100644 index 0000000..6886cfb Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.8o4jjwbhcrjd03hwwszn8igty.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.94aca8yztruzovb7xs8zq7w3u.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.94aca8yztruzovb7xs8zq7w3u.08ai3k3.rcgu.o new file mode 100644 index 0000000..00cd05f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.94aca8yztruzovb7xs8zq7w3u.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.94aca8yztruzovb7xs8zq7w3u.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.94aca8yztruzovb7xs8zq7w3u.1p8vpix.rcgu.o new file mode 100644 index 0000000..5615976 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.94aca8yztruzovb7xs8zq7w3u.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.97n2k1l7eqjjctbi2s5l0gy3v.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.97n2k1l7eqjjctbi2s5l0gy3v.1p8vpix.rcgu.o new file mode 100644 index 0000000..07c95e8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.97n2k1l7eqjjctbi2s5l0gy3v.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9f6mwvpiyn1x061a8v00wgl14.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9f6mwvpiyn1x061a8v00wgl14.1p8vpix.rcgu.o new file mode 100644 index 0000000..4b704ed Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9f6mwvpiyn1x061a8v00wgl14.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9jhxjzjyhoqljp1271lyuptdp.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9jhxjzjyhoqljp1271lyuptdp.08ai3k3.rcgu.o new file mode 100644 index 0000000..dffe15d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9jhxjzjyhoqljp1271lyuptdp.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9jhxjzjyhoqljp1271lyuptdp.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9jhxjzjyhoqljp1271lyuptdp.1p8vpix.rcgu.o new file mode 100644 index 0000000..81cae3a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9jhxjzjyhoqljp1271lyuptdp.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9k5r3ru8op5cim5lae3m01xi3.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9k5r3ru8op5cim5lae3m01xi3.1p8vpix.rcgu.o new file mode 100644 index 0000000..7e39373 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9k5r3ru8op5cim5lae3m01xi3.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9oy8q1q0no4zo4lkbucf33c3u.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9oy8q1q0no4zo4lkbucf33c3u.08ai3k3.rcgu.o new file mode 100644 index 0000000..f88e894 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9oy8q1q0no4zo4lkbucf33c3u.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9oy8q1q0no4zo4lkbucf33c3u.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9oy8q1q0no4zo4lkbucf33c3u.1p8vpix.rcgu.o new file mode 100644 index 0000000..56775f0 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9oy8q1q0no4zo4lkbucf33c3u.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9ze7kyzzp5mi30l7pa0bzdwv7.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9ze7kyzzp5mi30l7pa0bzdwv7.08ai3k3.rcgu.o new file mode 100644 index 0000000..863b774 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9ze7kyzzp5mi30l7pa0bzdwv7.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9ze7kyzzp5mi30l7pa0bzdwv7.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9ze7kyzzp5mi30l7pa0bzdwv7.1p8vpix.rcgu.o new file mode 100644 index 0000000..ff5f455 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.9ze7kyzzp5mi30l7pa0bzdwv7.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.a229df2f451yfhua9625id475.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.a229df2f451yfhua9625id475.08ai3k3.rcgu.o new file mode 100644 index 0000000..c35aac4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.a229df2f451yfhua9625id475.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.a229df2f451yfhua9625id475.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.a229df2f451yfhua9625id475.1p8vpix.rcgu.o new file mode 100644 index 0000000..4ab0a0e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.a229df2f451yfhua9625id475.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.a8afw4vi9g9l0vbennz33eqn0.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.a8afw4vi9g9l0vbennz33eqn0.08ai3k3.rcgu.o new file mode 100644 index 0000000..1bbbb2c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.a8afw4vi9g9l0vbennz33eqn0.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.a8afw4vi9g9l0vbennz33eqn0.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.a8afw4vi9g9l0vbennz33eqn0.1p8vpix.rcgu.o new file mode 100644 index 0000000..1bbbb2c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.a8afw4vi9g9l0vbennz33eqn0.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ah4otp5rj4zpm7546jf69wr7i.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ah4otp5rj4zpm7546jf69wr7i.08ai3k3.rcgu.o new file mode 100644 index 0000000..fe53a9e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ah4otp5rj4zpm7546jf69wr7i.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ah4otp5rj4zpm7546jf69wr7i.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ah4otp5rj4zpm7546jf69wr7i.1p8vpix.rcgu.o new file mode 100644 index 0000000..a7af8b1 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ah4otp5rj4zpm7546jf69wr7i.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.b0teidwab1gt7mtv7iyslcs7t.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.b0teidwab1gt7mtv7iyslcs7t.08ai3k3.rcgu.o new file mode 100644 index 0000000..e9d504a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.b0teidwab1gt7mtv7iyslcs7t.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.b0teidwab1gt7mtv7iyslcs7t.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.b0teidwab1gt7mtv7iyslcs7t.1p8vpix.rcgu.o new file mode 100644 index 0000000..2727baf Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.b0teidwab1gt7mtv7iyslcs7t.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.b2ru63ekpb1r92n07ykxx1bsv.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.b2ru63ekpb1r92n07ykxx1bsv.08ai3k3.rcgu.o new file mode 100644 index 0000000..e239f47 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.b2ru63ekpb1r92n07ykxx1bsv.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.b2ru63ekpb1r92n07ykxx1bsv.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.b2ru63ekpb1r92n07ykxx1bsv.1p8vpix.rcgu.o new file mode 100644 index 0000000..451386c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.b2ru63ekpb1r92n07ykxx1bsv.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.bdzlu6c8i62l9kuy6skfmfsb5.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.bdzlu6c8i62l9kuy6skfmfsb5.1p8vpix.rcgu.o new file mode 100644 index 0000000..aa0017c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.bdzlu6c8i62l9kuy6skfmfsb5.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.bgdj6osp26usqin9cqjqgm8eu.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.bgdj6osp26usqin9cqjqgm8eu.08ai3k3.rcgu.o new file mode 100644 index 0000000..7537999 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.bgdj6osp26usqin9cqjqgm8eu.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.bgdj6osp26usqin9cqjqgm8eu.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.bgdj6osp26usqin9cqjqgm8eu.1p8vpix.rcgu.o new file mode 100644 index 0000000..889d08d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.bgdj6osp26usqin9cqjqgm8eu.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.bo24r0e4rzavtiy9mvazhahyu.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.bo24r0e4rzavtiy9mvazhahyu.08ai3k3.rcgu.o new file mode 100644 index 0000000..8bb4670 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.bo24r0e4rzavtiy9mvazhahyu.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.bo24r0e4rzavtiy9mvazhahyu.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.bo24r0e4rzavtiy9mvazhahyu.1p8vpix.rcgu.o new file mode 100644 index 0000000..196bca2 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.bo24r0e4rzavtiy9mvazhahyu.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.c7b5renfu237smcucly8xipt7.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.c7b5renfu237smcucly8xipt7.1p8vpix.rcgu.o new file mode 100644 index 0000000..9fdbf4f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.c7b5renfu237smcucly8xipt7.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cjr56whnlvxe01k2bso1kzd71.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cjr56whnlvxe01k2bso1kzd71.08ai3k3.rcgu.o new file mode 100644 index 0000000..4b5d557 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cjr56whnlvxe01k2bso1kzd71.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cjr56whnlvxe01k2bso1kzd71.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cjr56whnlvxe01k2bso1kzd71.1p8vpix.rcgu.o new file mode 100644 index 0000000..89c62d8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cjr56whnlvxe01k2bso1kzd71.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cm08p2lufxc6lan2cgzysk6qn.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cm08p2lufxc6lan2cgzysk6qn.1p8vpix.rcgu.o new file mode 100644 index 0000000..c52f236 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cm08p2lufxc6lan2cgzysk6qn.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cncro8oneo2j8i6xeirc9eco5.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cncro8oneo2j8i6xeirc9eco5.1p8vpix.rcgu.o new file mode 100644 index 0000000..cf252c3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cncro8oneo2j8i6xeirc9eco5.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cob4gzlbhetxaulr6wsz5y1q5.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cob4gzlbhetxaulr6wsz5y1q5.08ai3k3.rcgu.o new file mode 100644 index 0000000..cbd87e8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cob4gzlbhetxaulr6wsz5y1q5.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cob4gzlbhetxaulr6wsz5y1q5.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cob4gzlbhetxaulr6wsz5y1q5.1p8vpix.rcgu.o new file mode 100644 index 0000000..a6fa523 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cob4gzlbhetxaulr6wsz5y1q5.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cub61lw6ma23ri6e13w8ldnme.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cub61lw6ma23ri6e13w8ldnme.08ai3k3.rcgu.o new file mode 100644 index 0000000..d597435 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cub61lw6ma23ri6e13w8ldnme.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cub61lw6ma23ri6e13w8ldnme.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cub61lw6ma23ri6e13w8ldnme.1p8vpix.rcgu.o new file mode 100644 index 0000000..d597435 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.cub61lw6ma23ri6e13w8ldnme.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.d b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.d new file mode 100644 index 0000000..8484c82 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.d @@ -0,0 +1,10 @@ +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.d: /Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/lib.rs /Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/decoder.rs /Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/encoder.rs /Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/symbol.rs + +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/libfountain_core-ea9c6a1f1ce4a562.rlib: /Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/lib.rs /Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/decoder.rs /Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/encoder.rs /Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/symbol.rs + +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/libfountain_core-ea9c6a1f1ce4a562.rmeta: /Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/lib.rs /Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/decoder.rs /Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/encoder.rs /Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/symbol.rs + +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/lib.rs: +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/decoder.rs: +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/encoder.rs: +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/symbol.rs: diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.d1ef4coqm99uyhxxjutrwjkb0.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.d1ef4coqm99uyhxxjutrwjkb0.1p8vpix.rcgu.o new file mode 100644 index 0000000..0494bd3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.d1ef4coqm99uyhxxjutrwjkb0.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.dbgpvygrrd57r6gcw9pfhjkcm.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.dbgpvygrrd57r6gcw9pfhjkcm.08ai3k3.rcgu.o new file mode 100644 index 0000000..4ee5798 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.dbgpvygrrd57r6gcw9pfhjkcm.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.dbgpvygrrd57r6gcw9pfhjkcm.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.dbgpvygrrd57r6gcw9pfhjkcm.1p8vpix.rcgu.o new file mode 100644 index 0000000..4ee5798 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.dbgpvygrrd57r6gcw9pfhjkcm.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.dtohm5nbeb4464oowgav7beud.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.dtohm5nbeb4464oowgav7beud.1p8vpix.rcgu.o new file mode 100644 index 0000000..810a310 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.dtohm5nbeb4464oowgav7beud.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ed5xfxuzvyuarypu37o0enrtt.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ed5xfxuzvyuarypu37o0enrtt.08ai3k3.rcgu.o new file mode 100644 index 0000000..f7ca80c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ed5xfxuzvyuarypu37o0enrtt.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ed5xfxuzvyuarypu37o0enrtt.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ed5xfxuzvyuarypu37o0enrtt.1p8vpix.rcgu.o new file mode 100644 index 0000000..024f567 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ed5xfxuzvyuarypu37o0enrtt.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.efjwvxqifi1z3apyzpg6kfrv1.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.efjwvxqifi1z3apyzpg6kfrv1.1p8vpix.rcgu.o new file mode 100644 index 0000000..c3cb2dd Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.efjwvxqifi1z3apyzpg6kfrv1.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.euryy08lftgi5knjl463ynk14.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.euryy08lftgi5knjl463ynk14.1p8vpix.rcgu.o new file mode 100644 index 0000000..327f431 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.euryy08lftgi5knjl463ynk14.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ew5kn3emndm1r5rtrjg1n5ihk.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ew5kn3emndm1r5rtrjg1n5ihk.08ai3k3.rcgu.o new file mode 100644 index 0000000..c03c003 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ew5kn3emndm1r5rtrjg1n5ihk.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ew5kn3emndm1r5rtrjg1n5ihk.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ew5kn3emndm1r5rtrjg1n5ihk.1p8vpix.rcgu.o new file mode 100644 index 0000000..1de45bf Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ew5kn3emndm1r5rtrjg1n5ihk.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ey5dptdhevmo3fna0p0n8vyu6.08ai3k3.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ey5dptdhevmo3fna0p0n8vyu6.08ai3k3.rcgu.o new file mode 100644 index 0000000..0b6249e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ey5dptdhevmo3fna0p0n8vyu6.08ai3k3.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ey5dptdhevmo3fna0p0n8vyu6.1p8vpix.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ey5dptdhevmo3fna0p0n8vyu6.1p8vpix.rcgu.o new file mode 100644 index 0000000..f26e527 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/fountain_core-ea9c6a1f1ce4a562.ey5dptdhevmo3fna0p0n8vyu6.1p8vpix.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/libfountain_core-ea9c6a1f1ce4a562.rlib b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/libfountain_core-ea9c6a1f1ce4a562.rlib new file mode 100644 index 0000000..8ab6774 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/libfountain_core-ea9c6a1f1ce4a562.rlib differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/libfountain_core-ea9c6a1f1ce4a562.rmeta b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/libfountain_core-ea9c6a1f1ce4a562.rmeta new file mode 100644 index 0000000..7e117b3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/libfountain_core-ea9c6a1f1ce4a562.rmeta differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03 b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03 new file mode 100755 index 0000000..3a21a23 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03 differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.08ikqgkk696jxiihrf33zfa6b.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.08ikqgkk696jxiihrf33zfa6b.1mk8shc.rcgu.o new file mode 100644 index 0000000..a462d51 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.08ikqgkk696jxiihrf33zfa6b.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.0m68f43kihv5xwaea17qtpn1k.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.0m68f43kihv5xwaea17qtpn1k.1mk8shc.rcgu.o new file mode 100644 index 0000000..5b64167 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.0m68f43kihv5xwaea17qtpn1k.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.15w74n2qgbd12xbrldna59caq.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.15w74n2qgbd12xbrldna59caq.1mk8shc.rcgu.o new file mode 100644 index 0000000..d318093 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.15w74n2qgbd12xbrldna59caq.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.1acvxzlwkavbr73hhl1iudbzg.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.1acvxzlwkavbr73hhl1iudbzg.1mk8shc.rcgu.o new file mode 100644 index 0000000..584a19f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.1acvxzlwkavbr73hhl1iudbzg.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.1mfyiqtpjkfnn8491ympu801d.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.1mfyiqtpjkfnn8491ympu801d.1mk8shc.rcgu.o new file mode 100644 index 0000000..a070604 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.1mfyiqtpjkfnn8491ympu801d.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.26kwaon347mbm9id2448o97ly.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.26kwaon347mbm9id2448o97ly.1mk8shc.rcgu.o new file mode 100644 index 0000000..2f3f7e3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.26kwaon347mbm9id2448o97ly.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.2qnrfxwda72cmncrq4im1j1r7.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.2qnrfxwda72cmncrq4im1j1r7.1mk8shc.rcgu.o new file mode 100644 index 0000000..66a26f3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.2qnrfxwda72cmncrq4im1j1r7.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.3muqf8z4861jitfygjszla9dc.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.3muqf8z4861jitfygjszla9dc.1mk8shc.rcgu.o new file mode 100644 index 0000000..19074c2 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.3muqf8z4861jitfygjszla9dc.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.3ocj4cie6b03tq0hyipc61gac.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.3ocj4cie6b03tq0hyipc61gac.1mk8shc.rcgu.o new file mode 100644 index 0000000..d45b2d8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.3ocj4cie6b03tq0hyipc61gac.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.3rz7co738s0ra6d8zoi867bb7.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.3rz7co738s0ra6d8zoi867bb7.1mk8shc.rcgu.o new file mode 100644 index 0000000..b37b074 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.3rz7co738s0ra6d8zoi867bb7.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.4sgwihrdf92gu5itzpsi9jxn4.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.4sgwihrdf92gu5itzpsi9jxn4.1mk8shc.rcgu.o new file mode 100644 index 0000000..7829ca5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.4sgwihrdf92gu5itzpsi9jxn4.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.4tkmxcqpvd49dynonnuuj3oz4.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.4tkmxcqpvd49dynonnuuj3oz4.1mk8shc.rcgu.o new file mode 100644 index 0000000..bcb3775 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.4tkmxcqpvd49dynonnuuj3oz4.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.52fcrff3ibczogj0q5qx7ncjz.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.52fcrff3ibczogj0q5qx7ncjz.1mk8shc.rcgu.o new file mode 100644 index 0000000..5603ec6 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.52fcrff3ibczogj0q5qx7ncjz.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.5afx9dck7u5antq80en3sn6xv.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.5afx9dck7u5antq80en3sn6xv.1mk8shc.rcgu.o new file mode 100644 index 0000000..2e34014 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.5afx9dck7u5antq80en3sn6xv.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.61mk48hpg8qrfmge6tp94hmpb.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.61mk48hpg8qrfmge6tp94hmpb.1mk8shc.rcgu.o new file mode 100644 index 0000000..a095c0a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.61mk48hpg8qrfmge6tp94hmpb.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.6a6ltl4po1tr8j3jvxmb4efpp.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.6a6ltl4po1tr8j3jvxmb4efpp.1mk8shc.rcgu.o new file mode 100644 index 0000000..056b3b5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.6a6ltl4po1tr8j3jvxmb4efpp.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.6gier8v9imj4sweupu61k6fyj.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.6gier8v9imj4sweupu61k6fyj.1mk8shc.rcgu.o new file mode 100644 index 0000000..580d648 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.6gier8v9imj4sweupu61k6fyj.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.7l2gsjljbp37npan3x2qir1eu.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.7l2gsjljbp37npan3x2qir1eu.1mk8shc.rcgu.o new file mode 100644 index 0000000..7e966c8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.7l2gsjljbp37npan3x2qir1eu.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.7ygpch342zm534lcd6jianb9u.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.7ygpch342zm534lcd6jianb9u.1mk8shc.rcgu.o new file mode 100644 index 0000000..1ad3625 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.7ygpch342zm534lcd6jianb9u.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.8udnfdap6113xlaw6i3uzgdgz.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.8udnfdap6113xlaw6i3uzgdgz.1mk8shc.rcgu.o new file mode 100644 index 0000000..bd0056d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.8udnfdap6113xlaw6i3uzgdgz.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.97dufzsm7pdvno8l35am5lrtu.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.97dufzsm7pdvno8l35am5lrtu.1mk8shc.rcgu.o new file mode 100644 index 0000000..08e98a5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.97dufzsm7pdvno8l35am5lrtu.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.9h2iy7uvchxfp5fxk8q1qtusl.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.9h2iy7uvchxfp5fxk8q1qtusl.1mk8shc.rcgu.o new file mode 100644 index 0000000..70688af Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.9h2iy7uvchxfp5fxk8q1qtusl.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.bvc1m774hrsht8alltpmr77qe.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.bvc1m774hrsht8alltpmr77qe.1mk8shc.rcgu.o new file mode 100644 index 0000000..aac738a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.bvc1m774hrsht8alltpmr77qe.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.cj0zi5n2fey1t1rknmcx4iee6.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.cj0zi5n2fey1t1rknmcx4iee6.1mk8shc.rcgu.o new file mode 100644 index 0000000..b25a4bf Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.cj0zi5n2fey1t1rknmcx4iee6.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.cjxn5m0kvl74t46mfjigpoicd.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.cjxn5m0kvl74t46mfjigpoicd.1mk8shc.rcgu.o new file mode 100644 index 0000000..aec5e8c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.cjxn5m0kvl74t46mfjigpoicd.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.cw3xdc8vikykoype0uz5ewamq.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.cw3xdc8vikykoype0uz5ewamq.1mk8shc.rcgu.o new file mode 100644 index 0000000..d2b7de5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.cw3xdc8vikykoype0uz5ewamq.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.d b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.d new file mode 100644 index 0000000..12ecb1e --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.d @@ -0,0 +1,5 @@ +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.d: src/main.rs + +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03: src/main.rs + +src/main.rs: diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.dchktkw1tkenjmluomu9qttpa.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.dchktkw1tkenjmluomu9qttpa.1mk8shc.rcgu.o new file mode 100644 index 0000000..280517a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.dchktkw1tkenjmluomu9qttpa.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.dqk7c87fwiiwujmdptzh42te9.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.dqk7c87fwiiwujmdptzh42te9.1mk8shc.rcgu.o new file mode 100644 index 0000000..8fc0559 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.dqk7c87fwiiwujmdptzh42te9.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.duqyh72mbzwz4i683v2afii58.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.duqyh72mbzwz4i683v2afii58.1mk8shc.rcgu.o new file mode 100644 index 0000000..0d1ef9c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.duqyh72mbzwz4i683v2afii58.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.ertllsui3tl4ijceiup4kks2j.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.ertllsui3tl4ijceiup4kks2j.1mk8shc.rcgu.o new file mode 100644 index 0000000..a6dc074 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.ertllsui3tl4ijceiup4kks2j.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.f3v58sihpj85fx87qs4coifse.1mk8shc.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.f3v58sihpj85fx87qs4coifse.1mk8shc.rcgu.o new file mode 100644 index 0000000..db214b4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-1af0e6b6768dba03.f3v58sihpj85fx87qs4coifse.1mk8shc.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1 b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1 new file mode 100755 index 0000000..039d6f9 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1 differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1.4n6ig9mfzlsco58ep9yfht6m8.19q9oq4.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1.4n6ig9mfzlsco58ep9yfht6m8.19q9oq4.rcgu.o new file mode 100644 index 0000000..9bab8dc Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1.4n6ig9mfzlsco58ep9yfht6m8.19q9oq4.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1.4xok3xueklb03w2lo3k8n2upo.19q9oq4.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1.4xok3xueklb03w2lo3k8n2upo.19q9oq4.rcgu.o new file mode 100644 index 0000000..8aed561 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1.4xok3xueklb03w2lo3k8n2upo.19q9oq4.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1.6m4jgx8z1634d99as37r2t595.19q9oq4.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1.6m4jgx8z1634d99as37r2t595.19q9oq4.rcgu.o new file mode 100644 index 0000000..f7a7f2e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1.6m4jgx8z1634d99as37r2t595.19q9oq4.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1.7tjyd013xfjwqreb6jk9kpg67.19q9oq4.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1.7tjyd013xfjwqreb6jk9kpg67.19q9oq4.rcgu.o new file mode 100644 index 0000000..d6f4930 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1.7tjyd013xfjwqreb6jk9kpg67.19q9oq4.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1.d b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1.d new file mode 100644 index 0000000..8b29617 --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1.d @@ -0,0 +1,5 @@ +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1.d: src/main.rs + +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1: src/main.rs + +src/main.rs: diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1.dwzso6s3c2jslwngz8tdab0ce.19q9oq4.rcgu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1.dwzso6s3c2jslwngz8tdab0ce.19q9oq4.rcgu.o new file mode 100644 index 0000000..5af8bcd Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/deps/replay_benchmark-5214607ad0166ce1.dwzso6s3c2jslwngz8tdab0ce.19q9oq4.rcgu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/003a5qa6hswosm0x8k4ok5ldz.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/003a5qa6hswosm0x8k4ok5ldz.o new file mode 100644 index 0000000..9db58bf Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/003a5qa6hswosm0x8k4ok5ldz.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/09ufmvshmdnj8fy6hqg3x7s11.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/09ufmvshmdnj8fy6hqg3x7s11.o new file mode 100644 index 0000000..aaa07f5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/09ufmvshmdnj8fy6hqg3x7s11.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/0nl9881bws0ua01mdmlooz3ch.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/0nl9881bws0ua01mdmlooz3ch.o new file mode 100644 index 0000000..6e47c26 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/0nl9881bws0ua01mdmlooz3ch.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/0pgwvez9h04ty211hcnvgxysm.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/0pgwvez9h04ty211hcnvgxysm.o new file mode 100644 index 0000000..e84de91 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/0pgwvez9h04ty211hcnvgxysm.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/12jvnd6an8m2q58iypscl1uvg.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/12jvnd6an8m2q58iypscl1uvg.o new file mode 100644 index 0000000..eb40356 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/12jvnd6an8m2q58iypscl1uvg.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/14uageycto33n76wogvolns9e.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/14uageycto33n76wogvolns9e.o new file mode 100644 index 0000000..0a563f1 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/14uageycto33n76wogvolns9e.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/1ccgbr46r6be2qiqr6ymttxna.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/1ccgbr46r6be2qiqr6ymttxna.o new file mode 100644 index 0000000..5f50b2b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/1ccgbr46r6be2qiqr6ymttxna.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/1iwt1x6va9503h1gi6f52x7a1.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/1iwt1x6va9503h1gi6f52x7a1.o new file mode 100644 index 0000000..612a9c6 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/1iwt1x6va9503h1gi6f52x7a1.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/206u3p0lewey5o4jp561jxyla.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/206u3p0lewey5o4jp561jxyla.o new file mode 100644 index 0000000..efbe798 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/206u3p0lewey5o4jp561jxyla.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/21sciyydsimk5idvszdqqut7u.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/21sciyydsimk5idvszdqqut7u.o new file mode 100644 index 0000000..3ce762e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/21sciyydsimk5idvszdqqut7u.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/3hc5q3nmblf1wc0q83q0wk6ur.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/3hc5q3nmblf1wc0q83q0wk6ur.o new file mode 100644 index 0000000..05a7ccb Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/3hc5q3nmblf1wc0q83q0wk6ur.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/3u05spkw6jd43s69m41jqmzrv.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/3u05spkw6jd43s69m41jqmzrv.o new file mode 100644 index 0000000..9469800 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/3u05spkw6jd43s69m41jqmzrv.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/4h55zj4oerl82iwgv1b92rdbq.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/4h55zj4oerl82iwgv1b92rdbq.o new file mode 100644 index 0000000..830483f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/4h55zj4oerl82iwgv1b92rdbq.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/5aubi0fdifsjrirfz7a36bvl3.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/5aubi0fdifsjrirfz7a36bvl3.o new file mode 100644 index 0000000..c75267e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/5aubi0fdifsjrirfz7a36bvl3.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/5m4egfnxrrollh6ndveanxwl8.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/5m4egfnxrrollh6ndveanxwl8.o new file mode 100644 index 0000000..bf35048 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/5m4egfnxrrollh6ndveanxwl8.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/5yyfwyv26i2tbwi8xuwwz21ai.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/5yyfwyv26i2tbwi8xuwwz21ai.o new file mode 100644 index 0000000..c30b6cc Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/5yyfwyv26i2tbwi8xuwwz21ai.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/66sqkgrc88zpyzvk5x8nbelhx.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/66sqkgrc88zpyzvk5x8nbelhx.o new file mode 100644 index 0000000..b60ca85 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/66sqkgrc88zpyzvk5x8nbelhx.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/67i4urmi4bgh0pkv02ebevpen.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/67i4urmi4bgh0pkv02ebevpen.o new file mode 100644 index 0000000..ed420b7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/67i4urmi4bgh0pkv02ebevpen.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/6c67a3leds0uoy2ydnmy55mhh.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/6c67a3leds0uoy2ydnmy55mhh.o new file mode 100644 index 0000000..894f003 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/6c67a3leds0uoy2ydnmy55mhh.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/6kmjzw0myzhsa3zw3gm037z2o.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/6kmjzw0myzhsa3zw3gm037z2o.o new file mode 100644 index 0000000..ec5fa74 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/6kmjzw0myzhsa3zw3gm037z2o.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/6s0p1k5tknxlaq4qs8u5x7wey.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/6s0p1k5tknxlaq4qs8u5x7wey.o new file mode 100644 index 0000000..d61eb0b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/6s0p1k5tknxlaq4qs8u5x7wey.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/6t1sa7r9z4g8qmkac974q5iqe.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/6t1sa7r9z4g8qmkac974q5iqe.o new file mode 100644 index 0000000..82a0d11 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/6t1sa7r9z4g8qmkac974q5iqe.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/76qg434jmp62w8qx4yvaangfn.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/76qg434jmp62w8qx4yvaangfn.o new file mode 100644 index 0000000..50e8b5b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/76qg434jmp62w8qx4yvaangfn.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/775yzkrrbq8bpuc21viqqr0yn.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/775yzkrrbq8bpuc21viqqr0yn.o new file mode 100644 index 0000000..5f62886 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/775yzkrrbq8bpuc21viqqr0yn.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/7jnov796pnwk226hh2uuhw6vx.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/7jnov796pnwk226hh2uuhw6vx.o new file mode 100644 index 0000000..1c35158 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/7jnov796pnwk226hh2uuhw6vx.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/8hau85p62a827kh44a3hldgmw.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/8hau85p62a827kh44a3hldgmw.o new file mode 100644 index 0000000..e907f98 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/8hau85p62a827kh44a3hldgmw.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/8o4jjwbhcrjd03hwwszn8igty.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/8o4jjwbhcrjd03hwwszn8igty.o new file mode 100644 index 0000000..5de229b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/8o4jjwbhcrjd03hwwszn8igty.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/94aca8yztruzovb7xs8zq7w3u.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/94aca8yztruzovb7xs8zq7w3u.o new file mode 100644 index 0000000..00cd05f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/94aca8yztruzovb7xs8zq7w3u.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/9jhxjzjyhoqljp1271lyuptdp.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/9jhxjzjyhoqljp1271lyuptdp.o new file mode 100644 index 0000000..dffe15d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/9jhxjzjyhoqljp1271lyuptdp.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/9oy8q1q0no4zo4lkbucf33c3u.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/9oy8q1q0no4zo4lkbucf33c3u.o new file mode 100644 index 0000000..f88e894 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/9oy8q1q0no4zo4lkbucf33c3u.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/9ze7kyzzp5mi30l7pa0bzdwv7.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/9ze7kyzzp5mi30l7pa0bzdwv7.o new file mode 100644 index 0000000..863b774 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/9ze7kyzzp5mi30l7pa0bzdwv7.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/a229df2f451yfhua9625id475.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/a229df2f451yfhua9625id475.o new file mode 100644 index 0000000..c35aac4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/a229df2f451yfhua9625id475.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/a8afw4vi9g9l0vbennz33eqn0.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/a8afw4vi9g9l0vbennz33eqn0.o new file mode 100644 index 0000000..1bbbb2c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/a8afw4vi9g9l0vbennz33eqn0.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/ah4otp5rj4zpm7546jf69wr7i.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/ah4otp5rj4zpm7546jf69wr7i.o new file mode 100644 index 0000000..fe53a9e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/ah4otp5rj4zpm7546jf69wr7i.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/b0teidwab1gt7mtv7iyslcs7t.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/b0teidwab1gt7mtv7iyslcs7t.o new file mode 100644 index 0000000..e9d504a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/b0teidwab1gt7mtv7iyslcs7t.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/b2ru63ekpb1r92n07ykxx1bsv.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/b2ru63ekpb1r92n07ykxx1bsv.o new file mode 100644 index 0000000..e239f47 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/b2ru63ekpb1r92n07ykxx1bsv.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/bgdj6osp26usqin9cqjqgm8eu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/bgdj6osp26usqin9cqjqgm8eu.o new file mode 100644 index 0000000..7537999 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/bgdj6osp26usqin9cqjqgm8eu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/bo24r0e4rzavtiy9mvazhahyu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/bo24r0e4rzavtiy9mvazhahyu.o new file mode 100644 index 0000000..8bb4670 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/bo24r0e4rzavtiy9mvazhahyu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/cjr56whnlvxe01k2bso1kzd71.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/cjr56whnlvxe01k2bso1kzd71.o new file mode 100644 index 0000000..4b5d557 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/cjr56whnlvxe01k2bso1kzd71.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/cob4gzlbhetxaulr6wsz5y1q5.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/cob4gzlbhetxaulr6wsz5y1q5.o new file mode 100644 index 0000000..cbd87e8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/cob4gzlbhetxaulr6wsz5y1q5.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/cub61lw6ma23ri6e13w8ldnme.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/cub61lw6ma23ri6e13w8ldnme.o new file mode 100644 index 0000000..d597435 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/cub61lw6ma23ri6e13w8ldnme.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/dbgpvygrrd57r6gcw9pfhjkcm.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/dbgpvygrrd57r6gcw9pfhjkcm.o new file mode 100644 index 0000000..4ee5798 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/dbgpvygrrd57r6gcw9pfhjkcm.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/dep-graph.bin b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/dep-graph.bin new file mode 100644 index 0000000..4aa3e33 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/dep-graph.bin differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/ed5xfxuzvyuarypu37o0enrtt.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/ed5xfxuzvyuarypu37o0enrtt.o new file mode 100644 index 0000000..f7ca80c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/ed5xfxuzvyuarypu37o0enrtt.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/ew5kn3emndm1r5rtrjg1n5ihk.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/ew5kn3emndm1r5rtrjg1n5ihk.o new file mode 100644 index 0000000..c03c003 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/ew5kn3emndm1r5rtrjg1n5ihk.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/ey5dptdhevmo3fna0p0n8vyu6.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/ey5dptdhevmo3fna0p0n8vyu6.o new file mode 100644 index 0000000..0b6249e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/ey5dptdhevmo3fna0p0n8vyu6.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/metadata.rmeta b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/metadata.rmeta new file mode 100644 index 0000000..c83be59 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/metadata.rmeta differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/query-cache.bin b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/query-cache.bin new file mode 100644 index 0000000..b162014 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/query-cache.bin differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/work-products.bin b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/work-products.bin new file mode 100644 index 0000000..6a18191 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j-83wmv8y8z3sh4wbnloe0wzuyi/work-products.bin differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j.lock b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiau4todw2-1hxmj8j.lock new file mode 100755 index 0000000..e69de29 diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/003a5qa6hswosm0x8k4ok5ldz.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/003a5qa6hswosm0x8k4ok5ldz.o new file mode 100644 index 0000000..9db58bf Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/003a5qa6hswosm0x8k4ok5ldz.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/0712u3e4u8kxlzqkpbfc5n240.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/0712u3e4u8kxlzqkpbfc5n240.o new file mode 100644 index 0000000..d05a230 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/0712u3e4u8kxlzqkpbfc5n240.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/07oe19ozifk0he0kgcf13csor.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/07oe19ozifk0he0kgcf13csor.o new file mode 100644 index 0000000..8c901e4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/07oe19ozifk0he0kgcf13csor.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/09ufmvshmdnj8fy6hqg3x7s11.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/09ufmvshmdnj8fy6hqg3x7s11.o new file mode 100644 index 0000000..d844ce5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/09ufmvshmdnj8fy6hqg3x7s11.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/0nl9881bws0ua01mdmlooz3ch.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/0nl9881bws0ua01mdmlooz3ch.o new file mode 100644 index 0000000..36f3bfc Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/0nl9881bws0ua01mdmlooz3ch.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/0pgwvez9h04ty211hcnvgxysm.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/0pgwvez9h04ty211hcnvgxysm.o new file mode 100644 index 0000000..2a7521a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/0pgwvez9h04ty211hcnvgxysm.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/0ropfcre8mo0fccv675pexy8o.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/0ropfcre8mo0fccv675pexy8o.o new file mode 100644 index 0000000..21cdfd6 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/0ropfcre8mo0fccv675pexy8o.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/12jvnd6an8m2q58iypscl1uvg.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/12jvnd6an8m2q58iypscl1uvg.o new file mode 100644 index 0000000..5db955a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/12jvnd6an8m2q58iypscl1uvg.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/14uageycto33n76wogvolns9e.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/14uageycto33n76wogvolns9e.o new file mode 100644 index 0000000..15b10a8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/14uageycto33n76wogvolns9e.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/1ccgbr46r6be2qiqr6ymttxna.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/1ccgbr46r6be2qiqr6ymttxna.o new file mode 100644 index 0000000..5f50b2b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/1ccgbr46r6be2qiqr6ymttxna.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/1iwt1x6va9503h1gi6f52x7a1.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/1iwt1x6va9503h1gi6f52x7a1.o new file mode 100644 index 0000000..70702ea Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/1iwt1x6va9503h1gi6f52x7a1.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/1j5yfwcjemhkr4v1c6zs5lfen.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/1j5yfwcjemhkr4v1c6zs5lfen.o new file mode 100644 index 0000000..31c1fd7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/1j5yfwcjemhkr4v1c6zs5lfen.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/1t6gyb57klqqezi0g7cvrxg65.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/1t6gyb57klqqezi0g7cvrxg65.o new file mode 100644 index 0000000..72647ad Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/1t6gyb57klqqezi0g7cvrxg65.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/204c2vbb1vv80kdgqbo3qufzs.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/204c2vbb1vv80kdgqbo3qufzs.o new file mode 100644 index 0000000..370696b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/204c2vbb1vv80kdgqbo3qufzs.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/206u3p0lewey5o4jp561jxyla.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/206u3p0lewey5o4jp561jxyla.o new file mode 100644 index 0000000..efbe798 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/206u3p0lewey5o4jp561jxyla.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/21sciyydsimk5idvszdqqut7u.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/21sciyydsimk5idvszdqqut7u.o new file mode 100644 index 0000000..b1cbfca Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/21sciyydsimk5idvszdqqut7u.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/2k12ocngbw8c5dxh68w64jafa.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/2k12ocngbw8c5dxh68w64jafa.o new file mode 100644 index 0000000..05bd8c2 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/2k12ocngbw8c5dxh68w64jafa.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/3hc5q3nmblf1wc0q83q0wk6ur.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/3hc5q3nmblf1wc0q83q0wk6ur.o new file mode 100644 index 0000000..e6c6611 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/3hc5q3nmblf1wc0q83q0wk6ur.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/3u05spkw6jd43s69m41jqmzrv.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/3u05spkw6jd43s69m41jqmzrv.o new file mode 100644 index 0000000..9469800 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/3u05spkw6jd43s69m41jqmzrv.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/4h55zj4oerl82iwgv1b92rdbq.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/4h55zj4oerl82iwgv1b92rdbq.o new file mode 100644 index 0000000..136acb3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/4h55zj4oerl82iwgv1b92rdbq.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/5aubi0fdifsjrirfz7a36bvl3.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/5aubi0fdifsjrirfz7a36bvl3.o new file mode 100644 index 0000000..048a496 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/5aubi0fdifsjrirfz7a36bvl3.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/5m4egfnxrrollh6ndveanxwl8.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/5m4egfnxrrollh6ndveanxwl8.o new file mode 100644 index 0000000..1f7b83e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/5m4egfnxrrollh6ndveanxwl8.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/5yyfwyv26i2tbwi8xuwwz21ai.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/5yyfwyv26i2tbwi8xuwwz21ai.o new file mode 100644 index 0000000..8f6c66c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/5yyfwyv26i2tbwi8xuwwz21ai.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/61a2s2p4coy7kf2db8w35zrpw.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/61a2s2p4coy7kf2db8w35zrpw.o new file mode 100644 index 0000000..c9f2bc0 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/61a2s2p4coy7kf2db8w35zrpw.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/66sqkgrc88zpyzvk5x8nbelhx.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/66sqkgrc88zpyzvk5x8nbelhx.o new file mode 100644 index 0000000..dc9bc1e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/66sqkgrc88zpyzvk5x8nbelhx.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/67i4urmi4bgh0pkv02ebevpen.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/67i4urmi4bgh0pkv02ebevpen.o new file mode 100644 index 0000000..5b36401 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/67i4urmi4bgh0pkv02ebevpen.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/6c67a3leds0uoy2ydnmy55mhh.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/6c67a3leds0uoy2ydnmy55mhh.o new file mode 100644 index 0000000..894f003 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/6c67a3leds0uoy2ydnmy55mhh.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/6kmjzw0myzhsa3zw3gm037z2o.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/6kmjzw0myzhsa3zw3gm037z2o.o new file mode 100644 index 0000000..46d7c19 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/6kmjzw0myzhsa3zw3gm037z2o.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/6s0p1k5tknxlaq4qs8u5x7wey.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/6s0p1k5tknxlaq4qs8u5x7wey.o new file mode 100644 index 0000000..d61eb0b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/6s0p1k5tknxlaq4qs8u5x7wey.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/6t1sa7r9z4g8qmkac974q5iqe.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/6t1sa7r9z4g8qmkac974q5iqe.o new file mode 100644 index 0000000..82a0d11 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/6t1sa7r9z4g8qmkac974q5iqe.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/70puas0t4dgzrucdq2houvgya.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/70puas0t4dgzrucdq2houvgya.o new file mode 100644 index 0000000..8812d6c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/70puas0t4dgzrucdq2houvgya.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/76qg434jmp62w8qx4yvaangfn.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/76qg434jmp62w8qx4yvaangfn.o new file mode 100644 index 0000000..50e8b5b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/76qg434jmp62w8qx4yvaangfn.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/775yzkrrbq8bpuc21viqqr0yn.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/775yzkrrbq8bpuc21viqqr0yn.o new file mode 100644 index 0000000..d0aa5f2 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/775yzkrrbq8bpuc21viqqr0yn.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/7jbn0pxncgggdcl8bapie6hq1.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/7jbn0pxncgggdcl8bapie6hq1.o new file mode 100644 index 0000000..6ff5fd8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/7jbn0pxncgggdcl8bapie6hq1.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/7jnov796pnwk226hh2uuhw6vx.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/7jnov796pnwk226hh2uuhw6vx.o new file mode 100644 index 0000000..8c4f56d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/7jnov796pnwk226hh2uuhw6vx.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/7oyf7lxafknrw76ecna4fftua.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/7oyf7lxafknrw76ecna4fftua.o new file mode 100644 index 0000000..12aa3a0 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/7oyf7lxafknrw76ecna4fftua.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/8hau85p62a827kh44a3hldgmw.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/8hau85p62a827kh44a3hldgmw.o new file mode 100644 index 0000000..e907f98 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/8hau85p62a827kh44a3hldgmw.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/8o4jjwbhcrjd03hwwszn8igty.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/8o4jjwbhcrjd03hwwszn8igty.o new file mode 100644 index 0000000..6886cfb Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/8o4jjwbhcrjd03hwwszn8igty.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/94aca8yztruzovb7xs8zq7w3u.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/94aca8yztruzovb7xs8zq7w3u.o new file mode 100644 index 0000000..5615976 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/94aca8yztruzovb7xs8zq7w3u.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/97n2k1l7eqjjctbi2s5l0gy3v.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/97n2k1l7eqjjctbi2s5l0gy3v.o new file mode 100644 index 0000000..07c95e8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/97n2k1l7eqjjctbi2s5l0gy3v.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/9f6mwvpiyn1x061a8v00wgl14.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/9f6mwvpiyn1x061a8v00wgl14.o new file mode 100644 index 0000000..4b704ed Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/9f6mwvpiyn1x061a8v00wgl14.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/9jhxjzjyhoqljp1271lyuptdp.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/9jhxjzjyhoqljp1271lyuptdp.o new file mode 100644 index 0000000..81cae3a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/9jhxjzjyhoqljp1271lyuptdp.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/9k5r3ru8op5cim5lae3m01xi3.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/9k5r3ru8op5cim5lae3m01xi3.o new file mode 100644 index 0000000..7e39373 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/9k5r3ru8op5cim5lae3m01xi3.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/9oy8q1q0no4zo4lkbucf33c3u.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/9oy8q1q0no4zo4lkbucf33c3u.o new file mode 100644 index 0000000..56775f0 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/9oy8q1q0no4zo4lkbucf33c3u.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/9ze7kyzzp5mi30l7pa0bzdwv7.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/9ze7kyzzp5mi30l7pa0bzdwv7.o new file mode 100644 index 0000000..ff5f455 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/9ze7kyzzp5mi30l7pa0bzdwv7.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/a229df2f451yfhua9625id475.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/a229df2f451yfhua9625id475.o new file mode 100644 index 0000000..4ab0a0e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/a229df2f451yfhua9625id475.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/a8afw4vi9g9l0vbennz33eqn0.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/a8afw4vi9g9l0vbennz33eqn0.o new file mode 100644 index 0000000..1bbbb2c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/a8afw4vi9g9l0vbennz33eqn0.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/ah4otp5rj4zpm7546jf69wr7i.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/ah4otp5rj4zpm7546jf69wr7i.o new file mode 100644 index 0000000..a7af8b1 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/ah4otp5rj4zpm7546jf69wr7i.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/b0teidwab1gt7mtv7iyslcs7t.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/b0teidwab1gt7mtv7iyslcs7t.o new file mode 100644 index 0000000..2727baf Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/b0teidwab1gt7mtv7iyslcs7t.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/b2ru63ekpb1r92n07ykxx1bsv.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/b2ru63ekpb1r92n07ykxx1bsv.o new file mode 100644 index 0000000..451386c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/b2ru63ekpb1r92n07ykxx1bsv.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/bdzlu6c8i62l9kuy6skfmfsb5.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/bdzlu6c8i62l9kuy6skfmfsb5.o new file mode 100644 index 0000000..aa0017c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/bdzlu6c8i62l9kuy6skfmfsb5.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/bgdj6osp26usqin9cqjqgm8eu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/bgdj6osp26usqin9cqjqgm8eu.o new file mode 100644 index 0000000..889d08d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/bgdj6osp26usqin9cqjqgm8eu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/bo24r0e4rzavtiy9mvazhahyu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/bo24r0e4rzavtiy9mvazhahyu.o new file mode 100644 index 0000000..196bca2 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/bo24r0e4rzavtiy9mvazhahyu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/c7b5renfu237smcucly8xipt7.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/c7b5renfu237smcucly8xipt7.o new file mode 100644 index 0000000..9fdbf4f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/c7b5renfu237smcucly8xipt7.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/cjr56whnlvxe01k2bso1kzd71.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/cjr56whnlvxe01k2bso1kzd71.o new file mode 100644 index 0000000..89c62d8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/cjr56whnlvxe01k2bso1kzd71.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/cm08p2lufxc6lan2cgzysk6qn.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/cm08p2lufxc6lan2cgzysk6qn.o new file mode 100644 index 0000000..c52f236 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/cm08p2lufxc6lan2cgzysk6qn.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/cncro8oneo2j8i6xeirc9eco5.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/cncro8oneo2j8i6xeirc9eco5.o new file mode 100644 index 0000000..cf252c3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/cncro8oneo2j8i6xeirc9eco5.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/cob4gzlbhetxaulr6wsz5y1q5.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/cob4gzlbhetxaulr6wsz5y1q5.o new file mode 100644 index 0000000..a6fa523 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/cob4gzlbhetxaulr6wsz5y1q5.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/cub61lw6ma23ri6e13w8ldnme.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/cub61lw6ma23ri6e13w8ldnme.o new file mode 100644 index 0000000..d597435 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/cub61lw6ma23ri6e13w8ldnme.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/d1ef4coqm99uyhxxjutrwjkb0.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/d1ef4coqm99uyhxxjutrwjkb0.o new file mode 100644 index 0000000..0494bd3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/d1ef4coqm99uyhxxjutrwjkb0.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/dbgpvygrrd57r6gcw9pfhjkcm.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/dbgpvygrrd57r6gcw9pfhjkcm.o new file mode 100644 index 0000000..4ee5798 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/dbgpvygrrd57r6gcw9pfhjkcm.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/dep-graph.bin b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/dep-graph.bin new file mode 100644 index 0000000..7bfbfc7 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/dep-graph.bin differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/dtohm5nbeb4464oowgav7beud.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/dtohm5nbeb4464oowgav7beud.o new file mode 100644 index 0000000..810a310 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/dtohm5nbeb4464oowgav7beud.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/ed5xfxuzvyuarypu37o0enrtt.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/ed5xfxuzvyuarypu37o0enrtt.o new file mode 100644 index 0000000..024f567 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/ed5xfxuzvyuarypu37o0enrtt.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/efjwvxqifi1z3apyzpg6kfrv1.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/efjwvxqifi1z3apyzpg6kfrv1.o new file mode 100644 index 0000000..c3cb2dd Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/efjwvxqifi1z3apyzpg6kfrv1.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/euryy08lftgi5knjl463ynk14.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/euryy08lftgi5knjl463ynk14.o new file mode 100644 index 0000000..327f431 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/euryy08lftgi5knjl463ynk14.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/ew5kn3emndm1r5rtrjg1n5ihk.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/ew5kn3emndm1r5rtrjg1n5ihk.o new file mode 100644 index 0000000..1de45bf Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/ew5kn3emndm1r5rtrjg1n5ihk.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/ey5dptdhevmo3fna0p0n8vyu6.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/ey5dptdhevmo3fna0p0n8vyu6.o new file mode 100644 index 0000000..f26e527 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/ey5dptdhevmo3fna0p0n8vyu6.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/metadata.rmeta b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/metadata.rmeta new file mode 100644 index 0000000..7e117b3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/metadata.rmeta differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/query-cache.bin b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/query-cache.bin new file mode 100644 index 0000000..315b3fa Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/query-cache.bin differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/work-products.bin b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/work-products.bin new file mode 100644 index 0000000..b0191e6 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls-1n4ykt1q61trof3bnckgbjpkx/work-products.bin differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls.lock b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/fountain_core-1rvfto8jf6rg6/s-hiaw5iiww8-04k61ls.lock new file mode 100755 index 0000000..e69de29 diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/4n6ig9mfzlsco58ep9yfht6m8.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/4n6ig9mfzlsco58ep9yfht6m8.o new file mode 100644 index 0000000..9bab8dc Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/4n6ig9mfzlsco58ep9yfht6m8.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/4xok3xueklb03w2lo3k8n2upo.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/4xok3xueklb03w2lo3k8n2upo.o new file mode 100644 index 0000000..8aed561 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/4xok3xueklb03w2lo3k8n2upo.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/6m4jgx8z1634d99as37r2t595.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/6m4jgx8z1634d99as37r2t595.o new file mode 100644 index 0000000..f7a7f2e Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/6m4jgx8z1634d99as37r2t595.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/7tjyd013xfjwqreb6jk9kpg67.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/7tjyd013xfjwqreb6jk9kpg67.o new file mode 100644 index 0000000..d6f4930 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/7tjyd013xfjwqreb6jk9kpg67.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/dep-graph.bin b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/dep-graph.bin new file mode 100644 index 0000000..825eb00 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/dep-graph.bin differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/dwzso6s3c2jslwngz8tdab0ce.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/dwzso6s3c2jslwngz8tdab0ce.o new file mode 100644 index 0000000..5af8bcd Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/dwzso6s3c2jslwngz8tdab0ce.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/query-cache.bin b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/query-cache.bin new file mode 100644 index 0000000..ee81839 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/query-cache.bin differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/work-products.bin b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/work-products.bin new file mode 100644 index 0000000..da39689 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag-0ntjxf8gwwj3oqpnphv5ilgdv/work-products.bin differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag.lock b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-06pvgv9rf4hz6/s-hiaw5izh9f-1irizag.lock new file mode 100755 index 0000000..e69de29 diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/08ikqgkk696jxiihrf33zfa6b.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/08ikqgkk696jxiihrf33zfa6b.o new file mode 100644 index 0000000..a462d51 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/08ikqgkk696jxiihrf33zfa6b.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/0m68f43kihv5xwaea17qtpn1k.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/0m68f43kihv5xwaea17qtpn1k.o new file mode 100644 index 0000000..5b64167 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/0m68f43kihv5xwaea17qtpn1k.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/15w74n2qgbd12xbrldna59caq.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/15w74n2qgbd12xbrldna59caq.o new file mode 100644 index 0000000..d318093 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/15w74n2qgbd12xbrldna59caq.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/1acvxzlwkavbr73hhl1iudbzg.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/1acvxzlwkavbr73hhl1iudbzg.o new file mode 100644 index 0000000..584a19f Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/1acvxzlwkavbr73hhl1iudbzg.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/1mfyiqtpjkfnn8491ympu801d.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/1mfyiqtpjkfnn8491ympu801d.o new file mode 100644 index 0000000..a070604 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/1mfyiqtpjkfnn8491ympu801d.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/26kwaon347mbm9id2448o97ly.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/26kwaon347mbm9id2448o97ly.o new file mode 100644 index 0000000..2f3f7e3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/26kwaon347mbm9id2448o97ly.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/2qnrfxwda72cmncrq4im1j1r7.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/2qnrfxwda72cmncrq4im1j1r7.o new file mode 100644 index 0000000..66a26f3 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/2qnrfxwda72cmncrq4im1j1r7.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/3muqf8z4861jitfygjszla9dc.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/3muqf8z4861jitfygjszla9dc.o new file mode 100644 index 0000000..19074c2 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/3muqf8z4861jitfygjszla9dc.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/3ocj4cie6b03tq0hyipc61gac.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/3ocj4cie6b03tq0hyipc61gac.o new file mode 100644 index 0000000..d45b2d8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/3ocj4cie6b03tq0hyipc61gac.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/3rz7co738s0ra6d8zoi867bb7.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/3rz7co738s0ra6d8zoi867bb7.o new file mode 100644 index 0000000..b37b074 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/3rz7co738s0ra6d8zoi867bb7.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/4sgwihrdf92gu5itzpsi9jxn4.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/4sgwihrdf92gu5itzpsi9jxn4.o new file mode 100644 index 0000000..7829ca5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/4sgwihrdf92gu5itzpsi9jxn4.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/4tkmxcqpvd49dynonnuuj3oz4.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/4tkmxcqpvd49dynonnuuj3oz4.o new file mode 100644 index 0000000..bcb3775 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/4tkmxcqpvd49dynonnuuj3oz4.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/52fcrff3ibczogj0q5qx7ncjz.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/52fcrff3ibczogj0q5qx7ncjz.o new file mode 100644 index 0000000..5603ec6 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/52fcrff3ibczogj0q5qx7ncjz.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/5afx9dck7u5antq80en3sn6xv.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/5afx9dck7u5antq80en3sn6xv.o new file mode 100644 index 0000000..2e34014 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/5afx9dck7u5antq80en3sn6xv.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/61mk48hpg8qrfmge6tp94hmpb.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/61mk48hpg8qrfmge6tp94hmpb.o new file mode 100644 index 0000000..a095c0a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/61mk48hpg8qrfmge6tp94hmpb.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/6a6ltl4po1tr8j3jvxmb4efpp.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/6a6ltl4po1tr8j3jvxmb4efpp.o new file mode 100644 index 0000000..056b3b5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/6a6ltl4po1tr8j3jvxmb4efpp.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/6gier8v9imj4sweupu61k6fyj.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/6gier8v9imj4sweupu61k6fyj.o new file mode 100644 index 0000000..580d648 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/6gier8v9imj4sweupu61k6fyj.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/7l2gsjljbp37npan3x2qir1eu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/7l2gsjljbp37npan3x2qir1eu.o new file mode 100644 index 0000000..7e966c8 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/7l2gsjljbp37npan3x2qir1eu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/7ygpch342zm534lcd6jianb9u.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/7ygpch342zm534lcd6jianb9u.o new file mode 100644 index 0000000..1ad3625 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/7ygpch342zm534lcd6jianb9u.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/8udnfdap6113xlaw6i3uzgdgz.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/8udnfdap6113xlaw6i3uzgdgz.o new file mode 100644 index 0000000..bd0056d Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/8udnfdap6113xlaw6i3uzgdgz.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/97dufzsm7pdvno8l35am5lrtu.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/97dufzsm7pdvno8l35am5lrtu.o new file mode 100644 index 0000000..08e98a5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/97dufzsm7pdvno8l35am5lrtu.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/9h2iy7uvchxfp5fxk8q1qtusl.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/9h2iy7uvchxfp5fxk8q1qtusl.o new file mode 100644 index 0000000..70688af Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/9h2iy7uvchxfp5fxk8q1qtusl.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/bvc1m774hrsht8alltpmr77qe.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/bvc1m774hrsht8alltpmr77qe.o new file mode 100644 index 0000000..aac738a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/bvc1m774hrsht8alltpmr77qe.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/cj0zi5n2fey1t1rknmcx4iee6.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/cj0zi5n2fey1t1rknmcx4iee6.o new file mode 100644 index 0000000..b25a4bf Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/cj0zi5n2fey1t1rknmcx4iee6.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/cjxn5m0kvl74t46mfjigpoicd.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/cjxn5m0kvl74t46mfjigpoicd.o new file mode 100644 index 0000000..aec5e8c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/cjxn5m0kvl74t46mfjigpoicd.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/cw3xdc8vikykoype0uz5ewamq.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/cw3xdc8vikykoype0uz5ewamq.o new file mode 100644 index 0000000..d2b7de5 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/cw3xdc8vikykoype0uz5ewamq.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/dchktkw1tkenjmluomu9qttpa.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/dchktkw1tkenjmluomu9qttpa.o new file mode 100644 index 0000000..280517a Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/dchktkw1tkenjmluomu9qttpa.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/dep-graph.bin b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/dep-graph.bin new file mode 100644 index 0000000..b7f5e6b Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/dep-graph.bin differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/dqk7c87fwiiwujmdptzh42te9.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/dqk7c87fwiiwujmdptzh42te9.o new file mode 100644 index 0000000..8fc0559 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/dqk7c87fwiiwujmdptzh42te9.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/duqyh72mbzwz4i683v2afii58.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/duqyh72mbzwz4i683v2afii58.o new file mode 100644 index 0000000..0d1ef9c Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/duqyh72mbzwz4i683v2afii58.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/ertllsui3tl4ijceiup4kks2j.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/ertllsui3tl4ijceiup4kks2j.o new file mode 100644 index 0000000..a6dc074 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/ertllsui3tl4ijceiup4kks2j.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/f3v58sihpj85fx87qs4coifse.o b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/f3v58sihpj85fx87qs4coifse.o new file mode 100644 index 0000000..db214b4 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/f3v58sihpj85fx87qs4coifse.o differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/query-cache.bin b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/query-cache.bin new file mode 100644 index 0000000..7774390 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/query-cache.bin differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/work-products.bin b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/work-products.bin new file mode 100644 index 0000000..b0cd530 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm-8blqj9y1wyuwmcusfd7fetk95/work-products.bin differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm.lock b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/incremental/replay_benchmark-1bvrnakud2gjz/s-hiau4tsabr-0kkqebm.lock new file mode 100755 index 0000000..e69de29 diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/replay-benchmark b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/replay-benchmark new file mode 100755 index 0000000..3a21a23 Binary files /dev/null and b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/replay-benchmark differ diff --git a/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/replay-benchmark.d b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/replay-benchmark.d new file mode 100644 index 0000000..257687e --- /dev/null +++ b/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/replay-benchmark.d @@ -0,0 +1 @@ +/Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/target/debug/replay-benchmark: /Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/decoder.rs /Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/encoder.rs /Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/lib.rs /Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/fountain-core/src/symbol.rs /Users/dennis_leedennis_lee/Documents/GitHub/XDevice-infocard/implementations/03-animated-qr-visual-handshake/tools/replay-benchmark/src/main.rs diff --git a/implementations/04-web3-sbt-contacts/README.md b/implementations/04-web3-sbt-contacts/README.md new file mode 100644 index 0000000..c77fe44 --- /dev/null +++ b/implementations/04-web3-sbt-contacts/README.md @@ -0,0 +1,34 @@ +# Plan 04: Web3 SBT Contacts + +## Structure + +- `contracts/`: Solidity contracts and notes for Foundry/Hardhat setup. +- `backend-relayer/`: Go HTTP relayer with in-memory request lifecycle and deterministic typed-data digest checks. +- `dApp-client/`: Frontend placeholder and implementation notes. +- `infra/`: Local infrastructure placeholders (`docker-compose.yml`). +- `docs/`: Operations notes for RPC migration. +- `scripts/`: local test and deployment templates. + +## Completion Matrix + +| Area | Status | Notes | +|---|---|---| +| Contracts scaffold (`SBTProfile`, `ConnectionGraph`) | Partial | Minimal implementation and tests exist; production hardening pending. | +| Foundry tests/docs | Partial | Unit tests + `forge` command docs present in `contracts/README.md` and `contracts/test/README.md`. | +| Relayer API (`/health`, `/v1/prepare`, `/v1/submit`, `/v1/tx/:hash`) | Done (local scope) | Request lifecycle, expiry, single-use, and tx status tracking implemented. | +| Signable payload validation | Done | Domain/type/message strict validation wired in submit flow. | +| EIP-712 digest computation | Done (deterministic hash verification) | Canonical digest generation from signable fields implemented in `backend-relayer/eip712.go`. | +| Wallet signature recovery | Not done | Deliberately out of scope for this pass; digest verification is implemented. | +| Chain RPC abstraction | Done | `ChainRPC` interface + default `InMemoryChainRPC` adapter implemented in `backend-relayer/rpc.go`. | +| RPC integration tests (no network) | Done | Mock RPC integration covered in relayer tests; no external infra required. | +| RPC-backed deployment path | Partial | Script and ops templates added; concrete JSON-RPC broadcaster implementation pending. | +| dApp client | Not done | Placeholder only. | +| Full infra/production rollout | Not done | Requires external chain infra and secret management. | + +## Ops and Migration Docs + +1. RPC migration guide: `docs/relayer-rpc-migration.md` +2. Deployment template: `scripts/deploy_relayer_rpc_template.sh` +3. Local relayer E2E checks: + - `scripts/relayer_e2e.sh` + - `scripts/relayer_e2e_no_bind.sh` diff --git a/implementations/04-web3-sbt-contacts/backend-relayer/backend-relayer b/implementations/04-web3-sbt-contacts/backend-relayer/backend-relayer new file mode 100755 index 0000000..af012b1 Binary files /dev/null and b/implementations/04-web3-sbt-contacts/backend-relayer/backend-relayer differ diff --git a/implementations/04-web3-sbt-contacts/backend-relayer/eip712.go b/implementations/04-web3-sbt-contacts/backend-relayer/eip712.go new file mode 100644 index 0000000..067e4fb --- /dev/null +++ b/implementations/04-web3-sbt-contacts/backend-relayer/eip712.go @@ -0,0 +1,89 @@ +package main + +import ( + "encoding/hex" + "fmt" + "math/big" + "strings" + + "golang.org/x/crypto/sha3" +) + +var ( + eip712DomainTypeHash = keccak256Bytes([]byte("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)")) + contactOperationTypeHash = keccak256Bytes([]byte("ContactOperation(string requestId,string operation,string nonce)")) +) + +func eip712DigestHex(data signableTypedData) (string, error) { + digest, err := eip712Digest(data) + if err != nil { + return "", err + } + return "0x" + hex.EncodeToString(digest), nil +} + +func eip712Digest(data signableTypedData) ([]byte, error) { + domainSeparator, err := eip712DomainSeparator(data.Domain) + if err != nil { + return nil, err + } + messageHash := eip712ContactOperationHash(data.Message) + prefix := []byte{0x19, 0x01} + return keccak256Bytes(prefix, domainSeparator, messageHash), nil +} + +func eip712DomainSeparator(domain signableTypedDataDomain) ([]byte, error) { + chainID := new(big.Int) + if _, ok := chainID.SetString(strings.TrimSpace(domain.ChainID), 10); !ok { + return nil, fmt.Errorf("invalid domain.chainId") + } + if len(strings.TrimSpace(domain.VerifyingContract)) == 0 { + return nil, fmt.Errorf("invalid domain.verifyingContract") + } + addrWord, err := hexAddressToWord(domain.VerifyingContract) + if err != nil { + return nil, fmt.Errorf("invalid domain.verifyingContract") + } + return keccak256Bytes( + eip712DomainTypeHash, + keccak256Bytes([]byte(domain.Name)), + keccak256Bytes([]byte(domain.Version)), + leftPad32(chainID.Bytes()), + addrWord, + ), nil +} + +func eip712ContactOperationHash(msg signableMessage) []byte { + return keccak256Bytes( + contactOperationTypeHash, + keccak256Bytes([]byte(msg.RequestID)), + keccak256Bytes([]byte(msg.Operation)), + keccak256Bytes([]byte(msg.Nonce)), + ) +} + +func keccak256Bytes(parts ...[]byte) []byte { + h := sha3.NewLegacyKeccak256() + for _, p := range parts { + h.Write(p) + } + return h.Sum(nil) +} + +func hexAddressToWord(addr string) ([]byte, error) { + raw := strings.TrimPrefix(strings.TrimSpace(addr), "0x") + if len(raw) != 40 { + return nil, fmt.Errorf("address must be 20 bytes") + } + decoded, err := hex.DecodeString(raw) + if err != nil { + return nil, err + } + return leftPad32(decoded), nil +} + +func leftPad32(b []byte) []byte { + out := make([]byte, 32) + copy(out[32-len(b):], b) + return out +} diff --git a/implementations/04-web3-sbt-contacts/backend-relayer/eip712_test.go b/implementations/04-web3-sbt-contacts/backend-relayer/eip712_test.go new file mode 100644 index 0000000..195dd1c --- /dev/null +++ b/implementations/04-web3-sbt-contacts/backend-relayer/eip712_test.go @@ -0,0 +1,44 @@ +package main + +import "testing" + +func TestEIP712DigestDeterministic(t *testing.T) { + signable := buildSignableTypedData("rid-123", "connect", "nonce-xyz") + signable.Domain.ChainID = "31337" + signable.Domain.VerifyingContract = "0x1111111111111111111111111111111111111111" + + d1, err := eip712DigestHex(signable) + if err != nil { + t.Fatalf("digest: %v", err) + } + d2, err := eip712DigestHex(signable) + if err != nil { + t.Fatalf("digest: %v", err) + } + if d1 != d2 { + t.Fatalf("digest not deterministic: %q vs %q", d1, d2) + } + if len(d1) != 66 || d1[:2] != "0x" { + t.Fatalf("unexpected digest format: %q", d1) + } +} + +func TestEIP712DigestChangesOnMessageMutation(t *testing.T) { + base := buildSignableTypedData("rid-123", "connect", "nonce-xyz") + base.Domain.ChainID = "31337" + base.Domain.VerifyingContract = "0x1111111111111111111111111111111111111111" + + d1, err := eip712DigestHex(base) + if err != nil { + t.Fatalf("digest: %v", err) + } + mutated := base + mutated.Message.Nonce = "nonce-other" + d2, err := eip712DigestHex(mutated) + if err != nil { + t.Fatalf("digest: %v", err) + } + if d1 == d2 { + t.Fatalf("digest should change when message changes") + } +} diff --git a/implementations/04-web3-sbt-contacts/backend-relayer/go.mod b/implementations/04-web3-sbt-contacts/backend-relayer/go.mod new file mode 100644 index 0000000..a63b433 --- /dev/null +++ b/implementations/04-web3-sbt-contacts/backend-relayer/go.mod @@ -0,0 +1,7 @@ +module github.com/example/web3-sbt-contacts/backend-relayer + +go 1.25.0 + +require golang.org/x/crypto v0.50.0 + +require golang.org/x/sys v0.43.0 // indirect diff --git a/implementations/04-web3-sbt-contacts/backend-relayer/go.sum b/implementations/04-web3-sbt-contacts/backend-relayer/go.sum new file mode 100644 index 0000000..035bcee --- /dev/null +++ b/implementations/04-web3-sbt-contacts/backend-relayer/go.sum @@ -0,0 +1,4 @@ +golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= +golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= +golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= +golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= diff --git a/implementations/04-web3-sbt-contacts/backend-relayer/main.go b/implementations/04-web3-sbt-contacts/backend-relayer/main.go new file mode 100644 index 0000000..382efe5 --- /dev/null +++ b/implementations/04-web3-sbt-contacts/backend-relayer/main.go @@ -0,0 +1,358 @@ +package main + +import ( + "crypto/rand" + "encoding/hex" + "encoding/json" + "fmt" + "log" + "net/http" + "os" + "strings" + "sync" + "time" +) + +type prepareRequest struct { + Operation string `json:"operation"` + Payload any `json:"payload"` +} + +type prepareResponse struct { + RequestID string `json:"requestId"` + Nonce string `json:"nonce"` + Status string `json:"status"` + Message string `json:"message"` + Signable signableTypedData `json:"signable"` +} + +type submitRequest struct { + RequestID string `json:"requestId"` + Signature string `json:"signature"` + Signable signableTypedData `json:"signable"` +} + +type submitResponse struct { + TxHash string `json:"txHash"` + Status string `json:"status"` + Message string `json:"message"` +} + +type txStatusResponse struct { + TxHash string `json:"txHash"` + RequestID string `json:"requestId"` + Operation string `json:"operation"` + Status string `json:"status"` +} + +type preparedRequest struct { + Operation string + Nonce string + Signable signableTypedData + CreatedAt time.Time +} + +type signableTypedData struct { + PrimaryType string `json:"primaryType"` + Domain signableTypedDataDomain `json:"domain"` + Types map[string][]signableMember `json:"types"` + Message signableMessage `json:"message"` +} + +type signableTypedDataDomain struct { + Name string `json:"name"` + Version string `json:"version"` + ChainID string `json:"chainId"` + VerifyingContract string `json:"verifyingContract"` +} + +type signableMember struct { + Name string `json:"name"` + Type string `json:"type"` +} + +type signableMessage struct { + RequestID string `json:"requestId"` + Operation string `json:"operation"` + Nonce string `json:"nonce"` +} + +var ( + requestsMu sync.Mutex + requests = map[string]preparedRequest{} + txMu sync.Mutex + txStatus = map[string]txStatusResponse{} + chainRPC ChainRPC = buildChainRPC() +) + +func main() { + addr := os.Getenv("RELAYER_ADDR") + if strings.TrimSpace(addr) == "" { + addr = "127.0.0.1:18080" + } + mux := http.NewServeMux() + mux.HandleFunc("/health", healthHandler) + mux.HandleFunc("/v1/prepare", prepareHandler) + mux.HandleFunc("/v1/submit", submitHandler) + mux.HandleFunc("/v1/tx/", txStatusHandler) + + server := &http.Server{ + Addr: addr, + Handler: mux, + ReadHeaderTimeout: 5 * time.Second, + } + + log.Printf("backend-relayer listening on %s", addr) + if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { + log.Fatalf("server error: %v", err) + } +} + +func healthHandler(w http.ResponseWriter, _ *http.Request) { + writeJSON(w, http.StatusOK, map[string]string{ + "status": "ok", + "service": "backend-relayer", + }) +} + +func prepareHandler(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeJSON(w, http.StatusMethodNotAllowed, map[string]string{"error": "method not allowed"}) + return + } + + var req prepareRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "invalid json"}) + return + } + + if strings.TrimSpace(req.Operation) == "" { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "operation is required"}) + return + } + if !isAllowedOperation(req.Operation) { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "unsupported operation"}) + return + } + + requestID, err := randomHex(16) + if err != nil { + writeJSON(w, http.StatusInternalServerError, map[string]string{"error": "failed to generate request id"}) + return + } + nonce, err := randomHex(16) + if err != nil { + writeJSON(w, http.StatusInternalServerError, map[string]string{"error": "failed to generate nonce"}) + return + } + + requestsMu.Lock() + signable := buildSignableTypedData(requestID, req.Operation, nonce) + requests[requestID] = preparedRequest{ + Operation: req.Operation, + Nonce: nonce, + Signable: signable, + CreatedAt: time.Now().UTC(), + } + requestsMu.Unlock() + + writeJSON(w, http.StatusOK, prepareResponse{ + RequestID: requestID, + Nonce: nonce, + Status: "prepared", + Message: "request prepared", + Signable: signable, + }) +} + +func submitHandler(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + writeJSON(w, http.StatusMethodNotAllowed, map[string]string{"error": "method not allowed"}) + return + } + + var req submitRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "invalid json"}) + return + } + + if strings.TrimSpace(req.RequestID) == "" || strings.TrimSpace(req.Signature) == "" { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "requestId and signature are required"}) + return + } + if !strings.HasPrefix(req.Signature, "0x") || len(req.Signature) < 10 { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "signature must be a hex string starting with 0x"}) + return + } + if _, err := hex.DecodeString(strings.TrimPrefix(req.Signature, "0x")); err != nil { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "signature is not valid hex"}) + return + } + + requestsMu.Lock() + prepared, ok := requests[req.RequestID] + if ok { + delete(requests, req.RequestID) + } + requestsMu.Unlock() + if !ok { + writeJSON(w, http.StatusNotFound, map[string]string{"error": "request not found or already submitted"}) + return + } + + if time.Since(prepared.CreatedAt) > 10*time.Minute { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "prepared request expired"}) + return + } + if err := validateSignable(req.Signable, prepared.Signable, req.RequestID); err != nil { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": err.Error()}) + return + } + digestHex, err := eip712DigestHex(req.Signable) + if err != nil { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": err.Error()}) + return + } + + relayResult, err := chainRPC.RelayContactOperation(r.Context(), RelayTxRequest{ + RequestID: req.RequestID, + Operation: prepared.Operation, + Signature: req.Signature, + TypedData: req.Signable, + TypedDataHash: digestHex, + }) + if err != nil { + writeJSON(w, http.StatusBadGateway, map[string]string{"error": fmt.Sprintf("relay failed: %v", err)}) + return + } + + writeJSON(w, http.StatusOK, submitResponse{ + TxHash: relayResult.TxHash, + Status: relayResult.Status, + Message: "accepted for relay", + }) + + txMu.Lock() + txStatus[relayResult.TxHash] = txStatusResponse{ + TxHash: relayResult.TxHash, + RequestID: req.RequestID, + Operation: prepared.Operation, + Status: relayResult.Status, + } + txMu.Unlock() +} + +func txStatusHandler(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + writeJSON(w, http.StatusMethodNotAllowed, map[string]string{"error": "method not allowed"}) + return + } + txHash := strings.TrimPrefix(r.URL.Path, "/v1/tx/") + if txHash == "" { + writeJSON(w, http.StatusBadRequest, map[string]string{"error": "tx hash is required"}) + return + } + txMu.Lock() + status, ok := txStatus[txHash] + txMu.Unlock() + if !ok { + writeJSON(w, http.StatusNotFound, map[string]string{"error": "tx not found"}) + return + } + writeJSON(w, http.StatusOK, status) +} + +func writeJSON(w http.ResponseWriter, status int, payload any) { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(status) + _ = json.NewEncoder(w).Encode(payload) +} + +func randomHex(size int) (string, error) { + b := make([]byte, size) + if _, err := rand.Read(b); err != nil { + return "", err + } + return hex.EncodeToString(b), nil +} + +func isAllowedOperation(op string) bool { + switch strings.ToLower(strings.TrimSpace(op)) { + case "connect", "exchange": + return true + default: + return false + } +} + +func buildSignableTypedData(requestID, operation, nonce string) signableTypedData { + return signableTypedData{ + PrimaryType: "ContactOperation", + Domain: signableTypedDataDomain{ + Name: "Web3SBTContactsRelayer", + Version: "1", + ChainID: "0", + VerifyingContract: "0x0000000000000000000000000000000000000000", + }, + Types: map[string][]signableMember{ + "EIP712Domain": { + {Name: "name", Type: "string"}, + {Name: "version", Type: "string"}, + {Name: "chainId", Type: "uint256"}, + {Name: "verifyingContract", Type: "address"}, + }, + "ContactOperation": { + {Name: "requestId", Type: "string"}, + {Name: "operation", Type: "string"}, + {Name: "nonce", Type: "string"}, + }, + }, + Message: signableMessage{ + RequestID: requestID, + Operation: operation, + Nonce: nonce, + }, + } +} + +func validateSignable(actual, expected signableTypedData, requestID string) error { + if actual.PrimaryType == "" || actual.Domain.Name == "" || len(actual.Types) == 0 || actual.Message.RequestID == "" { + return fmt.Errorf("signable payload is required") + } + if actual.PrimaryType != expected.PrimaryType { + return fmt.Errorf("signable primaryType mismatch") + } + if actual.Domain != expected.Domain { + return fmt.Errorf("signable domain mismatch") + } + if !sameTypes(actual.Types, expected.Types) { + return fmt.Errorf("signable types mismatch") + } + if actual.Message != expected.Message { + return fmt.Errorf("signable message mismatch") + } + if actual.Message.RequestID != requestID { + return fmt.Errorf("signable requestId mismatch") + } + return nil +} + +func sameTypes(actual, expected map[string][]signableMember) bool { + if len(actual) != len(expected) { + return false + } + for key, expectedMembers := range expected { + actualMembers, ok := actual[key] + if !ok || len(actualMembers) != len(expectedMembers) { + return false + } + for i := range expectedMembers { + if actualMembers[i] != expectedMembers[i] { + return false + } + } + } + return true +} diff --git a/implementations/04-web3-sbt-contacts/backend-relayer/main_test.go b/implementations/04-web3-sbt-contacts/backend-relayer/main_test.go new file mode 100644 index 0000000..2ac012e --- /dev/null +++ b/implementations/04-web3-sbt-contacts/backend-relayer/main_test.go @@ -0,0 +1,457 @@ +package main + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "net/http" + "net/http/httptest" + "strings" + "testing" + "time" +) + +func resetRequests() { + requestsMu.Lock() + defer requestsMu.Unlock() + requests = map[string]preparedRequest{} + txMu.Lock() + defer txMu.Unlock() + txStatus = map[string]txStatusResponse{} + chainRPC = &InMemoryChainRPC{} +} + +type mockChainRPC struct { + result RelayResult + err error + last RelayTxRequest +} + +func (m *mockChainRPC) RelayContactOperation(_ context.Context, req RelayTxRequest) (RelayResult, error) { + m.last = req + if m.err != nil { + return RelayResult{}, m.err + } + return m.result, nil +} + +func TestPrepareAndSubmitHappyPath(t *testing.T) { + resetRequests() + + prepareBody := `{"operation":"connect","payload":{"from":"did:example:a","to":"did:example:b"}}` + prepareReq := httptest.NewRequest(http.MethodPost, "/v1/prepare", strings.NewReader(prepareBody)) + prepareRec := httptest.NewRecorder() + + prepareHandler(prepareRec, prepareReq) + + if prepareRec.Code != http.StatusOK { + t.Fatalf("prepare status = %d, want %d", prepareRec.Code, http.StatusOK) + } + + var prepareResp prepareResponse + if err := json.NewDecoder(prepareRec.Body).Decode(&prepareResp); err != nil { + t.Fatalf("decode prepare response: %v", err) + } + + if prepareResp.Status != "prepared" { + t.Fatalf("prepare status field = %q, want prepared", prepareResp.Status) + } + if prepareResp.RequestID == "" || prepareResp.Nonce == "" { + t.Fatalf("prepare response missing requestId/nonce: %+v", prepareResp) + } + if prepareResp.Signable.PrimaryType != "ContactOperation" { + t.Fatalf("primaryType = %q, want ContactOperation", prepareResp.Signable.PrimaryType) + } + if prepareResp.Signable.Domain.Name != "Web3SBTContactsRelayer" { + t.Fatalf("domain.name = %q, want Web3SBTContactsRelayer", prepareResp.Signable.Domain.Name) + } + if prepareResp.Signable.Domain.ChainID != "0" { + t.Fatalf("domain.chainId = %q, want 0", prepareResp.Signable.Domain.ChainID) + } + if len(prepareResp.Signable.Types["EIP712Domain"]) != 4 || len(prepareResp.Signable.Types["ContactOperation"]) != 3 { + t.Fatalf("unexpected signable types: %+v", prepareResp.Signable.Types) + } + if prepareResp.Signable.Message.RequestID != prepareResp.RequestID || prepareResp.Signable.Message.Nonce != prepareResp.Nonce { + t.Fatalf("signable.message mismatch: %+v", prepareResp.Signable.Message) + } + + submitPayload := submitRequest{ + RequestID: prepareResp.RequestID, + Signature: "0x1234abcd90", + Signable: prepareResp.Signable, + } + submitJSON, err := json.Marshal(submitPayload) + if err != nil { + t.Fatalf("marshal submit payload: %v", err) + } + + submitReq := httptest.NewRequest(http.MethodPost, "/v1/submit", bytes.NewReader(submitJSON)) + submitRec := httptest.NewRecorder() + submitHandler(submitRec, submitReq) + + if submitRec.Code != http.StatusOK { + t.Fatalf("submit status = %d, want %d", submitRec.Code, http.StatusOK) + } + + var submitResp submitResponse + if err := json.NewDecoder(submitRec.Body).Decode(&submitResp); err != nil { + t.Fatalf("decode submit response: %v", err) + } + if submitResp.Status != "submitted" { + t.Fatalf("submit status field = %q, want submitted", submitResp.Status) + } + if !strings.HasPrefix(submitResp.TxHash, "0x") || len(submitResp.TxHash) != 66 { + t.Fatalf("invalid tx hash format: %q", submitResp.TxHash) + } + + txReq := httptest.NewRequest(http.MethodGet, "/v1/tx/"+submitResp.TxHash, nil) + txRec := httptest.NewRecorder() + txStatusHandler(txRec, txReq) + if txRec.Code != http.StatusOK { + t.Fatalf("tx status = %d, want %d", txRec.Code, http.StatusOK) + } + var txResp txStatusResponse + if err := json.NewDecoder(txRec.Body).Decode(&txResp); err != nil { + t.Fatalf("decode tx response: %v", err) + } + if txResp.TxHash != submitResp.TxHash || txResp.RequestID != prepareResp.RequestID { + t.Fatalf("tx status response mismatch: %+v", txResp) + } + if txResp.Operation != "connect" { + t.Fatalf("tx operation = %q, want connect", txResp.Operation) + } +} + +func TestPrepareHandlerErrors(t *testing.T) { + resetRequests() + + tests := []struct { + name string + method string + body string + wantStatus int + wantErr string + }{ + { + name: "method not allowed", + method: http.MethodGet, + body: "", + wantStatus: http.StatusMethodNotAllowed, + wantErr: "method not allowed", + }, + { + name: "invalid json", + method: http.MethodPost, + body: "{", + wantStatus: http.StatusBadRequest, + wantErr: "invalid json", + }, + { + name: "missing operation", + method: http.MethodPost, + body: `{"payload":{"x":1}}`, + wantStatus: http.StatusBadRequest, + wantErr: "operation is required", + }, + { + name: "unsupported operation", + method: http.MethodPost, + body: `{"operation":"delete","payload":{"x":1}}`, + wantStatus: http.StatusBadRequest, + wantErr: "unsupported operation", + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + req := httptest.NewRequest(tc.method, "/v1/prepare", strings.NewReader(tc.body)) + rec := httptest.NewRecorder() + prepareHandler(rec, req) + + if rec.Code != tc.wantStatus { + t.Fatalf("status = %d, want %d", rec.Code, tc.wantStatus) + } + + var errResp map[string]string + if err := json.NewDecoder(rec.Body).Decode(&errResp); err != nil { + t.Fatalf("decode response: %v", err) + } + if errResp["error"] != tc.wantErr { + t.Fatalf("error = %q, want %q", errResp["error"], tc.wantErr) + } + }) + } +} + +func TestSubmitHandlerErrors(t *testing.T) { + resetRequests() + + t.Run("method not allowed", func(t *testing.T) { + req := httptest.NewRequest(http.MethodGet, "/v1/submit", nil) + rec := httptest.NewRecorder() + submitHandler(rec, req) + assertErrorResponse(t, rec, http.StatusMethodNotAllowed, "method not allowed") + }) + + t.Run("invalid json", func(t *testing.T) { + req := httptest.NewRequest(http.MethodPost, "/v1/submit", strings.NewReader("{")) + rec := httptest.NewRecorder() + submitHandler(rec, req) + assertErrorResponse(t, rec, http.StatusBadRequest, "invalid json") + }) + + t.Run("missing requestId or signature", func(t *testing.T) { + req := httptest.NewRequest(http.MethodPost, "/v1/submit", strings.NewReader(`{"requestId":"","signature":"","signable":{}}`)) + rec := httptest.NewRecorder() + submitHandler(rec, req) + assertErrorResponse(t, rec, http.StatusBadRequest, "requestId and signature are required") + }) + + t.Run("invalid signature format", func(t *testing.T) { + req := httptest.NewRequest(http.MethodPost, "/v1/submit", strings.NewReader(`{"requestId":"abc","signature":"1234"}`)) + rec := httptest.NewRecorder() + submitHandler(rec, req) + assertErrorResponse(t, rec, http.StatusBadRequest, "signature must be a hex string starting with 0x") + }) + + t.Run("invalid signature hex", func(t *testing.T) { + req := httptest.NewRequest(http.MethodPost, "/v1/submit", strings.NewReader(`{"requestId":"abc","signature":"0xzzzzzzzzzz"}`)) + rec := httptest.NewRecorder() + submitHandler(rec, req) + assertErrorResponse(t, rec, http.StatusBadRequest, "signature is not valid hex") + }) + + t.Run("request not found", func(t *testing.T) { + req := httptest.NewRequest(http.MethodPost, "/v1/submit", strings.NewReader(`{"requestId":"missing","signature":"0x1234abcd90","signable":{"primaryType":"ContactOperation","domain":{"name":"Web3SBTContactsRelayer","version":"1","chainId":"0","verifyingContract":"0x0000000000000000000000000000000000000000"},"types":{"EIP712Domain":[{"name":"name","type":"string"},{"name":"version","type":"string"},{"name":"chainId","type":"uint256"},{"name":"verifyingContract","type":"address"}],"ContactOperation":[{"name":"requestId","type":"string"},{"name":"operation","type":"string"},{"name":"nonce","type":"string"}]},"message":{"requestId":"missing","operation":"connect","nonce":"x"}}}`)) + rec := httptest.NewRecorder() + submitHandler(rec, req) + assertErrorResponse(t, rec, http.StatusNotFound, "request not found or already submitted") + }) + + t.Run("expired request", func(t *testing.T) { + resetRequests() + requestsMu.Lock() + requests["expired-id"] = preparedRequest{ + Operation: "connect", + Nonce: "00112233", + CreatedAt: time.Now().UTC().Add(-11 * time.Minute), + } + requestsMu.Unlock() + + req := httptest.NewRequest(http.MethodPost, "/v1/submit", strings.NewReader(`{"requestId":"expired-id","signature":"0x1234abcd90"}`)) + rec := httptest.NewRecorder() + submitHandler(rec, req) + assertErrorResponse(t, rec, http.StatusBadRequest, "prepared request expired") + }) + + t.Run("missing signable payload", func(t *testing.T) { + resetRequests() + requestsMu.Lock() + requests["ready-id"] = preparedRequest{ + Operation: "connect", + Nonce: "00112233", + Signable: buildSignableTypedData("ready-id", "connect", "00112233"), + CreatedAt: time.Now().UTC(), + } + requestsMu.Unlock() + + req := httptest.NewRequest(http.MethodPost, "/v1/submit", strings.NewReader(`{"requestId":"ready-id","signature":"0x1234abcd90","signable":{}}`)) + rec := httptest.NewRecorder() + submitHandler(rec, req) + assertErrorResponse(t, rec, http.StatusBadRequest, "signable payload is required") + }) + + t.Run("signable message mismatch", func(t *testing.T) { + resetRequests() + signable := buildSignableTypedData("ready-id", "connect", "00112233") + requestsMu.Lock() + requests["ready-id"] = preparedRequest{ + Operation: "connect", + Nonce: "00112233", + Signable: signable, + CreatedAt: time.Now().UTC(), + } + requestsMu.Unlock() + + signable.Message.Operation = "exchange" + payload := submitRequest{ + RequestID: "ready-id", + Signature: "0x1234abcd90", + Signable: signable, + } + body, err := json.Marshal(payload) + if err != nil { + t.Fatalf("marshal payload: %v", err) + } + req := httptest.NewRequest(http.MethodPost, "/v1/submit", bytes.NewReader(body)) + rec := httptest.NewRecorder() + submitHandler(rec, req) + assertErrorResponse(t, rec, http.StatusBadRequest, "signable message mismatch") + }) + + t.Run("invalid domain chainId", func(t *testing.T) { + resetRequests() + signable := buildSignableTypedData("ready-id", "connect", "00112233") + signable.Domain.ChainID = "NaN" + requestsMu.Lock() + requests["ready-id"] = preparedRequest{ + Operation: "connect", + Nonce: "00112233", + Signable: signable, + CreatedAt: time.Now().UTC(), + } + requestsMu.Unlock() + payload := submitRequest{RequestID: "ready-id", Signature: "0x1234abcd90", Signable: signable} + body, err := json.Marshal(payload) + if err != nil { + t.Fatalf("marshal payload: %v", err) + } + req := httptest.NewRequest(http.MethodPost, "/v1/submit", bytes.NewReader(body)) + rec := httptest.NewRecorder() + submitHandler(rec, req) + assertErrorResponse(t, rec, http.StatusBadRequest, "invalid domain.chainId") + }) + + t.Run("rpc failure", func(t *testing.T) { + resetRequests() + mock := &mockChainRPC{err: errors.New("rpc unavailable")} + chainRPC = mock + signable := buildSignableTypedData("ready-id", "connect", "00112233") + requestsMu.Lock() + requests["ready-id"] = preparedRequest{ + Operation: "connect", + Nonce: "00112233", + Signable: signable, + CreatedAt: time.Now().UTC(), + } + requestsMu.Unlock() + payload := submitRequest{RequestID: "ready-id", Signature: "0x1234abcd90", Signable: signable} + body, err := json.Marshal(payload) + if err != nil { + t.Fatalf("marshal payload: %v", err) + } + req := httptest.NewRequest(http.MethodPost, "/v1/submit", bytes.NewReader(body)) + rec := httptest.NewRecorder() + submitHandler(rec, req) + assertErrorResponse(t, rec, http.StatusBadGateway, "relay failed: rpc unavailable") + }) +} + +func TestTxStatusErrors(t *testing.T) { + resetRequests() + t.Run("method not allowed", func(t *testing.T) { + req := httptest.NewRequest(http.MethodPost, "/v1/tx/0xabc", nil) + rec := httptest.NewRecorder() + txStatusHandler(rec, req) + assertErrorResponse(t, rec, http.StatusMethodNotAllowed, "method not allowed") + }) + t.Run("missing tx hash", func(t *testing.T) { + req := httptest.NewRequest(http.MethodGet, "/v1/tx/", nil) + rec := httptest.NewRecorder() + txStatusHandler(rec, req) + assertErrorResponse(t, rec, http.StatusBadRequest, "tx hash is required") + }) + t.Run("not found", func(t *testing.T) { + req := httptest.NewRequest(http.MethodGet, "/v1/tx/0xdeadbeef", nil) + rec := httptest.NewRecorder() + txStatusHandler(rec, req) + assertErrorResponse(t, rec, http.StatusNotFound, "tx not found") + }) +} + +func TestSubmitRequestIsSingleUse(t *testing.T) { + resetRequests() + + prepareReq := httptest.NewRequest( + http.MethodPost, + "/v1/prepare", + strings.NewReader(`{"operation":"connect","payload":{"a":1}}`), + ) + prepareRec := httptest.NewRecorder() + prepareHandler(prepareRec, prepareReq) + if prepareRec.Code != http.StatusOK { + t.Fatalf("prepare status = %d, want %d", prepareRec.Code, http.StatusOK) + } + + var prepareResp prepareResponse + if err := json.NewDecoder(prepareRec.Body).Decode(&prepareResp); err != nil { + t.Fatalf("decode prepare response: %v", err) + } + + payload := submitRequest{ + RequestID: prepareResp.RequestID, + Signature: "0x1234abcd90", + Signable: prepareResp.Signable, + } + body, err := json.Marshal(payload) + if err != nil { + t.Fatalf("marshal submit payload: %v", err) + } + + firstReq := httptest.NewRequest(http.MethodPost, "/v1/submit", bytes.NewReader(body)) + firstRec := httptest.NewRecorder() + submitHandler(firstRec, firstReq) + if firstRec.Code != http.StatusOK { + t.Fatalf("first submit status = %d, want %d", firstRec.Code, http.StatusOK) + } + + secondReq := httptest.NewRequest(http.MethodPost, "/v1/submit", bytes.NewReader(body)) + secondRec := httptest.NewRecorder() + submitHandler(secondRec, secondReq) + assertErrorResponse(t, secondRec, http.StatusNotFound, "request not found or already submitted") +} + +func TestSubmitPassesDeterministicEIP712DigestToRPC(t *testing.T) { + resetRequests() + signable := buildSignableTypedData("rid-001", "connect", "nonce-001") + mock := &mockChainRPC{result: RelayResult{TxHash: "0xabc123", Status: "submitted"}} + chainRPC = mock + requestsMu.Lock() + requests["rid-001"] = preparedRequest{ + Operation: "connect", + Nonce: "nonce-001", + Signable: signable, + CreatedAt: time.Now().UTC(), + } + requestsMu.Unlock() + + body, err := json.Marshal(submitRequest{ + RequestID: "rid-001", + Signature: "0x1234abcd90", + Signable: signable, + }) + if err != nil { + t.Fatalf("marshal payload: %v", err) + } + req := httptest.NewRequest(http.MethodPost, "/v1/submit", bytes.NewReader(body)) + rec := httptest.NewRecorder() + submitHandler(rec, req) + if rec.Code != http.StatusOK { + t.Fatalf("status = %d, want %d", rec.Code, http.StatusOK) + } + wantDigest, err := eip712DigestHex(signable) + if err != nil { + t.Fatalf("digest: %v", err) + } + if mock.last.TypedDataHash != wantDigest { + t.Fatalf("typedDataHash = %q, want %q", mock.last.TypedDataHash, wantDigest) + } + if mock.last.RequestID != "rid-001" || mock.last.Operation != "connect" { + t.Fatalf("unexpected relay request: %+v", mock.last) + } +} + +func assertErrorResponse(t *testing.T, rec *httptest.ResponseRecorder, wantStatus int, wantErr string) { + t.Helper() + if rec.Code != wantStatus { + t.Fatalf("status = %d, want %d", rec.Code, wantStatus) + } + var resp map[string]string + if err := json.NewDecoder(rec.Body).Decode(&resp); err != nil { + t.Fatalf("decode response: %v", err) + } + if resp["error"] != wantErr { + t.Fatalf("error = %q, want %q", resp["error"], wantErr) + } +} diff --git a/implementations/04-web3-sbt-contacts/backend-relayer/rpc.go b/implementations/04-web3-sbt-contacts/backend-relayer/rpc.go new file mode 100644 index 0000000..5bb331a --- /dev/null +++ b/implementations/04-web3-sbt-contacts/backend-relayer/rpc.go @@ -0,0 +1,42 @@ +package main + +import ( + "context" + "crypto/sha256" + "encoding/hex" + "encoding/json" + "fmt" +) + +type RelayTxRequest struct { + RequestID string `json:"requestId"` + Operation string `json:"operation"` + Signature string `json:"signature"` + TypedData signableTypedData `json:"typedData"` + TypedDataHash string `json:"typedDataHash"` +} + +type RelayResult struct { + TxHash string `json:"txHash"` + Status string `json:"status"` +} + +type ChainRPC interface { + RelayContactOperation(ctx context.Context, req RelayTxRequest) (RelayResult, error) +} + +type InMemoryChainRPC struct{} + +func (m *InMemoryChainRPC) RelayContactOperation(_ context.Context, req RelayTxRequest) (RelayResult, error) { + blob, err := json.Marshal(req) + if err != nil { + return RelayResult{}, fmt.Errorf("marshal relay payload: %w", err) + } + digest := sha256.Sum256(blob) + return RelayResult{TxHash: "0x" + hex.EncodeToString(digest[:]), Status: "submitted"}, nil +} + +func buildChainRPC() ChainRPC { + // Template hook: swap this implementation with a JSON-RPC-backed client. + return &InMemoryChainRPC{} +} diff --git a/implementations/04-web3-sbt-contacts/backend-relayer/rpc_test.go b/implementations/04-web3-sbt-contacts/backend-relayer/rpc_test.go new file mode 100644 index 0000000..c63a5b2 --- /dev/null +++ b/implementations/04-web3-sbt-contacts/backend-relayer/rpc_test.go @@ -0,0 +1,31 @@ +package main + +import ( + "context" + "testing" +) + +func TestInMemoryChainRPCDeterministic(t *testing.T) { + rpc := &InMemoryChainRPC{} + req := RelayTxRequest{ + RequestID: "rid-1", + Operation: "connect", + Signature: "0x1234abcd90", + TypedData: buildSignableTypedData("rid-1", "connect", "nonce-1"), + TypedDataHash: "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + } + r1, err := rpc.RelayContactOperation(context.Background(), req) + if err != nil { + t.Fatalf("relay: %v", err) + } + r2, err := rpc.RelayContactOperation(context.Background(), req) + if err != nil { + t.Fatalf("relay: %v", err) + } + if r1.TxHash != r2.TxHash { + t.Fatalf("tx hash mismatch: %q vs %q", r1.TxHash, r2.TxHash) + } + if r1.Status != "submitted" { + t.Fatalf("status = %q, want submitted", r1.Status) + } +} diff --git a/implementations/04-web3-sbt-contacts/contracts/README.md b/implementations/04-web3-sbt-contacts/contracts/README.md new file mode 100644 index 0000000..e55eed6 --- /dev/null +++ b/implementations/04-web3-sbt-contacts/contracts/README.md @@ -0,0 +1,40 @@ +# Contracts + +This folder contains minimal Solidity scaffolding for Plan 04: + +- `src/SBTProfile.sol`: soulbound profile mint/update primitive. +- `src/ConnectionGraph.sol`: symmetric connection graph primitive. + +## Foundry Notes + +Once Foundry is installed, run these exact commands from this folder: + +```bash +cd implementations/04-web3-sbt-contacts/contracts +forge --version +forge build +forge test -vv +forge test --match-path test/SBTProfile.t.sol -vv +forge test --match-path test/ConnectionGraph.t.sol -vv +``` + +Expected test files in this repo: + +- `test/SBTProfile.t.sol` +- `test/ConnectionGraph.t.sol` +- `test/README.md` + +## Hardhat Notes + +Suggested starter commands: + +```bash +mkdir hardhat && cd hardhat +npm init -y +npm install --save-dev hardhat +npx hardhat +npx hardhat compile +npx hardhat test +``` + +Copy or reference these contracts from `contracts/src/` into your Hardhat workspace as needed. diff --git a/implementations/04-web3-sbt-contacts/contracts/foundry.toml b/implementations/04-web3-sbt-contacts/contracts/foundry.toml new file mode 100644 index 0000000..0190cec --- /dev/null +++ b/implementations/04-web3-sbt-contacts/contracts/foundry.toml @@ -0,0 +1,14 @@ +[profile.default] +src = "src" +out = "out" +libs = ["lib"] +test = "test" +solc_version = "0.8.24" +optimizer = true +optimizer_runs = 200 + +[fmt] +line_length = 100 +bracket_spacing = true +int_types = "long" +quote_style = "double" diff --git a/implementations/04-web3-sbt-contacts/contracts/src/ConnectionGraph.sol b/implementations/04-web3-sbt-contacts/contracts/src/ConnectionGraph.sol new file mode 100644 index 0000000..f1ea49b --- /dev/null +++ b/implementations/04-web3-sbt-contacts/contracts/src/ConnectionGraph.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +/// @title ConnectionGraph +/// @notice Minimal directed connection graph scaffold for profile relationships. +contract ConnectionGraph { + mapping(address => mapping(address => bool)) public isConnected; + + event ConnectionRequested(address indexed from, address indexed to); + event ConnectionAccepted(address indexed from, address indexed to); + event ConnectionRemoved(address indexed from, address indexed to); + + error SelfConnection(); + error NotConnected(); + + function requestConnection(address to) external { + if (to == msg.sender) revert SelfConnection(); + emit ConnectionRequested(msg.sender, to); + } + + function acceptConnection(address from) external { + if (from == msg.sender) revert SelfConnection(); + isConnected[from][msg.sender] = true; + isConnected[msg.sender][from] = true; + emit ConnectionAccepted(from, msg.sender); + } + + function removeConnection(address peer) external { + if (!isConnected[msg.sender][peer]) revert NotConnected(); + isConnected[msg.sender][peer] = false; + isConnected[peer][msg.sender] = false; + emit ConnectionRemoved(msg.sender, peer); + } +} diff --git a/implementations/04-web3-sbt-contacts/contracts/src/SBTProfile.sol b/implementations/04-web3-sbt-contacts/contracts/src/SBTProfile.sol new file mode 100644 index 0000000..8ba4ec3 --- /dev/null +++ b/implementations/04-web3-sbt-contacts/contracts/src/SBTProfile.sol @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +/// @title SBTProfile +/// @notice Minimal non-transferable profile token scaffold for Web3 contacts. +contract SBTProfile { + struct Profile { + string handle; + string metadataURI; + bool exists; + } + + address public owner; + uint256 public nextTokenId; + + mapping(uint256 => address) private _ownerOf; + mapping(address => uint256) public tokenOf; + mapping(uint256 => Profile) public profileOf; + + event ProfileMinted(address indexed to, uint256 indexed tokenId, string handle, string metadataURI); + event ProfileUpdated(uint256 indexed tokenId, string handle, string metadataURI); + + error NotOwner(); + error Soulbound(); + error AlreadyHasProfile(); + error InvalidToken(); + + modifier onlyOwner() { + if (msg.sender != owner) revert NotOwner(); + _; + } + + constructor() { + owner = msg.sender; + nextTokenId = 1; + } + + function mintProfile(address to, string calldata handle, string calldata metadataURI) external onlyOwner returns (uint256 tokenId) { + if (tokenOf[to] != 0) revert AlreadyHasProfile(); + + tokenId = nextTokenId++; + _ownerOf[tokenId] = to; + tokenOf[to] = tokenId; + profileOf[tokenId] = Profile({handle: handle, metadataURI: metadataURI, exists: true}); + + emit ProfileMinted(to, tokenId, handle, metadataURI); + } + + function updateProfile(uint256 tokenId, string calldata handle, string calldata metadataURI) external { + if (_ownerOf[tokenId] == address(0)) revert InvalidToken(); + if (_ownerOf[tokenId] != msg.sender) revert NotOwner(); + + profileOf[tokenId] = Profile({handle: handle, metadataURI: metadataURI, exists: true}); + emit ProfileUpdated(tokenId, handle, metadataURI); + } + + function ownerOf(uint256 tokenId) external view returns (address) { + address tokenOwner = _ownerOf[tokenId]; + if (tokenOwner == address(0)) revert InvalidToken(); + return tokenOwner; + } + + function transferFrom(address, address, uint256) external pure { + revert Soulbound(); + } + + function safeTransferFrom(address, address, uint256) external pure { + revert Soulbound(); + } + + function safeTransferFrom(address, address, uint256, bytes calldata) external pure { + revert Soulbound(); + } +} diff --git a/implementations/04-web3-sbt-contacts/contracts/test/ConnectionGraph.t.sol b/implementations/04-web3-sbt-contacts/contracts/test/ConnectionGraph.t.sol new file mode 100644 index 0000000..5294721 --- /dev/null +++ b/implementations/04-web3-sbt-contacts/contracts/test/ConnectionGraph.t.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; +import "../src/ConnectionGraph.sol"; + +contract ConnectionGraphTest is Test { + ConnectionGraph internal graph; + address internal alice = address(0xA11CE); + address internal bob = address(0xB0B); + address internal charlie = address(0xCAFE); + + function setUp() public { + graph = new ConnectionGraph(); + } + + function testRequestConnectionEmitsEvent() public { + vm.prank(alice); + vm.expectEmit(true, true, false, false); + emit ConnectionGraph.ConnectionRequested(alice, bob); + graph.requestConnection(bob); + } + + function testAcceptConnectionSetsSymmetricEdges() public { + vm.prank(bob); + graph.acceptConnection(alice); + + assertTrue(graph.isConnected(alice, bob)); + assertTrue(graph.isConnected(bob, alice)); + } + + function testRemoveConnectionClearsSymmetricEdges() public { + vm.prank(bob); + graph.acceptConnection(alice); + + vm.prank(alice); + graph.removeConnection(bob); + + assertFalse(graph.isConnected(alice, bob)); + assertFalse(graph.isConnected(bob, alice)); + } + + function testSelfConnectionReverts() public { + vm.prank(alice); + vm.expectRevert(ConnectionGraph.SelfConnection.selector); + graph.requestConnection(alice); + + vm.prank(alice); + vm.expectRevert(ConnectionGraph.SelfConnection.selector); + graph.acceptConnection(alice); + } + + function testRemoveConnectionRevertsWhenNotConnected() public { + vm.prank(charlie); + vm.expectRevert(ConnectionGraph.NotConnected.selector); + graph.removeConnection(alice); + } +} diff --git a/implementations/04-web3-sbt-contacts/contracts/test/README.md b/implementations/04-web3-sbt-contacts/contracts/test/README.md new file mode 100644 index 0000000..1dfac1f --- /dev/null +++ b/implementations/04-web3-sbt-contacts/contracts/test/README.md @@ -0,0 +1,85 @@ +# Foundry contract test scaffolding + +This folder is reserved for Foundry tests that validate `SBTProfile` and `ConnectionGraph` behavior. + +## Scope + +- Unit tests for each contract in isolation. +- Integration tests for cross-contract flows (mint identity SBT, then create and update graph links). +- Revert-path tests for authorization and invalid state transitions. +- Event emission checks for key write operations. +- Gas snapshot checks on main state-changing functions. + +## Suggested layout + +- `contracts/test/SBTProfile.t.sol` +- `contracts/test/ConnectionGraph.t.sol` +- `contracts/test/Integration.t.sol` +- `contracts/test/helpers/Fixtures.sol` (shared setup/utilities) + +## Concrete test plan + +1. `SBTProfile` +- Mint succeeds for a new address and stores expected metadata. +- Mint fails when token already exists for address (soulbound uniqueness). +- Transfer-related methods revert (soulbound behavior enforcement). +- Metadata updates are restricted to authorized actor(s). +- Expected events are emitted with exact indexed parameters. + +2. `ConnectionGraph` +- Create connection edge succeeds with valid identities. +- Duplicate edge creation reverts or is ignored (assert intended behavior). +- Remove/revoke edge updates state and emits event. +- Unauthorized actor cannot mutate another user's graph. +- Read methods return deterministic adjacency/state. + +3. Integration +- Mint two SBT profiles, create a graph connection, and verify end-to-end state. +- Attempt graph mutation for an address without SBT and assert revert. +- Assert compatibility assumptions between contract interfaces. + +4. Negative and fuzz +- Fuzz addresses and IDs for uniqueness and invariant checks. +- Fuzz ordering of add/remove operations for graph consistency. +- Invariant: no self-loop if protocol forbids it. + +5. Gas checks +- Add `forge snapshot` baseline and fail CI on regressions above threshold. + +## Example test case skeleton + +```markdown +File: contracts/test/ConnectionGraph.t.sol + +Contract: ConnectionGraphTest is Test + +setUp() +- Deploy SBTProfile +- Deploy ConnectionGraph with SBTProfile dependency +- Mint profile for alice and bob + +function test_CreateConnection_HappyPath() public +- vm.prank(alice) +- call createConnection(bob, "coworker") +- assertTrue(connectionGraph.isConnected(alice, bob)) +- assertEq(connectionGraph.connectionType(alice, bob), "coworker") + +function test_CreateConnection_RevertWhen_NotMinted() public +- vm.prank(charlie) +- vm.expectRevert(ConnectionGraph.ProfileNotFound.selector) +- connectionGraph.createConnection(bob, "coworker") +``` + +## Minimal commands + +- Run all tests: `forge test -vvv` +- Run a single file: `forge test --match-path test/ConnectionGraph.t.sol -vvv` +- Run a single case: `forge test --match-test test_CreateConnection_HappyPath -vvv` +- Gas snapshot: `forge snapshot` + +## CI recommendation + +- Add a CI job that runs: +- `forge fmt --check` +- `forge test -vvv` +- `forge snapshot --check` (or compare against committed gas snapshot) diff --git a/implementations/04-web3-sbt-contacts/contracts/test/SBTProfile.t.sol b/implementations/04-web3-sbt-contacts/contracts/test/SBTProfile.t.sol new file mode 100644 index 0000000..55348ab --- /dev/null +++ b/implementations/04-web3-sbt-contacts/contracts/test/SBTProfile.t.sol @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.24; + +import "forge-std/Test.sol"; +import "../src/SBTProfile.sol"; + +contract SBTProfileTest is Test { + SBTProfile internal profile; + address internal admin = address(0xA11CE); + address internal alice = address(0xB0B); + address internal bob = address(0xCAFE); + + function setUp() public { + vm.prank(admin); + profile = new SBTProfile(); + } + + function testMintProfileStoresData() public { + vm.prank(admin); + uint256 tokenId = profile.mintProfile(alice, "alice", "ipfs://alice"); + + assertEq(tokenId, 1); + assertEq(profile.tokenOf(alice), 1); + assertEq(profile.ownerOf(1), alice); + + (string memory handle, string memory metadataURI, bool exists) = profile.profileOf(1); + assertEq(handle, "alice"); + assertEq(metadataURI, "ipfs://alice"); + assertTrue(exists); + } + + function testMintProfileRevertsIfAddressAlreadyHasProfile() public { + vm.startPrank(admin); + profile.mintProfile(alice, "alice", "ipfs://alice"); + vm.expectRevert(SBTProfile.AlreadyHasProfile.selector); + profile.mintProfile(alice, "alice2", "ipfs://alice2"); + vm.stopPrank(); + } + + function testUpdateProfileOnlyOwner() public { + vm.prank(admin); + uint256 tokenId = profile.mintProfile(alice, "alice", "ipfs://alice"); + + vm.prank(bob); + vm.expectRevert(SBTProfile.NotOwner.selector); + profile.updateProfile(tokenId, "alice-updated", "ipfs://alice-updated"); + + vm.prank(alice); + profile.updateProfile(tokenId, "alice-updated", "ipfs://alice-updated"); + + (string memory handle, string memory metadataURI, bool exists) = profile.profileOf(tokenId); + assertEq(handle, "alice-updated"); + assertEq(metadataURI, "ipfs://alice-updated"); + assertTrue(exists); + } + + function testSoulboundTransfersAlwaysRevert() public { + vm.prank(admin); + uint256 tokenId = profile.mintProfile(alice, "alice", "ipfs://alice"); + + vm.expectRevert(SBTProfile.Soulbound.selector); + profile.transferFrom(alice, bob, tokenId); + + vm.expectRevert(SBTProfile.Soulbound.selector); + profile.safeTransferFrom(alice, bob, tokenId); + + vm.expectRevert(SBTProfile.Soulbound.selector); + profile.safeTransferFrom(alice, bob, tokenId, ""); + } +} diff --git a/implementations/04-web3-sbt-contacts/dApp-client/README.md b/implementations/04-web3-sbt-contacts/dApp-client/README.md new file mode 100644 index 0000000..eb749fe --- /dev/null +++ b/implementations/04-web3-sbt-contacts/dApp-client/README.md @@ -0,0 +1,17 @@ +# dApp Client + +Frontend placeholder for Plan 04 Web3 SBT Contacts. + +Planned responsibilities: + +- Wallet connection and chain/network checks. +- Profile mint/update flows against `SBTProfile`. +- Connection request/accept/remove flows against `ConnectionGraph`. +- Relayer integration for prepare/submit transaction UX. + +Suggested stack options: + +- React + Viem + Wagmi. +- Next.js App Router + WalletConnect. + +No implementation is added yet in this scaffold. diff --git a/implementations/04-web3-sbt-contacts/docs/relayer-rpc-migration.md b/implementations/04-web3-sbt-contacts/docs/relayer-rpc-migration.md new file mode 100644 index 0000000..439cff2 --- /dev/null +++ b/implementations/04-web3-sbt-contacts/docs/relayer-rpc-migration.md @@ -0,0 +1,43 @@ +# Relayer RPC Migration (In-Memory -> RPC-backed) + +This plan upgrades the relayer from deterministic in-memory tx hash simulation to a real JSON-RPC-backed broadcast path. + +## Current State + +- `backend-relayer` verifies deterministic EIP-712 typed-data digest from signable fields. +- Relay submission uses `ChainRPC` interface. +- Default implementation is `InMemoryChainRPC` for local development/tests. + +## Migration Steps + +1. Implement a JSON-RPC client that satisfies `ChainRPC`: + - New file suggestion: `backend-relayer/rpc_eth.go` + - Implement `RelayContactOperation(ctx, req)`. +2. Build and sign on-chain tx payload: + - Derive calldata for contract method (e.g. contact operation entrypoint). + - Include EIP-155 chain ID from runtime config. +3. Broadcast and return canonical tx hash from node response. +4. Replace `buildChainRPC()` to select implementation by env: + - `RELAYER_RPC_MODE=inmemory|ethereum` +5. Keep `InMemoryChainRPC` as default fallback for local no-infra testability. + +## Required Environment (Template) + +- `RELAYER_RPC_MODE=ethereum` +- `ETH_RPC_URL=https://...` +- `RELAYER_CHAIN_ID=...` +- `RELAYER_SIGNER_PRIVATE_KEY=0x...` +- `CONTACT_CONTRACT_ADDRESS=0x...` + +## Operations Checklist + +1. Health check: `GET /health` +2. Functional check: `POST /v1/prepare` then `POST /v1/submit` +3. Verify tx status endpoint output is persisted from real hash +4. Rollback path: set `RELAYER_RPC_MODE=inmemory` and restart + +## CI Notes + +- Unit tests must not hit external chain infra. +- Keep interface-level tests on `mockChainRPC`. +- Add optional integration job for private testnet only when secrets are present. diff --git a/implementations/04-web3-sbt-contacts/infra/docker-compose.yml b/implementations/04-web3-sbt-contacts/infra/docker-compose.yml new file mode 100644 index 0000000..cab304f --- /dev/null +++ b/implementations/04-web3-sbt-contacts/infra/docker-compose.yml @@ -0,0 +1,15 @@ +version: "3.9" + +services: + backend-relayer: + build: + context: ../backend-relayer + dockerfile: Dockerfile + ports: + - "8080:8080" + environment: + - LOG_LEVEL=info + restart: unless-stopped + +# Placeholder compose file for local orchestration. +# Add chain simulator (e.g., anvil/hardhat node), indexer, and observability services as needed. diff --git a/implementations/04-web3-sbt-contacts/scripts/deploy_relayer_rpc_template.sh b/implementations/04-web3-sbt-contacts/scripts/deploy_relayer_rpc_template.sh new file mode 100755 index 0000000..9010450 --- /dev/null +++ b/implementations/04-web3-sbt-contacts/scripts/deploy_relayer_rpc_template.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Template deployment script for RPC-backed relayer rollout. +# Fill in values or export env vars before use. + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +RELAYER_DIR="$ROOT_DIR/backend-relayer" + +: "${RELAYER_ADDR:=0.0.0.0:18080}" +: "${RELAYER_RPC_MODE:=ethereum}" +: "${ETH_RPC_URL:=https://example-rpc.invalid}" +: "${RELAYER_CHAIN_ID:=1}" +: "${RELAYER_SIGNER_PRIVATE_KEY:=0xREPLACE_ME}" +: "${CONTACT_CONTRACT_ADDRESS:=0x0000000000000000000000000000000000000000}" + +echo "[1/3] build relayer" +( + cd "$RELAYER_DIR" + env GOCACHE=/tmp/go-build-cache go build ./... +) + +echo "[2/3] starting relayer in RPC mode" +( + cd "$RELAYER_DIR" + env \ + GOCACHE=/tmp/go-build-cache \ + RELAYER_ADDR="$RELAYER_ADDR" \ + RELAYER_RPC_MODE="$RELAYER_RPC_MODE" \ + ETH_RPC_URL="$ETH_RPC_URL" \ + RELAYER_CHAIN_ID="$RELAYER_CHAIN_ID" \ + RELAYER_SIGNER_PRIVATE_KEY="$RELAYER_SIGNER_PRIVATE_KEY" \ + CONTACT_CONTRACT_ADDRESS="$CONTACT_CONTRACT_ADDRESS" \ + go run . +) + +echo "[3/3] relayer exited" diff --git a/implementations/04-web3-sbt-contacts/scripts/relayer_e2e.sh b/implementations/04-web3-sbt-contacts/scripts/relayer_e2e.sh new file mode 100755 index 0000000..987d8a0 --- /dev/null +++ b/implementations/04-web3-sbt-contacts/scripts/relayer_e2e.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +RELAYER_DIR="$ROOT_DIR/backend-relayer" +RELAYER_ADDR="${RELAYER_ADDR:-127.0.0.1:18080}" +BASE_URL="http://$RELAYER_ADDR" + +cleanup() { + if [[ -n "${SERVER_PID:-}" ]] && kill -0 "$SERVER_PID" 2>/dev/null; then + kill "$SERVER_PID" >/dev/null 2>&1 || true + fi +} +trap cleanup EXIT + +echo "[1/5] building relayer" +( + cd "$RELAYER_DIR" + env GOCACHE=/tmp/go-build-cache go build ./... +) + +echo "[2/5] starting relayer" +( + cd "$RELAYER_DIR" + env GOCACHE=/tmp/go-build-cache RELAYER_ADDR="$RELAYER_ADDR" go run . >/tmp/web3-relayer.log 2>&1 +) & +SERVER_PID=$! + +for _ in {1..30}; do + if ! kill -0 "$SERVER_PID" 2>/dev/null; then + echo "relayer exited unexpectedly. log:" >&2 + sed -n '1,120p' /tmp/web3-relayer.log >&2 || true + exit 1 + fi + if curl -fsS "$BASE_URL/health" >/dev/null 2>&1; then + break + fi + sleep 0.2 +done + +HEALTH_JSON="$(curl -fsS "$BASE_URL/health")" +echo "[3/5] health: $HEALTH_JSON" + +PREPARE_JSON='{"operation":"connect","payload":{"from":"did:example:a","to":"did:example:b"}}' +PREPARE_RESP="$(curl -fsS -X POST "$BASE_URL/v1/prepare" -H 'Content-Type: application/json' -d "$PREPARE_JSON")" +REQUEST_ID="$(printf '%s' "$PREPARE_RESP" | sed -n 's/.*"requestId":"\([^"]*\)".*/\1/p')" + +if [[ -z "$REQUEST_ID" ]]; then + echo "prepare response missing requestId: $PREPARE_RESP" >&2 + exit 1 +fi + +echo "[4/5] prepare: $PREPARE_RESP" + +SUBMIT_JSON="{\"requestId\":\"$REQUEST_ID\",\"signature\":\"0x1234abcd90\"}" +SUBMIT_RESP="$(curl -fsS -X POST "$BASE_URL/v1/submit" -H 'Content-Type: application/json' -d "$SUBMIT_JSON")" +TX_HASH="$(printf '%s' "$SUBMIT_RESP" | sed -n 's/.*"txHash":"\([^"]*\)".*/\1/p')" + +if [[ -z "$TX_HASH" ]]; then + echo "submit response missing txHash: $SUBMIT_RESP" >&2 + exit 1 +fi + +echo "[5/5] submit: $SUBMIT_RESP" +STATUS_RESP="$(curl -fsS "$BASE_URL/v1/tx/$TX_HASH")" +echo "status: $STATUS_RESP" + +echo "E2E check passed" diff --git a/implementations/04-web3-sbt-contacts/scripts/relayer_e2e_no_bind.sh b/implementations/04-web3-sbt-contacts/scripts/relayer_e2e_no_bind.sh new file mode 100755 index 0000000..037fc5e --- /dev/null +++ b/implementations/04-web3-sbt-contacts/scripts/relayer_e2e_no_bind.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Sandbox-safe fallback: no local server bind required. +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +RELAYER_DIR="$ROOT_DIR/backend-relayer" + +echo "Running in-process relayer verification via Go tests" +( + cd "$RELAYER_DIR" + env GOCACHE=/tmp/go-build-cache go test ./... -run 'TestPrepareAndSubmitHappyPath|TestSubmitRequestIsSingleUse|TestTxStatusErrors' -v +) diff --git a/implementations/04-web3-sbt-contacts/scripts/solidity_test_via_docker.sh b/implementations/04-web3-sbt-contacts/scripts/solidity_test_via_docker.sh new file mode 100755 index 0000000..eb50c3e --- /dev/null +++ b/implementations/04-web3-sbt-contacts/scripts/solidity_test_via_docker.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +CONTRACTS_DIR="$ROOT_DIR/contracts" + +if ! command -v docker >/dev/null 2>&1; then + echo "docker is required for this script" >&2 + exit 1 +fi + +echo "Running forge build/test inside Foundry container" +docker run --rm \ + -v "$CONTRACTS_DIR":/work \ + -w /work \ + ghcr.io/foundry-rs/foundry:latest \ + sh -lc "forge --version && forge build && forge test -vv"