diff --git a/docs/contracts/fees.md b/docs/contracts/fees.md index 59ac1863..fcbafa4c 100644 --- a/docs/contracts/fees.md +++ b/docs/contracts/fees.md @@ -257,6 +257,135 @@ Strict boundary checks prevent "silent misconfiguration" where a typo could lead - **`InvalidFeeConfiguration`**: Map sum does not equal `total_amount`, or revenue shares do not sum to 10,000 BPS. - **`StorageKeyNotFound`**: Reading fee config before the fee system has been initialized. +## FeeType Configuration Matrix + +### Overview + +Every `FeeType` variant is exercised independently through `update_fee_structure`. +The matrix below captures all boundary and validity rules for each type. + +### FeeType Variants + +| Variant | Default in storage | Max-fee multiplier | Notes | +|---|---|---|---| +| `Platform` | Yes (bps=200, min=100, max=1_000_000) | 100× | General transaction overhead | +| `Processing` | Yes (bps=50, min=50, max=500_000) | 100× | Specialized processing charge | +| `Verification` | Yes (bps=100, min=100, max=100_000) | 100× | Identity/business verification | +| `EarlyPayment` | **No** — inserted on first call | 500× | Incentive; wider ceiling | +| `LatePayment` | **No** — inserted on first call | 500× | Penalty; subject to cross-fee floor rule | + +### BPS Boundaries (applies to all variants) + +| BPS value | Result | Error | +|---|---|---| +| 0 | Accepted (free / no-op rate) | — | +| 1 – 999 | Accepted | — | +| 1000 | Accepted (hard cap) | — | +| ≥ 1001 | Rejected | `InvalidFeeBasisPoints` | + +### Min/Max Ordering Rules (applies to all variants) + +| Condition | Result | Error | +|---|---|---| +| `min_fee == max_fee` | Accepted (flat fee) | — | +| `min_fee < max_fee` | Accepted | — | +| `min_fee > max_fee` | Rejected | `InvalidAmount` | +| `min_fee < 0` | Rejected | `InvalidAmount` | +| `max_fee < 0` | Rejected | `InvalidAmount` | + +### Absolute Max-Fee Limit + +`max_fee > 10_000_000_000_000` (10 M stroops) is always rejected with `InvalidFeeConfiguration`. + +### Per-Type Max-Fee Threshold + +For a given `base_fee_bps`, the per-type ceiling is: + +| Type group | Formula | Example (bps=200) | +|---|---|---| +| Platform / Processing / Verification | `bps × 100 × 100` | 2_000_000 | +| EarlyPayment / LatePayment | `bps × 500 × 100` | 10_000_000 | + +When `base_fee_bps = 0` the formula yields 0 and the per-type threshold guard is +**skipped** (condition `calculated_max_threshold > 0` is false), so any +`max_fee` up to the absolute protocol cap is accepted with a zero-bps structure. + +### Cross-Fee Floor Rule (LatePayment only) + +`LatePayment.min_fee` must be **≥** the currently stored `Platform.min_fee`. + +| Scenario | Result | Error | +|---|---|---| +| `LatePayment.min_fee >= Platform.min_fee` | Accepted | — | +| `LatePayment.min_fee == Platform.min_fee` | Accepted (exact boundary) | — | +| `LatePayment.min_fee < Platform.min_fee` | Rejected | `InvalidFeeConfiguration` | + +### Insert vs. Update Behaviour + +`update_fee_structure` performs an **upsert**: + +- If the `fee_type` already exists in storage the existing record is overwritten. +- If the `fee_type` is absent a new record is appended. + +`Platform`, `Processing`, and `Verification` are inserted during +`initialize_fee_system`, so their first user-driven call takes the **update** +path. `EarlyPayment` and `LatePayment` are absent until explicitly created, +so their first call takes the **insert** path; `get_fee_structure` returns +`StorageKeyNotFound` before that point. + +### Isolation Guarantee + +Updating one `FeeType` must not alter any other type's `base_fee_bps`, +`min_fee`, or `max_fee`. This is verified in +`test_matrix_update_platform_preserves_others` and +`test_matrix_insert_early_payment_preserves_existing_types`. + +### Test Coverage Map + +| Test name | Coverage | +|---|---| +| `test_matrix_platform_bps_zero_accepted` | Platform, bps=0 | +| `test_matrix_platform_bps_at_cap_accepted` | Platform, bps=1000 | +| `test_matrix_platform_bps_over_cap_rejected` | Platform, bps=1001 | +| `test_matrix_processing_bps_zero_accepted` | Processing, bps=0 | +| `test_matrix_processing_bps_at_cap_accepted` | Processing, bps=1000 | +| `test_matrix_processing_bps_over_cap_rejected` | Processing, bps=1001 | +| `test_matrix_verification_bps_zero_accepted` | Verification, bps=0 | +| `test_matrix_verification_bps_at_cap_accepted` | Verification, bps=1000 | +| `test_matrix_verification_bps_over_cap_rejected` | Verification, bps=1001 | +| `test_matrix_early_payment_bps_zero_accepted` | EarlyPayment, bps=0, insert | +| `test_matrix_early_payment_bps_at_cap_accepted` | EarlyPayment, bps=1000 | +| `test_matrix_early_payment_bps_over_cap_rejected` | EarlyPayment, bps=1001 | +| `test_matrix_late_payment_bps_zero_accepted` | LatePayment, bps=0, cross-floor | +| `test_matrix_late_payment_bps_at_cap_accepted` | LatePayment, bps=1000 | +| `test_matrix_late_payment_bps_over_cap_rejected` | LatePayment, bps=1001 | +| `test_matrix_platform_returned_fields_complete` | Returned struct correctness | +| `test_matrix_processing_returned_fields_complete` | Returned struct correctness | +| `test_matrix_verification_returned_fields_complete` | Returned struct correctness | +| `test_matrix_early_payment_returned_fields_complete` | Returned struct correctness | +| `test_matrix_late_payment_returned_fields_complete` | Returned struct correctness | +| `test_matrix_active_toggle_all_types` | is_active toggle, all 5 types | +| `test_matrix_early_payment_insert_then_update` | Insert → update lifecycle | +| `test_matrix_late_payment_insert_then_update` | Insert → update lifecycle | +| `test_matrix_update_platform_preserves_others` | Isolation guarantee | +| `test_matrix_insert_early_payment_preserves_existing_types` | Isolation guarantee | +| `test_matrix_late_payment_cross_check_floor_enforced_on_insert` | Cross-fee floor rejection | +| `test_matrix_late_payment_cross_check_floor_exact_equal_accepted` | Cross-fee floor boundary | +| `test_matrix_flat_fee_all_types_accepted` | min == max for all 5 types | +| `test_matrix_intermediate_bps_accepted_for_all_types` | bps ∈ {1,500,999} × all types | + +### Security Notes + +- **No partial writes**: all validation runs before any storage mutation; a + rejected call leaves the fee store unchanged. +- **Checked arithmetic**: threshold and min-fee computations use + `saturating_mul` / `saturating_add`, preventing integer overflow panics. +- **Auth gate**: every call requires `admin.require_auth()` — an attacker who + does not hold the admin key cannot mutate fee parameters. +- **Event auditability**: every accepted call emits `fee_structure_updated` + (`fee_str` topic) containing the old and new BPS values for off-chain + monitoring. + ## Migration and Upgrades The system is designed for backward compatibility, with new event structures providing more detail than legacy versions without breaking core settlement logic. diff --git a/docs/contracts/invoice.md b/docs/contracts/invoice.md index f957dc8e..0fad3e29 100644 --- a/docs/contracts/invoice.md +++ b/docs/contracts/invoice.md @@ -1,90 +1,273 @@ -# Invoice Categories, Tags, and Due Date Validation - -## Overview - -The QuickLendX protocol supports invoice categorization and tagging to improve discoverability, filtering, and organization of invoices. Additionally, the protocol enforces due date bounds and strict authorization checks to ensure system security and risk management. - -## Features - -### Invoice Categories -Invoices can be assigned to one of the following predefined categories: -- **Services**, **Products**, **Consulting**, **Manufacturing**, **Technology**, **Healthcare**, **Other**. - -Each invoice must have exactly one category, which can be updated after creation by the authorized owner. - -### Due Date Bounds Validation -Strict bounds are enforced to prevent excessive risk: -- **Maximum Due Date**: Configurable via protocol limits (default: 365 days). -- **Minimum Due Date**: Must be greater than the current ledger timestamp. -- **Validation**: Applied during both `store_invoice` and `upload_invoice`. - -### Invoice Tags (Normalized) -- **Maximum Tags**: 10 per invoice. -- **Normalization**: All tags are trimmed of whitespace and converted to lowercase (ASCII) before storage or indexing. -- **Duplicate Prevention**: Detection occurs on the *normalized* form. - ---- - -## Security and Permissions Matrix - -The following table defines which identities are authorized to invoke specific mutation functions. - -| Function | Required Signer | Enforcement Mechanism | -| :--- | :--- | :--- | -| `store_invoice` | `business` | `business.require_auth()` | -| `upload_invoice` | `business` | `business.require_auth()` + Verification | -| `update_invoice_category` | `invoice.business` | `self.business.require_auth()` | -| `add_invoice_tag` | `invoice.business` | `self.business.require_auth()` | -| `remove_invoice_tag` | `invoice.business` | `self.business.require_auth()` | -| `verify_invoice` | `admin` | `admin.require_auth()` | - -> **Authorization Flow**: The contract retrieves the original `business` address stored in the `InvoiceData`. It calls Soroban's `require_auth()` on that specific address to ensure only the creator can modify the metadata. - ---- - -## Tag Normalization Logic - -Normalization is applied at creation, addition, and lookup to ensure index consistency. - -| Input | Stored/Indexed Form | -| :--- | :--- | -| `"Technology"` | `"technology"` | -| `" tech "` | `"tech"` | -| `"URGENT"` | `"urgent"` | - -### Duplicate Prevention Examples -- `["tech", "Tech"]` in one call $\rightarrow$ **Error**: `InvalidTag` (normalized duplicate). -- `add_invoice_tag("tech")` then `add_invoice_tag("TECH")` $\rightarrow$ **No-op** (idempotent). - ---- - -## API Functions - -### Query Functions -- `get_invoices_by_category(category: InvoiceCategory)` -- `get_invoices_by_tag(tag: String)`: Case-insensitive via normalization. -- `get_invoices_by_tags(tags: Vec)`: Supports AND logic. -- `get_invoice_count_by_tag(tag: String)` - -### Mutation Functions -- `update_invoice_category(invoice_id, new_category)`: O(1) index update. -- `add_invoice_tag(invoice_id, tag)`: Validates length (1-50) and count ($\le 10$). -- `remove_invoice_tag(invoice_id, tag)` - ---- - -## Error Handling Reference - -| Error Code | Error Name | Description | -| :--- | :--- | :--- | -| 1002 | Unauthorized | Caller does not match the stored business address | -| 1008 | InvoiceDueDateInvalid | Date is in the past or exceeds max bounds | -| 1035 | InvalidTag | Tag length outside 1-50 character range | -| 1036 | TagLimitExceeded | More than 10 tags per invoice | -| 1800 | InvalidTag (Normal) | Tag is empty or a duplicate after normalization | - ---- - -## Testing and Performance -- **Index Efficiency**: O(1) lookup for categories and tags. -- **Coverage**: Implementation includes unit tests for auth bypass attempts, normalization edge cases, and index integrity during updates. \ No newline at end of file +# Invoice Module + +## Overview + +The QuickLendX invoice module manages the full lifecycle of invoice-backed financing. It handles invoice creation, categorization, tagging, metadata, payment tracking, ratings, disputes, and all associated on-chain indexes. + +--- + +## Data Structures + +### `Invoice` + +Core on-chain record for every invoice. + +| Field | Type | Description | +| :--- | :--- | :--- | +| `id` | `BytesN<32>` | Deterministic unique identifier | +| `business` | `Address` | Business that uploaded the invoice | +| `amount` | `i128` | Total invoice face value | +| `currency` | `Address` | Payment token address | +| `due_date` | `u64` | Unix timestamp deadline | +| `status` | `InvoiceStatus` | Current lifecycle status | +| `created_at` | `u64` | Creation timestamp | +| `description` | `String` | Human-readable description | +| `metadata_*` | `Option` | Optional structured metadata fields | +| `metadata_line_items` | `Vec` | Compact line-item list | +| `category` | `InvoiceCategory` | One of 7 predefined categories | +| `tags` | `Vec` | Normalized discoverability tags (max 10) | +| `funded_amount` | `i128` | Amount committed by investor | +| `funded_at` | `Option` | Funding timestamp | +| `investor` | `Option
` | Address of the funding investor | +| `settled_at` | `Option` | Settlement timestamp | +| `average_rating` | `Option` | Computed average rating (1-5) | +| `total_ratings` | `u32` | Count of ratings received | +| `ratings` | `Vec` | Full rating history | +| `dispute_status` | `DisputeStatus` | Current dispute state | +| `dispute` | `Dispute` | Dispute details | +| `total_paid` | `i128` | Aggregate amount received | +| `payment_history` | `Vec` | Ordered partial payment records | + +### `InvoiceStatus` + +``` +Pending → Verified → Funded → Paid + ↘ Defaulted + ↘ Cancelled + ↘ Refunded +``` + +| Variant | Description | +| :--- | :--- | +| `Pending` | Uploaded, awaiting admin verification | +| `Verified` | Verified and open for investor bids | +| `Funded` | Investor has committed funds | +| `Paid` | Fully settled | +| `Defaulted` | Grace period elapsed without payment | +| `Cancelled` | Cancelled by the business owner | +| `Refunded` | Refund issued (terminal, prevents double-refund) | + +### `InvoiceCategory` + +`Services` | `Products` | `Consulting` | `Manufacturing` | `Technology` | `Healthcare` | `Other` + +### `InvoiceMetadata` + +Optional structured metadata attached to an invoice. + +| Field | Max Length | Description | +| :--- | :--- | :--- | +| `customer_name` | `MAX_NAME_LENGTH` | Debtor name (required if metadata present) | +| `customer_address` | `MAX_ADDRESS_LENGTH` | Debtor address | +| `tax_id` | `MAX_TAX_ID_LENGTH` | Tax identification number | +| `line_items` | 50 items | `Vec` (description, qty, unit price, total) | +| `notes` | `MAX_NOTES_LENGTH` | Free-form notes | + +--- + +## Invoice ID Generation + +Invoice IDs are derived deterministically to prevent collisions: + +``` +id[0..8] = timestamp (big-endian u64) +id[8..12] = ledger sequence (big-endian u32) +id[12..16] = monotonic counter (big-endian u32) +id[16..32] = zero-padded +``` + +The counter is incremented atomically in instance storage. If a collision is detected, the counter is probed forward until a free slot is found. Counter overflow returns `StorageError`. + +--- + +## Tag Normalization + +Tags are always stored in canonical form. Normalization: strip leading/trailing ASCII spaces, then ASCII-lowercase all letters. + +| Input | Stored Form | +| :--- | :--- | +| `"Technology"` | `"technology"` | +| `" tech "` | `"tech"` | +| `"URGENT"` | `"urgent"` | + +- Tags must be 1–50 characters after normalization. +- Max 10 tags per invoice. +- Adding a tag that already exists (after normalization) is a no-op. +- Tags supplied at creation time are also normalized before storage. + +--- + +## Due Date Validation + +- `due_date` must be **strictly greater** than the current ledger timestamp. +- Maximum due date is bounded by the protocol limit (`max_due_date_days`, default 365 days). +- Validated during both `store_invoice` (via `lib.rs`) and `upload_invoice`. + +--- + +## Security and Permissions Matrix + +| Function / Operation | Required Signer | Guard | +| :--- | :--- | :--- | +| Create invoice | `business` | `business.require_auth()` | +| Upload invoice | `business` | `business.require_auth()` + KYC verification | +| `add_tag` | `invoice.business` | `self.business.require_auth()` | +| `remove_tag` | `invoice.business` | `self.business.require_auth()` | +| `update_metadata` | `invoice.business` | `business.require_auth()` + address match | +| `clear_metadata` | `invoice.business` | `business.require_auth()` + address match | +| `verify` (admin) | `admin` | `admin.require_auth()` in caller | +| `cancel` | `invoice.business` | address match enforced by caller | + +--- + +## `Invoice` Methods + +### Lifecycle Mutations + +| Method | Description | +| :--- | :--- | +| `Invoice::new(...)` | Construct a new invoice, normalize tags, generate ID, emit audit log | +| `mark_as_funded(investor, amount, ts)` | Transition to `Funded`, emit audit log | +| `mark_as_paid(actor, ts)` | Transition to `Paid`, emit audit log | +| `mark_as_refunded(actor)` | Transition to `Refunded`, emit audit log | +| `mark_as_defaulted()` | Transition to `Defaulted` (no auth, called by expiry logic) | +| `verify(actor)` | Transition to `Verified`, emit audit log | +| `cancel(actor)` | Transition to `Cancelled`; only from `Pending` or `Verified` | + +### Expiration + +| Method | Description | +| :--- | :--- | +| `is_overdue(now)` | Returns `true` if `now > due_date` | +| `grace_deadline(grace_period)` | `due_date.saturating_add(grace_period)` | +| `check_and_handle_expiration(grace_period)` | If `Funded` and past grace deadline, calls `handle_default`; returns `true` if defaulted | + +### Payment Tracking + +| Method | Description | +| :--- | :--- | +| `record_payment(amount, tx_id)` | Appends `PaymentRecord`, updates `total_paid`, returns progress % | +| `payment_progress()` | `(total_paid / amount) * 100`, capped at 100 | +| `is_fully_paid()` | `total_paid >= amount` | + +### Tag Operations + +| Method | Description | +| :--- | :--- | +| `add_tag(env, tag)` | Auth-gated; normalizes, checks limits, deduplicates, updates tag index | +| `remove_tag(tag)` | Auth-gated; normalizes, removes from list and tag index | +| `has_tag(tag)` | Case-insensitive lookup via normalization; returns `bool` | +| `get_tags()` | Returns cloned tag vector | + +### Category + +| Method | Description | +| :--- | :--- | +| `update_category(category)` | Replaces category field (index update is caller's responsibility) | + +### Metadata + +| Method | Description | +| :--- | :--- | +| `update_metadata(business, metadata)` | Auth-gated; validates and stores structured metadata | +| `clear_metadata(business)` | Auth-gated; sets all metadata fields to `None` | +| `set_metadata(metadata: Option<...>)` | Unauthenticated internal setter with validation | +| `metadata()` | Returns `Option` if all required fields present | + +### Ratings + +| Method | Description | +| :--- | :--- | +| `add_rating(rating, feedback, rater, ts)` | Investor-only; validates 1-5 range, prevents duplicate ratings, updates average | +| `get_ratings_above(threshold)` | Returns ratings ≥ threshold | +| `get_all_ratings()` | Returns reference to rating vector | +| `has_ratings()` | `total_ratings > 0` | +| `get_highest_rating()` | Max rating value, `None` if empty | +| `get_lowest_rating()` | Min rating value, `None` if empty | +| `get_invoice_rating_stats()` | Returns `InvoiceRatingStats` | + +--- + +## `InvoiceStorage` — Index and Persistence + +### Write Operations + +| Method | Description | +| :--- | :--- | +| `store_invoice(invoice)` | Persist invoice; update total count, business index, status index, category index, tag indexes | +| `update_invoice(invoice)` | Overwrite invoice record (no index update — caller must maintain indexes) | +| `delete_invoice(invoice_id)` | Remove from all indexes (status, business, category, tags, metadata) and decrement count | +| `clear_all(env)` | Wipe all invoices and indexes (used by backup restore only) | +| `add_category_index(category, id)` | Deduplicated insert into category bucket | +| `remove_category_index(category, id)` | Rebuild bucket without the given ID | +| `add_tag_index(tag, id)` | Deduplicated insert into tag bucket | +| `remove_tag_index(tag, id)` | Rebuild bucket without the given ID | +| `add_to_status_invoices(status, id)` | Deduplicated insert into status bucket | +| `remove_from_status_invoices(status, id)` | Rebuild bucket without the given ID | +| `add_metadata_indexes(invoice)` | Index by `customer_name` and `tax_id` if present | +| `remove_metadata_indexes(metadata, id)` | Remove from `customer_name` and `tax_id` indexes | + +### Query Operations + +| Method | Returns | Description | +| :--- | :--- | :--- | +| `get_invoice(id)` | `Option` | Fetch by ID | +| `get_business_invoices(business)` | `Vec>` | All invoice IDs for a business | +| `count_active_business_invoices(business)` | `u32` | Count excluding `Cancelled` and `Paid` | +| `get_invoices_by_status(status)` | `Vec>` | All IDs in a status bucket | +| `get_invoices_by_category(category)` | `Vec>` | All IDs in a category bucket | +| `get_invoices_by_category_and_status(category, status)` | `Vec>` | Intersection of category and status buckets | +| `get_invoices_by_tag(tag)` | `Vec>` | All IDs with a given normalized tag | +| `get_invoices_by_tags(tags)` | `Vec>` | Intersection (AND) across all supplied tags | +| `get_invoice_count_by_category(category)` | `u32` | Count in a category bucket | +| `get_invoice_count_by_tag(tag)` | `u32` | Count in a tag bucket | +| `get_all_categories(env)` | `Vec` | Ordered list of all 7 categories | +| `get_invoices_with_rating_above(threshold)` | `Vec>` | `Funded`/`Paid` invoices with `average_rating >= threshold` | +| `get_invoices_by_customer(customer_name)` | `Vec>` | Lookup via metadata customer-name index | +| `get_invoices_by_tax_id(tax_id)` | `Vec>` | Lookup via metadata tax-ID index | +| `get_total_invoice_count(env)` | `u32` | Global active invoice count | + +--- + +## Storage Keys + +| Key | Type | Description | +| :--- | :--- | :--- | +| `invoice.id` (raw) | `Invoice` | Invoice record | +| `("cat_idx", category)` | `Vec>` | Category index bucket | +| `("tag_idx", tag)` | `Vec>` | Tag index bucket | +| `("business", address)` | `Vec>` | Per-business invoice list | +| `"pending"` / `"verified"` / … | `Vec>` | Per-status invoice list | +| `("icust", name)` | `Vec>` | Metadata customer-name index | +| `("itax", tax_id)` | `Vec>` | Metadata tax-ID index | +| `"total_iv"` | `u32` | Global invoice count | +| `"inv_cnt"` | `u32` | Monotonic ID counter | + +--- + +## Error Reference + +| Error | Trigger | +| :--- | :--- | +| `Unauthorized` | Caller address doesn't match stored `business` | +| `InvoiceDueDateInvalid` | `due_date` is in the past or exceeds `max_due_date_days` | +| `InvalidTag` | Tag is empty, too long (>50), or not found during removal | +| `TagLimitExceeded` | Invoice already has 10 tags; also used for >50 line items | +| `InvalidStatus` | Operation not valid for the current invoice status (e.g., cancel a `Funded` invoice) | +| `InvalidAmount` | Payment amount is zero or negative | +| `NotFunded` | Rating attempted on an invoice that is not `Funded` or `Paid` | +| `NotRater` | Rater is not the invoice's investor | +| `InvalidRating` | Rating value outside 1-5 | +| `AlreadyRated` | Investor has already rated this invoice | +| `StorageError` | Monotonic ID counter overflowed | +| `InvalidDescription` | Metadata string field length out of bounds | diff --git a/quicklendx-contracts/Cargo.toml b/quicklendx-contracts/Cargo.toml index 885eee0b..f7c9797b 100644 --- a/quicklendx-contracts/Cargo.toml +++ b/quicklendx-contracts/Cargo.toml @@ -4,9 +4,15 @@ version = "0.1.0" edition = "2021" [lib] +<<<<<<< HEAD +# Keep an rlib target for integration tests and a cdylib target for contract/WASM builds. +# For WASM contract build use: cargo build --release --target wasm32-unknown-unknown +crate-type = ["cdylib", "rlib"] +======= # rlib + cdylib: rlib for integration tests; cdylib for WASM contract build # (`cargo build --release --target wasm32-unknown-unknown`). crate-type = ["rlib", "cdylib"] +>>>>>>> main [dependencies] soroban-sdk = { version = "25.1.1", features = ["alloc"] } diff --git a/quicklendx-contracts/src/lib.rs b/quicklendx-contracts/src/lib.rs index cb4d90f7..3530b28e 100644 --- a/quicklendx-contracts/src/lib.rs +++ b/quicklendx-contracts/src/lib.rs @@ -2498,6 +2498,8 @@ impl QuickLendXContract { }, ) }) +<<<<<<< HEAD +======= } /// Build and persist a business report for the given period bucket. @@ -2510,6 +2512,7 @@ impl QuickLendXContract { analytics::AnalyticsCalculator::generate_business_report(&env, &business, period)?; analytics::AnalyticsStorage::store_business_report(&env, &report); Ok(report) +>>>>>>> main } /// Retrieve a stored business report by ID diff --git a/quicklendx-contracts/src/test_fees_extended.rs b/quicklendx-contracts/src/test_fees_extended.rs index 48a36257..fbfbef6c 100644 --- a/quicklendx-contracts/src/test_fees_extended.rs +++ b/quicklendx-contracts/src/test_fees_extended.rs @@ -724,7 +724,7 @@ fn test_fee_structure_equal_min_max_allowed() { ); assert!(result.is_ok()); - let structure = result.unwrap(); + let structure = result.unwrap().unwrap(); assert_eq!(structure.min_fee, 500); assert_eq!(structure.max_fee, 500); } @@ -777,7 +777,7 @@ fn test_fee_structure_valid_bounds_accepted() { ); assert!(result.is_ok()); - let structure = result.unwrap(); + let structure = result.unwrap().unwrap(); assert_eq!(structure.base_fee_bps, 200); assert_eq!(structure.min_fee, 100); assert_eq!(structure.max_fee, 100_000); @@ -805,7 +805,7 @@ fn test_fee_structure_zero_min_fee_allowed() { ); assert!(result.is_ok()); - let structure = result.unwrap(); + let structure = result.unwrap().unwrap(); assert_eq!(structure.min_fee, 0); } @@ -831,7 +831,7 @@ fn test_fee_structure_zero_min_and_max_allowed() { ); assert!(result.is_ok()); - let structure = result.unwrap(); + let structure = result.unwrap().unwrap(); assert_eq!(structure.min_fee, 0); assert_eq!(structure.max_fee, 0); assert!(!structure.is_active); @@ -869,7 +869,7 @@ fn test_fee_structure_update_preserves_consistency() { ); assert!(result.is_ok()); - let updated = result.unwrap(); + let updated = result.unwrap().unwrap(); assert_eq!(updated.base_fee_bps, 250); assert_eq!(updated.min_fee, 75); assert_eq!(updated.max_fee, 300_000); @@ -984,7 +984,7 @@ fn test_fee_structure_late_payment_bounds() { ); assert!(result.is_ok()); - let structure = result.unwrap(); + let structure = result.unwrap().unwrap(); assert_eq!(structure.fee_type, crate::fees::FeeType::LatePayment); } @@ -1031,3 +1031,754 @@ fn test_multiple_fee_structures_concurrent_valid() { assert_eq!(processing.fee_type, crate::fees::FeeType::Processing); assert_eq!(verification.fee_type, crate::fees::FeeType::Verification); } + +// ============================================================================ +// FEETYPE CONFIGURATION MATRIX — ALL TYPES × BPS / MIN / MAX BOUNDS +// ============================================================================ +// +// Each FeeType variant is exercised independently through `update_fee_structure` +// across three categories of assertions: +// +// 1. BPS boundary — 0 bps (valid), 1000 bps (hard cap, valid), 1001 bps (rejected) +// 2. Min/max ordering — equal bounds (flat fee), inverted bounds (rejected) +// 3. Insert vs. update — EarlyPayment/LatePayment begin absent from defaults and +// must be created fresh; Platform/Processing/Verification already exist and +// follow the update path. +// +// Cross-cutting invariant tested throughout: +// `LatePayment.min_fee >= Platform.min_fee` (cross-fee floor rule). +// +// BPS denominator: 10 000 (1 bps = 0.01 %) +// Hard cap: 1 000 bps = 10 % +// Absolute max fee: 10 000 000 000 000 stroops (10 M) +// ============================================================================ + +// ---------------------------------------------------------------------------- +// BPS BOUNDARY — PLATFORM +// ---------------------------------------------------------------------------- + +/// Platform: bps = 0 is valid (free / no-op rate). +#[test] +fn test_matrix_platform_bps_zero_accepted() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + let result = + client.try_update_fee_structure(&admin, &FeeType::Platform, &0, &0, &0, &false); + assert!(result.is_ok(), "Platform bps=0 must be accepted"); + let s = result.unwrap().unwrap(); + assert_eq!(s.base_fee_bps, 0); + assert_eq!(s.fee_type, FeeType::Platform); +} + +/// Platform: bps = 1000 (hard cap) is accepted. +#[test] +fn test_matrix_platform_bps_at_cap_accepted() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + // With bps=1000 the calculated threshold is 1000*100*100 = 10_000_000. + // max_fee=1_000_000 is within that threshold. + let result = client.try_update_fee_structure( + &admin, &FeeType::Platform, &1000, &100, &1_000_000, &true, + ); + assert!(result.is_ok(), "Platform bps=1000 (hard cap) must be accepted"); + let s = result.unwrap().unwrap(); + assert_eq!(s.base_fee_bps, 1000); + assert!(s.is_active); +} + +/// Platform: bps = 1001 exceeds the hard cap and must be rejected with +/// `InvalidFeeBasisPoints`. +#[test] +fn test_matrix_platform_bps_over_cap_rejected() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + let result = client.try_update_fee_structure( + &admin, &FeeType::Platform, &1001, &100, &1_000_000, &true, + ); + let err = result.err().expect("bps=1001 must fail").expect("contract error"); + assert_eq!(err, QuickLendXError::InvalidFeeBasisPoints); +} + +// ---------------------------------------------------------------------------- +// BPS BOUNDARY — PROCESSING +// ---------------------------------------------------------------------------- + +/// Processing: bps = 0 is valid. +#[test] +fn test_matrix_processing_bps_zero_accepted() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + let result = + client.try_update_fee_structure(&admin, &FeeType::Processing, &0, &0, &0, &false); + assert!(result.is_ok(), "Processing bps=0 must be accepted"); + assert_eq!(result.unwrap().unwrap().base_fee_bps, 0); +} + +/// Processing: bps = 1000 (hard cap) is accepted. +#[test] +fn test_matrix_processing_bps_at_cap_accepted() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + let result = client.try_update_fee_structure( + &admin, &FeeType::Processing, &1000, &50, &1_000_000, &true, + ); + assert!(result.is_ok(), "Processing bps=1000 must be accepted"); + assert_eq!(result.unwrap().unwrap().base_fee_bps, 1000); +} + +/// Processing: bps = 1001 must be rejected with `InvalidFeeBasisPoints`. +#[test] +fn test_matrix_processing_bps_over_cap_rejected() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + let result = client.try_update_fee_structure( + &admin, &FeeType::Processing, &1001, &50, &500_000, &true, + ); + let err = result.err().expect("bps=1001 must fail").expect("contract error"); + assert_eq!(err, QuickLendXError::InvalidFeeBasisPoints); +} + +// ---------------------------------------------------------------------------- +// BPS BOUNDARY — VERIFICATION +// ---------------------------------------------------------------------------- + +/// Verification: bps = 0 is valid. +#[test] +fn test_matrix_verification_bps_zero_accepted() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + let result = + client.try_update_fee_structure(&admin, &FeeType::Verification, &0, &0, &0, &false); + assert!(result.is_ok(), "Verification bps=0 must be accepted"); +} + +/// Verification: bps = 1000 (hard cap) is accepted. +#[test] +fn test_matrix_verification_bps_at_cap_accepted() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + let result = client.try_update_fee_structure( + &admin, &FeeType::Verification, &1000, &100, &1_000_000, &true, + ); + assert!(result.is_ok(), "Verification bps=1000 must be accepted"); + assert_eq!(result.unwrap().unwrap().base_fee_bps, 1000); +} + +/// Verification: bps = 1001 must be rejected with `InvalidFeeBasisPoints`. +#[test] +fn test_matrix_verification_bps_over_cap_rejected() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + let result = client.try_update_fee_structure( + &admin, &FeeType::Verification, &1001, &100, &100_000, &true, + ); + let err = result.err().expect("bps=1001 must fail").expect("contract error"); + assert_eq!(err, QuickLendXError::InvalidFeeBasisPoints); +} + +// ---------------------------------------------------------------------------- +// BPS BOUNDARY — EARLYPAYMENT (new insertion path) +// ---------------------------------------------------------------------------- + +/// EarlyPayment: bps = 0 is valid; entry is inserted into storage. +#[test] +fn test_matrix_early_payment_bps_zero_accepted() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + // EarlyPayment is absent from the default fee structures. + // A successful call proves it was inserted fresh. + let result = + client.try_update_fee_structure(&admin, &FeeType::EarlyPayment, &0, &0, &0, &false); + assert!(result.is_ok(), "EarlyPayment bps=0 must be accepted"); + let s = result.unwrap().unwrap(); + assert_eq!(s.fee_type, FeeType::EarlyPayment); + assert_eq!(s.base_fee_bps, 0); + assert!(!s.is_active); +} + +/// EarlyPayment: bps = 1000 (hard cap) is accepted. +/// EarlyPayment / LatePayment use a 500× multiplier for max_fee, giving more +/// room for incentive / penalty structures than the 100× cap used by regular fees. +#[test] +fn test_matrix_early_payment_bps_at_cap_accepted() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + // bps=1000 → threshold = 1000 * 500 * 100 = 50_000_000; max_fee=1_000_000 is within bound. + let result = client.try_update_fee_structure( + &admin, &FeeType::EarlyPayment, &1000, &0, &1_000_000, &true, + ); + assert!(result.is_ok(), "EarlyPayment bps=1000 must be accepted"); + assert_eq!(result.unwrap().unwrap().base_fee_bps, 1000); +} + +/// EarlyPayment: bps = 1001 must be rejected with `InvalidFeeBasisPoints`. +#[test] +fn test_matrix_early_payment_bps_over_cap_rejected() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + let result = client.try_update_fee_structure( + &admin, &FeeType::EarlyPayment, &1001, &0, &1_000_000, &true, + ); + let err = result.err().expect("bps=1001 must fail").expect("contract error"); + assert_eq!(err, QuickLendXError::InvalidFeeBasisPoints); +} + +// ---------------------------------------------------------------------------- +// BPS BOUNDARY — LATEPAYMENT (new insertion path, cross-fee floor rule) +// ---------------------------------------------------------------------------- + +/// LatePayment: bps = 0 with min_fee equal to the Platform default min (100) +/// satisfies the cross-fee floor rule and must be accepted. +#[test] +fn test_matrix_late_payment_bps_zero_accepted() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + // Default Platform min_fee = 100; LatePayment min_fee must be >= 100. + // With bps=0 the max_fee threshold is 0 (guard skipped), so max_fee=100 is fine. + let result = client.try_update_fee_structure( + &admin, &FeeType::LatePayment, &0, &100, &100, &false, + ); + assert!(result.is_ok(), "LatePayment bps=0, min=100 must be accepted"); + let s = result.unwrap().unwrap(); + assert_eq!(s.fee_type, FeeType::LatePayment); + assert_eq!(s.base_fee_bps, 0); +} + +/// LatePayment: bps = 1000 with min_fee >= Platform min is accepted. +#[test] +fn test_matrix_late_payment_bps_at_cap_accepted() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + // bps=1000 → threshold = 1000 * 500 * 100 = 50_000_000; max_fee=1_000_000 is within bound. + // min_fee=200 satisfies the cross-fee floor (Platform default min=100). + let result = client.try_update_fee_structure( + &admin, &FeeType::LatePayment, &1000, &200, &1_000_000, &true, + ); + assert!(result.is_ok(), "LatePayment bps=1000 must be accepted"); + assert_eq!(result.unwrap().unwrap().base_fee_bps, 1000); +} + +/// LatePayment: bps = 1001 must be rejected with `InvalidFeeBasisPoints`. +#[test] +fn test_matrix_late_payment_bps_over_cap_rejected() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + let result = client.try_update_fee_structure( + &admin, &FeeType::LatePayment, &1001, &200, &1_000_000, &true, + ); + let err = result.err().expect("bps=1001 must fail").expect("contract error"); + assert_eq!(err, QuickLendXError::InvalidFeeBasisPoints); +} + +// ---------------------------------------------------------------------------- +// RETURNED STRUCT FIELD VERIFICATION — PLATFORM (representative) +// ---------------------------------------------------------------------------- + +/// `update_fee_structure` returns a `FeeStructure` whose fields exactly match +/// the arguments supplied by the caller for the Platform fee type. +#[test] +fn test_matrix_platform_returned_fields_complete() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + let s = client.update_fee_structure( + &admin, &FeeType::Platform, &350, &75, &750_000, &true, + ); + + assert_eq!(s.fee_type, FeeType::Platform); + assert_eq!(s.base_fee_bps, 350); + assert_eq!(s.min_fee, 75); + assert_eq!(s.max_fee, 750_000); + assert!(s.is_active); + assert_eq!(s.updated_by, admin); + // Timestamp must be the current ledger timestamp (non-zero after mock). + assert_eq!(s.updated_at, env.ledger().timestamp()); +} + +/// `update_fee_structure` returns correct fields for Processing. +#[test] +fn test_matrix_processing_returned_fields_complete() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + let s = client.update_fee_structure( + &admin, &FeeType::Processing, &75, &25, &300_000, &true, + ); + + assert_eq!(s.fee_type, FeeType::Processing); + assert_eq!(s.base_fee_bps, 75); + assert_eq!(s.min_fee, 25); + assert_eq!(s.max_fee, 300_000); + assert!(s.is_active); + assert_eq!(s.updated_by, admin); +} + +/// `update_fee_structure` returns correct fields for Verification. +#[test] +fn test_matrix_verification_returned_fields_complete() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + let s = client.update_fee_structure( + &admin, &FeeType::Verification, &120, &60, &120_000, &false, + ); + + assert_eq!(s.fee_type, FeeType::Verification); + assert_eq!(s.base_fee_bps, 120); + assert_eq!(s.min_fee, 60); + assert_eq!(s.max_fee, 120_000); + assert!(!s.is_active); +} + +/// `update_fee_structure` returns correct fields for EarlyPayment (insertion). +#[test] +fn test_matrix_early_payment_returned_fields_complete() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + let s = client.update_fee_structure( + &admin, &FeeType::EarlyPayment, &80, &0, &400_000, &true, + ); + + assert_eq!(s.fee_type, FeeType::EarlyPayment); + assert_eq!(s.base_fee_bps, 80); + assert_eq!(s.min_fee, 0); + assert_eq!(s.max_fee, 400_000); + assert!(s.is_active); + assert_eq!(s.updated_by, admin); +} + +/// `update_fee_structure` returns correct fields for LatePayment (insertion). +#[test] +fn test_matrix_late_payment_returned_fields_complete() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + // min_fee=150 satisfies the LatePayment cross-fee floor (Platform default min=100). + let s = client.update_fee_structure( + &admin, &FeeType::LatePayment, &300, &150, &900_000, &true, + ); + + assert_eq!(s.fee_type, FeeType::LatePayment); + assert_eq!(s.base_fee_bps, 300); + assert_eq!(s.min_fee, 150); + assert_eq!(s.max_fee, 900_000); + assert!(s.is_active); + assert_eq!(s.updated_by, admin); +} + +// ---------------------------------------------------------------------------- +// IS_ACTIVE TOGGLE — EACH FEETYPE +// ---------------------------------------------------------------------------- + +/// Each fee type can be toggled inactive and reactivated independently. +#[test] +fn test_matrix_active_toggle_all_types() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + // Insert EarlyPayment and LatePayment first so all 5 types exist. + client.update_fee_structure(&admin, &FeeType::EarlyPayment, &100, &0, &500_000, &true); + // LatePayment min_fee=100 meets the Platform default floor. + client.update_fee_structure(&admin, &FeeType::LatePayment, &200, &100, &500_000, &true); + + let types_and_params: [_; 5] = [ + (FeeType::Platform, 200u32, 100i128, 500_000i128), + (FeeType::Processing, 50u32, 50i128, 250_000i128), + (FeeType::Verification, 100u32, 100i128, 100_000i128), + (FeeType::EarlyPayment, 100u32, 0i128, 500_000i128), + (FeeType::LatePayment, 200u32, 100i128, 500_000i128), + ]; + + for (fee_type, bps, min, max) in types_and_params.iter() { + // Deactivate + let s = client.update_fee_structure(&admin, fee_type, bps, min, max, &false); + assert!(!s.is_active, "fee type should be inactive after toggle"); + + // Reactivate + let s = client.update_fee_structure(&admin, fee_type, bps, min, max, &true); + assert!(s.is_active, "fee type should be active after re-toggle"); + } +} + +// ---------------------------------------------------------------------------- +// INSERT VS UPDATE — EARLYPAYMENT AND LATEPAYMENT +// ---------------------------------------------------------------------------- + +/// EarlyPayment is absent from the default fee structures. +/// A first call to `update_fee_structure` inserts it; a second call updates it. +#[test] +fn test_matrix_early_payment_insert_then_update() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + // Before insertion, get_fee_structure must fail. + let before = client.try_get_fee_structure(&FeeType::EarlyPayment); + assert!(before.is_err(), "EarlyPayment must be absent before first insertion"); + + // First call — insertion path. + client.update_fee_structure(&admin, &FeeType::EarlyPayment, &100, &0, &500_000, &true); + let inserted = client.get_fee_structure(&FeeType::EarlyPayment); + assert_eq!(inserted.base_fee_bps, 100); + + // Second call — update path: different bps value must overwrite. + client.update_fee_structure(&admin, &FeeType::EarlyPayment, &200, &0, &1_000_000, &true); + let updated = client.get_fee_structure(&FeeType::EarlyPayment); + assert_eq!(updated.base_fee_bps, 200); + assert_eq!(updated.max_fee, 1_000_000); +} + +/// LatePayment is absent from the default fee structures. +/// A first call inserts it; a second call updates it. +#[test] +fn test_matrix_late_payment_insert_then_update() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + // Before insertion, get_fee_structure must fail. + let before = client.try_get_fee_structure(&FeeType::LatePayment); + assert!(before.is_err(), "LatePayment must be absent before first insertion"); + + // First call — insertion path (min_fee=100 satisfies Platform floor). + client.update_fee_structure(&admin, &FeeType::LatePayment, &300, &100, &1_000_000, &true); + let inserted = client.get_fee_structure(&FeeType::LatePayment); + assert_eq!(inserted.base_fee_bps, 300); + + // Second call — update path. + client.update_fee_structure(&admin, &FeeType::LatePayment, &400, &150, &2_000_000, &true); + let updated = client.get_fee_structure(&FeeType::LatePayment); + assert_eq!(updated.base_fee_bps, 400); + assert_eq!(updated.min_fee, 150); +} + +// ---------------------------------------------------------------------------- +// ISOLATION — UPDATING ONE TYPE DOES NOT AFFECT OTHERS +// ---------------------------------------------------------------------------- + +/// Updating Platform fee parameters must not alter Processing or Verification. +#[test] +fn test_matrix_update_platform_preserves_others() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + // Capture baseline for Processing and Verification. + let proc_before = client.get_fee_structure(&FeeType::Processing); + let verif_before = client.get_fee_structure(&FeeType::Verification); + + // Mutate Platform. + client.update_fee_structure(&admin, &FeeType::Platform, &500, &200, &800_000, &true); + + // Processing and Verification must be unchanged. + let proc_after = client.get_fee_structure(&FeeType::Processing); + let verif_after = client.get_fee_structure(&FeeType::Verification); + + assert_eq!(proc_before.base_fee_bps, proc_after.base_fee_bps); + assert_eq!(proc_before.min_fee, proc_after.min_fee); + assert_eq!(proc_before.max_fee, proc_after.max_fee); + + assert_eq!(verif_before.base_fee_bps, verif_after.base_fee_bps); + assert_eq!(verif_before.min_fee, verif_after.min_fee); + assert_eq!(verif_before.max_fee, verif_after.max_fee); +} + +/// Inserting EarlyPayment must not alter Platform, Processing, or Verification. +#[test] +fn test_matrix_insert_early_payment_preserves_existing_types() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + let plat_before = client.get_fee_structure(&FeeType::Platform); + let proc_before = client.get_fee_structure(&FeeType::Processing); + let verif_before = client.get_fee_structure(&FeeType::Verification); + + // Insert EarlyPayment. + client.update_fee_structure(&admin, &FeeType::EarlyPayment, &100, &0, &500_000, &true); + + let plat_after = client.get_fee_structure(&FeeType::Platform); + let proc_after = client.get_fee_structure(&FeeType::Processing); + let verif_after = client.get_fee_structure(&FeeType::Verification); + + assert_eq!(plat_before.base_fee_bps, plat_after.base_fee_bps); + assert_eq!(proc_before.base_fee_bps, proc_after.base_fee_bps); + assert_eq!(verif_before.base_fee_bps, verif_after.base_fee_bps); +} + +// ---------------------------------------------------------------------------- +// CROSS-FEE FLOOR RULE — LATEPAYMENT +// ---------------------------------------------------------------------------- + +/// LatePayment min_fee below the current Platform min_fee must be rejected +/// with `InvalidFeeConfiguration` regardless of the BPS value used. +#[test] +fn test_matrix_late_payment_cross_check_floor_enforced_on_insert() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + // Raise Platform min_fee to 500 so the floor is easy to violate. + client.update_fee_structure(&admin, &FeeType::Platform, &200, &500, &500_000, &true); + + // LatePayment min_fee=100 < Platform min_fee=500 → rejected. + let result = client.try_update_fee_structure( + &admin, &FeeType::LatePayment, &300, &100, &1_000_000, &true, + ); + let err = result.err().expect("cross-check violation must fail").expect("contract error"); + assert_eq!(err, QuickLendXError::InvalidFeeConfiguration); +} + +/// LatePayment min_fee exactly equal to Platform min_fee satisfies the floor rule. +#[test] +fn test_matrix_late_payment_cross_check_floor_exact_equal_accepted() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + // Platform min_fee = default 100. + // LatePayment min_fee = 100 must be accepted (boundary: equal is valid). + let result = client.try_update_fee_structure( + &admin, &FeeType::LatePayment, &300, &100, &1_000_000, &true, + ); + assert!(result.is_ok(), "LatePayment min_fee == Platform min_fee must be accepted"); +} + +// ---------------------------------------------------------------------------- +// FLAT-FEE BOUNDARY — MIN_FEE EQUALS MAX_FEE ACROSS ALL TYPES +// ---------------------------------------------------------------------------- + +/// A flat-fee configuration (min_fee == max_fee) is valid for every FeeType. +#[test] +fn test_matrix_flat_fee_all_types_accepted() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + // Platform — flat fee at 200 stroops. + let r = client.try_update_fee_structure(&admin, &FeeType::Platform, &100, &200, &200, &true); + assert!(r.is_ok(), "Platform flat fee must be accepted"); + + // Processing — flat fee at 50 stroops. + let r = client.try_update_fee_structure(&admin, &FeeType::Processing, &50, &50, &50, &true); + assert!(r.is_ok(), "Processing flat fee must be accepted"); + + // Verification — flat fee at 100 stroops. + let r = client.try_update_fee_structure(&admin, &FeeType::Verification, &100, &100, &100, &true); + assert!(r.is_ok(), "Verification flat fee must be accepted"); + + // EarlyPayment — flat fee at 0 stroops (free incentive). + let r = client.try_update_fee_structure(&admin, &FeeType::EarlyPayment, &100, &0, &0, &true); + assert!(r.is_ok(), "EarlyPayment flat zero fee must be accepted"); + + // LatePayment — flat fee at 100 stroops (meets Platform floor of 100). + let r = client.try_update_fee_structure(&admin, &FeeType::LatePayment, &200, &100, &100, &true); + assert!(r.is_ok(), "LatePayment flat fee at floor must be accepted"); +} + +// ---------------------------------------------------------------------------- +// BPS INTERMEDIATE VALUES — SPOT CHECKS PER TYPE +// ---------------------------------------------------------------------------- + +/// Intermediate BPS values (1, 500, 999) are accepted for every FeeType. +#[test] +fn test_matrix_intermediate_bps_accepted_for_all_types() { + let env = Env::default(); + env.mock_all_auths(); + let contract_id = env.register(crate::QuickLendXContract, ()); + let client = QuickLendXContractClient::new(&env, &contract_id); + let admin = setup_admin(&env, &client); + + client.initialize_fee_system(&admin); + + // Pre-insert EarlyPayment and LatePayment so later updates in the loop work. + client.update_fee_structure(&admin, &FeeType::EarlyPayment, &100, &0, &500_000, &true); + client.update_fee_structure(&admin, &FeeType::LatePayment, &100, &100, &500_000, &true); + + // For each intermediate BPS value, update all 5 types. + // Use conservative min/max that are within every type's threshold. + for &bps in &[1u32, 500u32, 999u32] { + // Platform/Processing/Verification threshold = bps * 100 * 100 + let threshold = (bps as i128) * 100 * 100; + let max_val = if threshold == 0 { 100_000 } else { threshold.min(1_000_000) }; + + let r = client.try_update_fee_structure( + &admin, &FeeType::Platform, &bps, &100, &max_val, &true, + ); + assert!(r.is_ok(), "Platform bps={} must be accepted", bps); + + let r = client.try_update_fee_structure( + &admin, &FeeType::Processing, &bps, &50, &max_val, &true, + ); + assert!(r.is_ok(), "Processing bps={} must be accepted", bps); + + let r = client.try_update_fee_structure( + &admin, &FeeType::Verification, &bps, &100, &max_val, &true, + ); + assert!(r.is_ok(), "Verification bps={} must be accepted", bps); + + // EarlyPayment/LatePayment threshold = bps * 500 * 100 (more generous). + let ep_threshold = (bps as i128) * 500 * 100; + let ep_max = if ep_threshold == 0 { 100_000 } else { ep_threshold.min(1_000_000) }; + + let r = client.try_update_fee_structure( + &admin, &FeeType::EarlyPayment, &bps, &0, &ep_max, &true, + ); + assert!(r.is_ok(), "EarlyPayment bps={} must be accepted", bps); + + // LatePayment: after Platform was set with min_fee=100, the floor = 100. + let r = client.try_update_fee_structure( + &admin, &FeeType::LatePayment, &bps, &100, &ep_max, &true, + ); + assert!(r.is_ok(), "LatePayment bps={} must be accepted", bps); + } +} diff --git a/target/.rustc_info.json b/target/.rustc_info.json index 45b6a340..fd74b154 100644 --- a/target/.rustc_info.json +++ b/target/.rustc_info.json @@ -1 +1 @@ -{"rustc_fingerprint":6632936191837673677,"outputs":{"17747080675513052775":{"success":true,"status":"","code":0,"stdout":"rustc 1.91.1 (ed61e7d7e 2025-11-07)\nbinary: rustc\ncommit-hash: ed61e7d7e242494fb7057f2657300d9e77bb4fcb\ncommit-date: 2025-11-07\nhost: aarch64-apple-darwin\nrelease: 1.91.1\nLLVM version: 21.1.2\n","stderr":""},"7971740275564407648":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n/Users/jagadeesh/.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":""},"6432102384495711296":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n/Users/jagadeesh/.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 +{"rustc_fingerprint":15971100378846702742,"outputs":{"17747080675513052775":{"success":true,"status":"","code":0,"stdout":"rustc 1.93.1 (01f6ddf75 2026-02-11)\nbinary: rustc\ncommit-hash: 01f6ddf7588f42ae2d7eb0a2f21d44e8e96674cf\ncommit-date: 2026-02-11\nhost: x86_64-apple-darwin\nrelease: 1.93.1\nLLVM version: 21.1.8\n","stderr":""},"7971740275564407648":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.dylib\nlib___.dylib\nlib___.a\nlib___.dylib\n/Users/mac/.rustup/toolchains/stable-x86_64-apple-darwin\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_family=\"unix\"\ntarget_feature=\"cmpxchg16b\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_feature=\"sse3\"\ntarget_feature=\"sse4.1\"\ntarget_feature=\"ssse3\"\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/target/debug/.fingerprint/quicklendx-contracts-7102e496aa4b7600/dep-test-lib-quicklendx_contracts b/target/debug/.fingerprint/quicklendx-contracts-7102e496aa4b7600/dep-test-lib-quicklendx_contracts new file mode 100644 index 00000000..aae828ea Binary files /dev/null and b/target/debug/.fingerprint/quicklendx-contracts-7102e496aa4b7600/dep-test-lib-quicklendx_contracts differ diff --git a/target/debug/.fingerprint/quicklendx-contracts-7102e496aa4b7600/invoked.timestamp b/target/debug/.fingerprint/quicklendx-contracts-7102e496aa4b7600/invoked.timestamp new file mode 100644 index 00000000..e00328da --- /dev/null +++ b/target/debug/.fingerprint/quicklendx-contracts-7102e496aa4b7600/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/target/debug/.fingerprint/quicklendx-contracts-7102e496aa4b7600/test-lib-quicklendx_contracts b/target/debug/.fingerprint/quicklendx-contracts-7102e496aa4b7600/test-lib-quicklendx_contracts new file mode 100644 index 00000000..5a5983dd --- /dev/null +++ b/target/debug/.fingerprint/quicklendx-contracts-7102e496aa4b7600/test-lib-quicklendx_contracts @@ -0,0 +1 @@ +98a6796625c84e64 \ No newline at end of file diff --git a/target/debug/.fingerprint/quicklendx-contracts-7102e496aa4b7600/test-lib-quicklendx_contracts.json b/target/debug/.fingerprint/quicklendx-contracts-7102e496aa4b7600/test-lib-quicklendx_contracts.json new file mode 100644 index 00000000..be27d113 --- /dev/null +++ b/target/debug/.fingerprint/quicklendx-contracts-7102e496aa4b7600/test-lib-quicklendx_contracts.json @@ -0,0 +1 @@ +{"rustc":9634816904995266103,"features":"[]","declared_features":"[]","target":2352592780582273925,"profile":15057526963834790232,"path":10763286916239946207,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/quicklendx-contracts-7102e496aa4b7600/dep-test-lib-quicklendx_contracts","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0} \ No newline at end of file diff --git a/target/debug/.fingerprint/quicklendx-contracts-eaaf1962e7b16294/dep-lib-quicklendx_contracts b/target/debug/.fingerprint/quicklendx-contracts-eaaf1962e7b16294/dep-lib-quicklendx_contracts new file mode 100644 index 00000000..0eb49b2d Binary files /dev/null and b/target/debug/.fingerprint/quicklendx-contracts-eaaf1962e7b16294/dep-lib-quicklendx_contracts differ diff --git a/target/debug/.fingerprint/quicklendx-contracts-eaaf1962e7b16294/invoked.timestamp b/target/debug/.fingerprint/quicklendx-contracts-eaaf1962e7b16294/invoked.timestamp new file mode 100644 index 00000000..e00328da --- /dev/null +++ b/target/debug/.fingerprint/quicklendx-contracts-eaaf1962e7b16294/invoked.timestamp @@ -0,0 +1 @@ +This file has an mtime of when this was started. \ No newline at end of file diff --git a/target/debug/.fingerprint/quicklendx-contracts-eaaf1962e7b16294/lib-quicklendx_contracts b/target/debug/.fingerprint/quicklendx-contracts-eaaf1962e7b16294/lib-quicklendx_contracts new file mode 100644 index 00000000..f3d11f6e --- /dev/null +++ b/target/debug/.fingerprint/quicklendx-contracts-eaaf1962e7b16294/lib-quicklendx_contracts @@ -0,0 +1 @@ +532c94112f9de885 \ No newline at end of file diff --git a/target/debug/.fingerprint/quicklendx-contracts-eaaf1962e7b16294/lib-quicklendx_contracts.json b/target/debug/.fingerprint/quicklendx-contracts-eaaf1962e7b16294/lib-quicklendx_contracts.json new file mode 100644 index 00000000..e99f8409 --- /dev/null +++ b/target/debug/.fingerprint/quicklendx-contracts-eaaf1962e7b16294/lib-quicklendx_contracts.json @@ -0,0 +1 @@ +{"rustc":9634816904995266103,"features":"[]","declared_features":"[]","target":2352592780582273925,"profile":6675295047989516842,"path":10763286916239946207,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/quicklendx-contracts-eaaf1962e7b16294/dep-lib-quicklendx_contracts","checksum":false}}],"rustflags":[],"config":2069994364910194474,"compile_kind":0} \ No newline at end of file diff --git a/target/debug/deps/libquicklendx_contracts.dylib b/target/debug/deps/libquicklendx_contracts.dylib new file mode 100755 index 00000000..4030695d Binary files /dev/null and b/target/debug/deps/libquicklendx_contracts.dylib differ diff --git a/target/debug/deps/libquicklendx_contracts.rlib b/target/debug/deps/libquicklendx_contracts.rlib new file mode 100644 index 00000000..dfcc5992 Binary files /dev/null and b/target/debug/deps/libquicklendx_contracts.rlib differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600 b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600 new file mode 100755 index 00000000..76cb7cc8 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600 differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.05lwcqoy4hmneazo9aoma4ayw.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.05lwcqoy4hmneazo9aoma4ayw.0o6q2j8.rcgu.o new file mode 100644 index 00000000..4275385e Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.05lwcqoy4hmneazo9aoma4ayw.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.06zh5nf43nrr9cxi4ptcodrkn.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.06zh5nf43nrr9cxi4ptcodrkn.0o6q2j8.rcgu.o new file mode 100644 index 00000000..40b44977 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.06zh5nf43nrr9cxi4ptcodrkn.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.0bsjcnie2j49qimzn8aee4zm2.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.0bsjcnie2j49qimzn8aee4zm2.0o6q2j8.rcgu.o new file mode 100644 index 00000000..4fd976d2 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.0bsjcnie2j49qimzn8aee4zm2.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.0ick3i7ciuglhcglerqlhdzg1.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.0ick3i7ciuglhcglerqlhdzg1.0o6q2j8.rcgu.o new file mode 100644 index 00000000..a65c4457 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.0ick3i7ciuglhcglerqlhdzg1.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.0m3cupedvlrcf0dh2wdps5pb0.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.0m3cupedvlrcf0dh2wdps5pb0.0o6q2j8.rcgu.o new file mode 100644 index 00000000..c69fc127 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.0m3cupedvlrcf0dh2wdps5pb0.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.0r9okh86q2cacdotxd4koi4en.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.0r9okh86q2cacdotxd4koi4en.0o6q2j8.rcgu.o new file mode 100644 index 00000000..52a1e45a Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.0r9okh86q2cacdotxd4koi4en.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.12hdmsxmjrafouggp46c9ul1q.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.12hdmsxmjrafouggp46c9ul1q.0o6q2j8.rcgu.o new file mode 100644 index 00000000..df2c21a9 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.12hdmsxmjrafouggp46c9ul1q.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.1fiwu3zxob8d8ff25xt2s8fp3.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.1fiwu3zxob8d8ff25xt2s8fp3.0o6q2j8.rcgu.o new file mode 100644 index 00000000..95748107 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.1fiwu3zxob8d8ff25xt2s8fp3.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.1gjczg0jj25sg05iowfhae2qe.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.1gjczg0jj25sg05iowfhae2qe.0o6q2j8.rcgu.o new file mode 100644 index 00000000..10481a04 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.1gjczg0jj25sg05iowfhae2qe.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.1uz6jrgyj5wagqb9t42kkyk89.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.1uz6jrgyj5wagqb9t42kkyk89.0o6q2j8.rcgu.o new file mode 100644 index 00000000..81eecbb9 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.1uz6jrgyj5wagqb9t42kkyk89.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.25enzpbmu4mokw28rjduri3ek.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.25enzpbmu4mokw28rjduri3ek.0o6q2j8.rcgu.o new file mode 100644 index 00000000..52dc9520 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.25enzpbmu4mokw28rjduri3ek.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.2h9s4jf7b8xr57z75ab26dm98.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.2h9s4jf7b8xr57z75ab26dm98.0o6q2j8.rcgu.o new file mode 100644 index 00000000..633e3bc5 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.2h9s4jf7b8xr57z75ab26dm98.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.2l83u0q4pk4bwomdzieps1jji.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.2l83u0q4pk4bwomdzieps1jji.0o6q2j8.rcgu.o new file mode 100644 index 00000000..01c55aa3 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.2l83u0q4pk4bwomdzieps1jji.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.2okynzkiwxxx02m65herbwk3z.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.2okynzkiwxxx02m65herbwk3z.0o6q2j8.rcgu.o new file mode 100644 index 00000000..14576e04 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.2okynzkiwxxx02m65herbwk3z.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.2vubfj8v2eyaxskkrpot16dep.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.2vubfj8v2eyaxskkrpot16dep.0o6q2j8.rcgu.o new file mode 100644 index 00000000..538f5183 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.2vubfj8v2eyaxskkrpot16dep.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.3eo1sfgi97p3pzp761w8g64t6.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.3eo1sfgi97p3pzp761w8g64t6.0o6q2j8.rcgu.o new file mode 100644 index 00000000..7d26af84 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.3eo1sfgi97p3pzp761w8g64t6.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.3ftvznobpx9l2mxmlhz8upzqd.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.3ftvznobpx9l2mxmlhz8upzqd.0o6q2j8.rcgu.o new file mode 100644 index 00000000..ef774934 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.3ftvznobpx9l2mxmlhz8upzqd.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.3hvz3z1fbce4qrr081bcz7k0n.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.3hvz3z1fbce4qrr081bcz7k0n.0o6q2j8.rcgu.o new file mode 100644 index 00000000..f58e9ee9 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.3hvz3z1fbce4qrr081bcz7k0n.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.3n1md07n0qhr9c6ks0757j27g.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.3n1md07n0qhr9c6ks0757j27g.0o6q2j8.rcgu.o new file mode 100644 index 00000000..eb3ba121 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.3n1md07n0qhr9c6ks0757j27g.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.47od8a9p5iefzk727r5btf4ea.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.47od8a9p5iefzk727r5btf4ea.0o6q2j8.rcgu.o new file mode 100644 index 00000000..d0364ba7 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.47od8a9p5iefzk727r5btf4ea.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.4cy0cv38toaci0cmlc95nfomf.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.4cy0cv38toaci0cmlc95nfomf.0o6q2j8.rcgu.o new file mode 100644 index 00000000..9b5b46c3 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.4cy0cv38toaci0cmlc95nfomf.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.4fia3yw5wrgfao383qr6kloqn.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.4fia3yw5wrgfao383qr6kloqn.0o6q2j8.rcgu.o new file mode 100644 index 00000000..e4b23f8c Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.4fia3yw5wrgfao383qr6kloqn.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.4xoh602xqeopznljxs57rf7ax.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.4xoh602xqeopznljxs57rf7ax.0o6q2j8.rcgu.o new file mode 100644 index 00000000..31c6f4f5 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.4xoh602xqeopznljxs57rf7ax.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.4z4i0z30dr8zfll32kqe1gsve.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.4z4i0z30dr8zfll32kqe1gsve.0o6q2j8.rcgu.o new file mode 100644 index 00000000..94f1ed4c Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.4z4i0z30dr8zfll32kqe1gsve.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.4zw0lzfj0ry0cuy0iqdv8lsw1.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.4zw0lzfj0ry0cuy0iqdv8lsw1.0o6q2j8.rcgu.o new file mode 100644 index 00000000..e5e7215f Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.4zw0lzfj0ry0cuy0iqdv8lsw1.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.5a5wo1qqxdzkrbry6smqvjh91.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.5a5wo1qqxdzkrbry6smqvjh91.0o6q2j8.rcgu.o new file mode 100644 index 00000000..14b8fdbc Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.5a5wo1qqxdzkrbry6smqvjh91.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.62r5nxexg97xweekp59hako6b.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.62r5nxexg97xweekp59hako6b.0o6q2j8.rcgu.o new file mode 100644 index 00000000..979386d5 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.62r5nxexg97xweekp59hako6b.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.65p8gt129eyww53bqqhk66jza.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.65p8gt129eyww53bqqhk66jza.0o6q2j8.rcgu.o new file mode 100644 index 00000000..e90470ca Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.65p8gt129eyww53bqqhk66jza.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.6k0vvnziahqs1mfovjx5znm8b.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.6k0vvnziahqs1mfovjx5znm8b.0o6q2j8.rcgu.o new file mode 100644 index 00000000..3cad6442 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.6k0vvnziahqs1mfovjx5znm8b.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.6ssu9u24qml18oovzqjpcyodv.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.6ssu9u24qml18oovzqjpcyodv.0o6q2j8.rcgu.o new file mode 100644 index 00000000..44486184 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.6ssu9u24qml18oovzqjpcyodv.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.7eqpjw0knvhsx22sqmhemtnjr.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.7eqpjw0knvhsx22sqmhemtnjr.0o6q2j8.rcgu.o new file mode 100644 index 00000000..49b30eff Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.7eqpjw0knvhsx22sqmhemtnjr.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.7vxao4syjsjyvetjr0ad4azrb.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.7vxao4syjsjyvetjr0ad4azrb.0o6q2j8.rcgu.o new file mode 100644 index 00000000..28321280 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.7vxao4syjsjyvetjr0ad4azrb.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.7z3yx4ahhajcs2vetjn0cp3hs.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.7z3yx4ahhajcs2vetjn0cp3hs.0o6q2j8.rcgu.o new file mode 100644 index 00000000..203c24fd Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.7z3yx4ahhajcs2vetjn0cp3hs.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.844z2kma8zu9q5igt92om9702.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.844z2kma8zu9q5igt92om9702.0o6q2j8.rcgu.o new file mode 100644 index 00000000..94e97bbe Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.844z2kma8zu9q5igt92om9702.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.8l2wfvyuswym8rkmvyo5sjv1v.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.8l2wfvyuswym8rkmvyo5sjv1v.0o6q2j8.rcgu.o new file mode 100644 index 00000000..2c510c2d Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.8l2wfvyuswym8rkmvyo5sjv1v.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.8q2b2p70mrsbwluf9fyp1dbfl.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.8q2b2p70mrsbwluf9fyp1dbfl.0o6q2j8.rcgu.o new file mode 100644 index 00000000..23fb3e62 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.8q2b2p70mrsbwluf9fyp1dbfl.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.8tj7dtjrlvb2ruuaqlbwcn761.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.8tj7dtjrlvb2ruuaqlbwcn761.0o6q2j8.rcgu.o new file mode 100644 index 00000000..a60dc011 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.8tj7dtjrlvb2ruuaqlbwcn761.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.97it4crwepfog0hgjp4q7h5dr.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.97it4crwepfog0hgjp4q7h5dr.0o6q2j8.rcgu.o new file mode 100644 index 00000000..4d953d81 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.97it4crwepfog0hgjp4q7h5dr.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.9hsb3oxxf3ir9mgipozgr59fv.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.9hsb3oxxf3ir9mgipozgr59fv.0o6q2j8.rcgu.o new file mode 100644 index 00000000..8d4b4db8 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.9hsb3oxxf3ir9mgipozgr59fv.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.9k12u5qfsg1d8w9lf8dz3e01f.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.9k12u5qfsg1d8w9lf8dz3e01f.0o6q2j8.rcgu.o new file mode 100644 index 00000000..18306b3e Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.9k12u5qfsg1d8w9lf8dz3e01f.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.9t303gkqmhtisygivywej132w.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.9t303gkqmhtisygivywej132w.0o6q2j8.rcgu.o new file mode 100644 index 00000000..7c609e8d Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.9t303gkqmhtisygivywej132w.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.ab66323hixrhqnaamij2crz5y.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.ab66323hixrhqnaamij2crz5y.0o6q2j8.rcgu.o new file mode 100644 index 00000000..d27a51de Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.ab66323hixrhqnaamij2crz5y.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.ayu2q5c2hy1nrq96ktqc3zkel.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.ayu2q5c2hy1nrq96ktqc3zkel.0o6q2j8.rcgu.o new file mode 100644 index 00000000..ebbd64a7 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.ayu2q5c2hy1nrq96ktqc3zkel.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.b60d69n4d1fp5h96t44y6flq0.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.b60d69n4d1fp5h96t44y6flq0.0o6q2j8.rcgu.o new file mode 100644 index 00000000..09291656 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.b60d69n4d1fp5h96t44y6flq0.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.ba4qcfv5hfsdb8u7qr0p73lj5.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.ba4qcfv5hfsdb8u7qr0p73lj5.0o6q2j8.rcgu.o new file mode 100644 index 00000000..27aac71b Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.ba4qcfv5hfsdb8u7qr0p73lj5.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.bhf5d1o9sb8naysz66lseia12.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.bhf5d1o9sb8naysz66lseia12.0o6q2j8.rcgu.o new file mode 100644 index 00000000..164f9278 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.bhf5d1o9sb8naysz66lseia12.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.bj0h9d4wjm9bo16ukkou566ys.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.bj0h9d4wjm9bo16ukkou566ys.0o6q2j8.rcgu.o new file mode 100644 index 00000000..3d0e99bb Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.bj0h9d4wjm9bo16ukkou566ys.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.bvwb1wtnbdpeqitx5cmy5lr3m.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.bvwb1wtnbdpeqitx5cmy5lr3m.0o6q2j8.rcgu.o new file mode 100644 index 00000000..86b09ece Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.bvwb1wtnbdpeqitx5cmy5lr3m.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.c1jkpdm91bw2s9x172jc7215s.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.c1jkpdm91bw2s9x172jc7215s.0o6q2j8.rcgu.o new file mode 100644 index 00000000..ba9c5e55 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.c1jkpdm91bw2s9x172jc7215s.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.cpugnprmji6p8dgoo5pbcr9zk.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.cpugnprmji6p8dgoo5pbcr9zk.0o6q2j8.rcgu.o new file mode 100644 index 00000000..898b8aa5 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.cpugnprmji6p8dgoo5pbcr9zk.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.credh7qjr2vh4zbx0rulaegzj.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.credh7qjr2vh4zbx0rulaegzj.0o6q2j8.rcgu.o new file mode 100644 index 00000000..78e8cdba Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.credh7qjr2vh4zbx0rulaegzj.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.ct6ki5zdvcwg8gzma7t76tec4.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.ct6ki5zdvcwg8gzma7t76tec4.0o6q2j8.rcgu.o new file mode 100644 index 00000000..83716d12 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.ct6ki5zdvcwg8gzma7t76tec4.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.d b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.d new file mode 100644 index 00000000..53431127 --- /dev/null +++ b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.d @@ -0,0 +1,9 @@ +/Users/mac/Desktop/drips2/quicklendx-protocol/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.d: src/lib.rs src/fees.rs src/profits.rs src/settlement.rs src/test_fuzz.rs + +/Users/mac/Desktop/drips2/quicklendx-protocol/target/debug/deps/quicklendx_contracts-7102e496aa4b7600: src/lib.rs src/fees.rs src/profits.rs src/settlement.rs src/test_fuzz.rs + +src/lib.rs: +src/fees.rs: +src/profits.rs: +src/settlement.rs: +src/test_fuzz.rs: diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.d300aep4nb7jf0p0r7hyl3kc7.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.d300aep4nb7jf0p0r7hyl3kc7.0o6q2j8.rcgu.o new file mode 100644 index 00000000..fc7132ac Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.d300aep4nb7jf0p0r7hyl3kc7.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.dqfmiia5oy7pugiiutehpnbbv.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.dqfmiia5oy7pugiiutehpnbbv.0o6q2j8.rcgu.o new file mode 100644 index 00000000..6caa53b7 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.dqfmiia5oy7pugiiutehpnbbv.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.dqz4wuqkcymitpr5mt8ftzvjj.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.dqz4wuqkcymitpr5mt8ftzvjj.0o6q2j8.rcgu.o new file mode 100644 index 00000000..28f00667 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.dqz4wuqkcymitpr5mt8ftzvjj.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.e37s9qs0ucfrkk8urr3gajuuy.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.e37s9qs0ucfrkk8urr3gajuuy.0o6q2j8.rcgu.o new file mode 100644 index 00000000..b513bc18 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.e37s9qs0ucfrkk8urr3gajuuy.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.e7sgm4lu0j2pepppvu20wkxu1.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.e7sgm4lu0j2pepppvu20wkxu1.0o6q2j8.rcgu.o new file mode 100644 index 00000000..967c746a Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.e7sgm4lu0j2pepppvu20wkxu1.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.e7zphncf38idoiuhr2r29pmzk.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.e7zphncf38idoiuhr2r29pmzk.0o6q2j8.rcgu.o new file mode 100644 index 00000000..824a4dc7 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.e7zphncf38idoiuhr2r29pmzk.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.ekuqabtvjw42egu5mlvy2cb55.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.ekuqabtvjw42egu5mlvy2cb55.0o6q2j8.rcgu.o new file mode 100644 index 00000000..25bc09fb Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.ekuqabtvjw42egu5mlvy2cb55.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.encc40tb6dh3df5ss1zvoey26.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.encc40tb6dh3df5ss1zvoey26.0o6q2j8.rcgu.o new file mode 100644 index 00000000..b88eba2e Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.encc40tb6dh3df5ss1zvoey26.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.eou22w1xmlfsqr806b385l4md.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.eou22w1xmlfsqr806b385l4md.0o6q2j8.rcgu.o new file mode 100644 index 00000000..d45a076d Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.eou22w1xmlfsqr806b385l4md.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.f54omox1p5hy60cwju8oy0tbs.0o6q2j8.rcgu.o b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.f54omox1p5hy60cwju8oy0tbs.0o6q2j8.rcgu.o new file mode 100644 index 00000000..536b735c Binary files /dev/null and b/target/debug/deps/quicklendx_contracts-7102e496aa4b7600.f54omox1p5hy60cwju8oy0tbs.0o6q2j8.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts.0bh4wrcz9zy2elbplmztib3oj.150gpzo.rcgu.o b/target/debug/deps/quicklendx_contracts.0bh4wrcz9zy2elbplmztib3oj.150gpzo.rcgu.o new file mode 100644 index 00000000..3b166ce6 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts.0bh4wrcz9zy2elbplmztib3oj.150gpzo.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts.4k9ig3kp34pnbiaxdd09aireo.150gpzo.rcgu.o b/target/debug/deps/quicklendx_contracts.4k9ig3kp34pnbiaxdd09aireo.150gpzo.rcgu.o new file mode 100644 index 00000000..44398639 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts.4k9ig3kp34pnbiaxdd09aireo.150gpzo.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts.4ohngu32rmph0h566mq2yqf8r.150gpzo.rcgu.o b/target/debug/deps/quicklendx_contracts.4ohngu32rmph0h566mq2yqf8r.150gpzo.rcgu.o new file mode 100644 index 00000000..cee9dd42 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts.4ohngu32rmph0h566mq2yqf8r.150gpzo.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts.az8fvldhavpbvka7ipcwjwgti.150gpzo.rcgu.o b/target/debug/deps/quicklendx_contracts.az8fvldhavpbvka7ipcwjwgti.150gpzo.rcgu.o new file mode 100644 index 00000000..35f8488d Binary files /dev/null and b/target/debug/deps/quicklendx_contracts.az8fvldhavpbvka7ipcwjwgti.150gpzo.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts.c4swwv4317u4r855rb5elmc68.150gpzo.rcgu.o b/target/debug/deps/quicklendx_contracts.c4swwv4317u4r855rb5elmc68.150gpzo.rcgu.o new file mode 100644 index 00000000..33ab2712 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts.c4swwv4317u4r855rb5elmc68.150gpzo.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts.cek1mltt86viwiyxxehmut6s6.150gpzo.rcgu.o b/target/debug/deps/quicklendx_contracts.cek1mltt86viwiyxxehmut6s6.150gpzo.rcgu.o new file mode 100644 index 00000000..3744ec15 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts.cek1mltt86viwiyxxehmut6s6.150gpzo.rcgu.o differ diff --git a/target/debug/deps/quicklendx_contracts.d b/target/debug/deps/quicklendx_contracts.d new file mode 100644 index 00000000..42fa2a2e --- /dev/null +++ b/target/debug/deps/quicklendx_contracts.d @@ -0,0 +1,10 @@ +/Users/mac/Desktop/drips2/quicklendx-protocol/target/debug/deps/quicklendx_contracts.d: src/lib.rs src/fees.rs src/profits.rs src/settlement.rs + +/Users/mac/Desktop/drips2/quicklendx-protocol/target/debug/deps/libquicklendx_contracts.dylib: src/lib.rs src/fees.rs src/profits.rs src/settlement.rs + +/Users/mac/Desktop/drips2/quicklendx-protocol/target/debug/deps/libquicklendx_contracts.rlib: src/lib.rs src/fees.rs src/profits.rs src/settlement.rs + +src/lib.rs: +src/fees.rs: +src/profits.rs: +src/settlement.rs: diff --git a/target/debug/deps/quicklendx_contracts.e566f2ln17fiyg35f6y99qjud.150gpzo.rcgu.o b/target/debug/deps/quicklendx_contracts.e566f2ln17fiyg35f6y99qjud.150gpzo.rcgu.o new file mode 100644 index 00000000..148c1339 Binary files /dev/null and b/target/debug/deps/quicklendx_contracts.e566f2ln17fiyg35f6y99qjud.150gpzo.rcgu.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/05lwcqoy4hmneazo9aoma4ayw.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/05lwcqoy4hmneazo9aoma4ayw.o new file mode 100644 index 00000000..4275385e Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/05lwcqoy4hmneazo9aoma4ayw.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/06zh5nf43nrr9cxi4ptcodrkn.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/06zh5nf43nrr9cxi4ptcodrkn.o new file mode 100644 index 00000000..40b44977 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/06zh5nf43nrr9cxi4ptcodrkn.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/0bsjcnie2j49qimzn8aee4zm2.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/0bsjcnie2j49qimzn8aee4zm2.o new file mode 100644 index 00000000..4fd976d2 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/0bsjcnie2j49qimzn8aee4zm2.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/0ick3i7ciuglhcglerqlhdzg1.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/0ick3i7ciuglhcglerqlhdzg1.o new file mode 100644 index 00000000..a65c4457 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/0ick3i7ciuglhcglerqlhdzg1.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/0m3cupedvlrcf0dh2wdps5pb0.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/0m3cupedvlrcf0dh2wdps5pb0.o new file mode 100644 index 00000000..c69fc127 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/0m3cupedvlrcf0dh2wdps5pb0.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/0r9okh86q2cacdotxd4koi4en.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/0r9okh86q2cacdotxd4koi4en.o new file mode 100644 index 00000000..52a1e45a Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/0r9okh86q2cacdotxd4koi4en.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/12hdmsxmjrafouggp46c9ul1q.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/12hdmsxmjrafouggp46c9ul1q.o new file mode 100644 index 00000000..df2c21a9 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/12hdmsxmjrafouggp46c9ul1q.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/1fiwu3zxob8d8ff25xt2s8fp3.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/1fiwu3zxob8d8ff25xt2s8fp3.o new file mode 100644 index 00000000..95748107 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/1fiwu3zxob8d8ff25xt2s8fp3.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/1gjczg0jj25sg05iowfhae2qe.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/1gjczg0jj25sg05iowfhae2qe.o new file mode 100644 index 00000000..10481a04 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/1gjczg0jj25sg05iowfhae2qe.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/1uz6jrgyj5wagqb9t42kkyk89.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/1uz6jrgyj5wagqb9t42kkyk89.o new file mode 100644 index 00000000..81eecbb9 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/1uz6jrgyj5wagqb9t42kkyk89.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/25enzpbmu4mokw28rjduri3ek.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/25enzpbmu4mokw28rjduri3ek.o new file mode 100644 index 00000000..52dc9520 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/25enzpbmu4mokw28rjduri3ek.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/2h9s4jf7b8xr57z75ab26dm98.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/2h9s4jf7b8xr57z75ab26dm98.o new file mode 100644 index 00000000..633e3bc5 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/2h9s4jf7b8xr57z75ab26dm98.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/2l83u0q4pk4bwomdzieps1jji.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/2l83u0q4pk4bwomdzieps1jji.o new file mode 100644 index 00000000..01c55aa3 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/2l83u0q4pk4bwomdzieps1jji.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/2okynzkiwxxx02m65herbwk3z.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/2okynzkiwxxx02m65herbwk3z.o new file mode 100644 index 00000000..14576e04 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/2okynzkiwxxx02m65herbwk3z.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/2vubfj8v2eyaxskkrpot16dep.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/2vubfj8v2eyaxskkrpot16dep.o new file mode 100644 index 00000000..538f5183 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/2vubfj8v2eyaxskkrpot16dep.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/3eo1sfgi97p3pzp761w8g64t6.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/3eo1sfgi97p3pzp761w8g64t6.o new file mode 100644 index 00000000..7d26af84 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/3eo1sfgi97p3pzp761w8g64t6.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/3ftvznobpx9l2mxmlhz8upzqd.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/3ftvznobpx9l2mxmlhz8upzqd.o new file mode 100644 index 00000000..ef774934 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/3ftvznobpx9l2mxmlhz8upzqd.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/3hvz3z1fbce4qrr081bcz7k0n.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/3hvz3z1fbce4qrr081bcz7k0n.o new file mode 100644 index 00000000..f58e9ee9 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/3hvz3z1fbce4qrr081bcz7k0n.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/3n1md07n0qhr9c6ks0757j27g.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/3n1md07n0qhr9c6ks0757j27g.o new file mode 100644 index 00000000..eb3ba121 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/3n1md07n0qhr9c6ks0757j27g.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/47od8a9p5iefzk727r5btf4ea.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/47od8a9p5iefzk727r5btf4ea.o new file mode 100644 index 00000000..d0364ba7 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/47od8a9p5iefzk727r5btf4ea.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/4cy0cv38toaci0cmlc95nfomf.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/4cy0cv38toaci0cmlc95nfomf.o new file mode 100644 index 00000000..9b5b46c3 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/4cy0cv38toaci0cmlc95nfomf.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/4fia3yw5wrgfao383qr6kloqn.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/4fia3yw5wrgfao383qr6kloqn.o new file mode 100644 index 00000000..e4b23f8c Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/4fia3yw5wrgfao383qr6kloqn.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/4xoh602xqeopznljxs57rf7ax.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/4xoh602xqeopznljxs57rf7ax.o new file mode 100644 index 00000000..31c6f4f5 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/4xoh602xqeopznljxs57rf7ax.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/4z4i0z30dr8zfll32kqe1gsve.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/4z4i0z30dr8zfll32kqe1gsve.o new file mode 100644 index 00000000..94f1ed4c Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/4z4i0z30dr8zfll32kqe1gsve.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/4zw0lzfj0ry0cuy0iqdv8lsw1.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/4zw0lzfj0ry0cuy0iqdv8lsw1.o new file mode 100644 index 00000000..e5e7215f Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/4zw0lzfj0ry0cuy0iqdv8lsw1.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/5a5wo1qqxdzkrbry6smqvjh91.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/5a5wo1qqxdzkrbry6smqvjh91.o new file mode 100644 index 00000000..14b8fdbc Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/5a5wo1qqxdzkrbry6smqvjh91.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/62r5nxexg97xweekp59hako6b.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/62r5nxexg97xweekp59hako6b.o new file mode 100644 index 00000000..979386d5 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/62r5nxexg97xweekp59hako6b.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/65p8gt129eyww53bqqhk66jza.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/65p8gt129eyww53bqqhk66jza.o new file mode 100644 index 00000000..e90470ca Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/65p8gt129eyww53bqqhk66jza.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/6k0vvnziahqs1mfovjx5znm8b.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/6k0vvnziahqs1mfovjx5znm8b.o new file mode 100644 index 00000000..3cad6442 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/6k0vvnziahqs1mfovjx5znm8b.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/6ssu9u24qml18oovzqjpcyodv.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/6ssu9u24qml18oovzqjpcyodv.o new file mode 100644 index 00000000..44486184 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/6ssu9u24qml18oovzqjpcyodv.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/7eqpjw0knvhsx22sqmhemtnjr.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/7eqpjw0knvhsx22sqmhemtnjr.o new file mode 100644 index 00000000..49b30eff Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/7eqpjw0knvhsx22sqmhemtnjr.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/7vxao4syjsjyvetjr0ad4azrb.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/7vxao4syjsjyvetjr0ad4azrb.o new file mode 100644 index 00000000..28321280 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/7vxao4syjsjyvetjr0ad4azrb.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/7z3yx4ahhajcs2vetjn0cp3hs.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/7z3yx4ahhajcs2vetjn0cp3hs.o new file mode 100644 index 00000000..203c24fd Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/7z3yx4ahhajcs2vetjn0cp3hs.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/844z2kma8zu9q5igt92om9702.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/844z2kma8zu9q5igt92om9702.o new file mode 100644 index 00000000..94e97bbe Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/844z2kma8zu9q5igt92om9702.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/8l2wfvyuswym8rkmvyo5sjv1v.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/8l2wfvyuswym8rkmvyo5sjv1v.o new file mode 100644 index 00000000..2c510c2d Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/8l2wfvyuswym8rkmvyo5sjv1v.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/8q2b2p70mrsbwluf9fyp1dbfl.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/8q2b2p70mrsbwluf9fyp1dbfl.o new file mode 100644 index 00000000..23fb3e62 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/8q2b2p70mrsbwluf9fyp1dbfl.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/8tj7dtjrlvb2ruuaqlbwcn761.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/8tj7dtjrlvb2ruuaqlbwcn761.o new file mode 100644 index 00000000..a60dc011 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/8tj7dtjrlvb2ruuaqlbwcn761.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/97it4crwepfog0hgjp4q7h5dr.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/97it4crwepfog0hgjp4q7h5dr.o new file mode 100644 index 00000000..4d953d81 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/97it4crwepfog0hgjp4q7h5dr.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/9hsb3oxxf3ir9mgipozgr59fv.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/9hsb3oxxf3ir9mgipozgr59fv.o new file mode 100644 index 00000000..8d4b4db8 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/9hsb3oxxf3ir9mgipozgr59fv.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/9k12u5qfsg1d8w9lf8dz3e01f.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/9k12u5qfsg1d8w9lf8dz3e01f.o new file mode 100644 index 00000000..18306b3e Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/9k12u5qfsg1d8w9lf8dz3e01f.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/9t303gkqmhtisygivywej132w.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/9t303gkqmhtisygivywej132w.o new file mode 100644 index 00000000..7c609e8d Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/9t303gkqmhtisygivywej132w.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/ab66323hixrhqnaamij2crz5y.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/ab66323hixrhqnaamij2crz5y.o new file mode 100644 index 00000000..d27a51de Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/ab66323hixrhqnaamij2crz5y.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/ayu2q5c2hy1nrq96ktqc3zkel.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/ayu2q5c2hy1nrq96ktqc3zkel.o new file mode 100644 index 00000000..ebbd64a7 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/ayu2q5c2hy1nrq96ktqc3zkel.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/b60d69n4d1fp5h96t44y6flq0.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/b60d69n4d1fp5h96t44y6flq0.o new file mode 100644 index 00000000..09291656 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/b60d69n4d1fp5h96t44y6flq0.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/ba4qcfv5hfsdb8u7qr0p73lj5.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/ba4qcfv5hfsdb8u7qr0p73lj5.o new file mode 100644 index 00000000..27aac71b Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/ba4qcfv5hfsdb8u7qr0p73lj5.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/bhf5d1o9sb8naysz66lseia12.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/bhf5d1o9sb8naysz66lseia12.o new file mode 100644 index 00000000..164f9278 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/bhf5d1o9sb8naysz66lseia12.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/bj0h9d4wjm9bo16ukkou566ys.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/bj0h9d4wjm9bo16ukkou566ys.o new file mode 100644 index 00000000..3d0e99bb Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/bj0h9d4wjm9bo16ukkou566ys.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/bvwb1wtnbdpeqitx5cmy5lr3m.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/bvwb1wtnbdpeqitx5cmy5lr3m.o new file mode 100644 index 00000000..86b09ece Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/bvwb1wtnbdpeqitx5cmy5lr3m.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/c1jkpdm91bw2s9x172jc7215s.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/c1jkpdm91bw2s9x172jc7215s.o new file mode 100644 index 00000000..ba9c5e55 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/c1jkpdm91bw2s9x172jc7215s.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/cpugnprmji6p8dgoo5pbcr9zk.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/cpugnprmji6p8dgoo5pbcr9zk.o new file mode 100644 index 00000000..898b8aa5 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/cpugnprmji6p8dgoo5pbcr9zk.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/credh7qjr2vh4zbx0rulaegzj.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/credh7qjr2vh4zbx0rulaegzj.o new file mode 100644 index 00000000..78e8cdba Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/credh7qjr2vh4zbx0rulaegzj.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/ct6ki5zdvcwg8gzma7t76tec4.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/ct6ki5zdvcwg8gzma7t76tec4.o new file mode 100644 index 00000000..83716d12 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/ct6ki5zdvcwg8gzma7t76tec4.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/d300aep4nb7jf0p0r7hyl3kc7.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/d300aep4nb7jf0p0r7hyl3kc7.o new file mode 100644 index 00000000..fc7132ac Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/d300aep4nb7jf0p0r7hyl3kc7.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/dep-graph.bin b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/dep-graph.bin new file mode 100644 index 00000000..7ded86da Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/dep-graph.bin differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/dqfmiia5oy7pugiiutehpnbbv.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/dqfmiia5oy7pugiiutehpnbbv.o new file mode 100644 index 00000000..6caa53b7 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/dqfmiia5oy7pugiiutehpnbbv.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/dqz4wuqkcymitpr5mt8ftzvjj.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/dqz4wuqkcymitpr5mt8ftzvjj.o new file mode 100644 index 00000000..28f00667 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/dqz4wuqkcymitpr5mt8ftzvjj.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/e37s9qs0ucfrkk8urr3gajuuy.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/e37s9qs0ucfrkk8urr3gajuuy.o new file mode 100644 index 00000000..b513bc18 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/e37s9qs0ucfrkk8urr3gajuuy.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/e7sgm4lu0j2pepppvu20wkxu1.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/e7sgm4lu0j2pepppvu20wkxu1.o new file mode 100644 index 00000000..967c746a Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/e7sgm4lu0j2pepppvu20wkxu1.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/e7zphncf38idoiuhr2r29pmzk.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/e7zphncf38idoiuhr2r29pmzk.o new file mode 100644 index 00000000..824a4dc7 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/e7zphncf38idoiuhr2r29pmzk.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/ekuqabtvjw42egu5mlvy2cb55.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/ekuqabtvjw42egu5mlvy2cb55.o new file mode 100644 index 00000000..25bc09fb Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/ekuqabtvjw42egu5mlvy2cb55.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/encc40tb6dh3df5ss1zvoey26.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/encc40tb6dh3df5ss1zvoey26.o new file mode 100644 index 00000000..b88eba2e Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/encc40tb6dh3df5ss1zvoey26.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/eou22w1xmlfsqr806b385l4md.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/eou22w1xmlfsqr806b385l4md.o new file mode 100644 index 00000000..d45a076d Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/eou22w1xmlfsqr806b385l4md.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/f54omox1p5hy60cwju8oy0tbs.o b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/f54omox1p5hy60cwju8oy0tbs.o new file mode 100644 index 00000000..536b735c Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/f54omox1p5hy60cwju8oy0tbs.o differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/query-cache.bin b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/query-cache.bin new file mode 100644 index 00000000..3b237932 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/query-cache.bin differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/work-products.bin b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/work-products.bin new file mode 100644 index 00000000..1501790f Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2-ek28n9pyxsu0y5r79z3uw0qas/work-products.bin differ diff --git a/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2.lock b/target/debug/incremental/quicklendx_contracts-2deo5ibxt2icd/s-hh5sqehmfp-0ve2hg2.lock new file mode 100755 index 00000000..e69de29b diff --git a/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/0bh4wrcz9zy2elbplmztib3oj.o b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/0bh4wrcz9zy2elbplmztib3oj.o new file mode 100644 index 00000000..3b166ce6 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/0bh4wrcz9zy2elbplmztib3oj.o differ diff --git a/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/4k9ig3kp34pnbiaxdd09aireo.o b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/4k9ig3kp34pnbiaxdd09aireo.o new file mode 100644 index 00000000..44398639 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/4k9ig3kp34pnbiaxdd09aireo.o differ diff --git a/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/4ohngu32rmph0h566mq2yqf8r.o b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/4ohngu32rmph0h566mq2yqf8r.o new file mode 100644 index 00000000..cee9dd42 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/4ohngu32rmph0h566mq2yqf8r.o differ diff --git a/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/az8fvldhavpbvka7ipcwjwgti.o b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/az8fvldhavpbvka7ipcwjwgti.o new file mode 100644 index 00000000..35f8488d Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/az8fvldhavpbvka7ipcwjwgti.o differ diff --git a/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/c4swwv4317u4r855rb5elmc68.o b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/c4swwv4317u4r855rb5elmc68.o new file mode 100644 index 00000000..33ab2712 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/c4swwv4317u4r855rb5elmc68.o differ diff --git a/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/cek1mltt86viwiyxxehmut6s6.o b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/cek1mltt86viwiyxxehmut6s6.o new file mode 100644 index 00000000..3744ec15 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/cek1mltt86viwiyxxehmut6s6.o differ diff --git a/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/dep-graph.bin b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/dep-graph.bin new file mode 100644 index 00000000..7bfca017 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/dep-graph.bin differ diff --git a/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/e566f2ln17fiyg35f6y99qjud.o b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/e566f2ln17fiyg35f6y99qjud.o new file mode 100644 index 00000000..148c1339 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/e566f2ln17fiyg35f6y99qjud.o differ diff --git a/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/metadata.rmeta b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/metadata.rmeta new file mode 100644 index 00000000..da3ae412 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/metadata.rmeta differ diff --git a/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/query-cache.bin b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/query-cache.bin new file mode 100644 index 00000000..bd1cc768 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/query-cache.bin differ diff --git a/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/work-products.bin b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/work-products.bin new file mode 100644 index 00000000..bde97b11 Binary files /dev/null and b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60-3qrvbtvn0ynz65shlmmqv1r46/work-products.bin differ diff --git a/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60.lock b/target/debug/incremental/quicklendx_contracts-3hymfsvgzinax/s-hh5sqehmez-1ulkb60.lock new file mode 100755 index 00000000..e69de29b