COMPO · 7.02 · BLEED / INTENTIONAL EDGE EXIT

Bleed &
intentional
edge exit.

Explicit edge-exit policy layer поверх 7.00 BLEED_ZONE_SHELL: per-edge PROHIBIT/ALLOW/REQUIRE/IGNORE rules, trim touch/cross/outside relations, minimum outside depth, bleed-shell capacity and intentional crop/continuation bindings. Без implicit background rules, continuous edge-clearance ownership, role inference, repair или scoring.

ModuleCompo 7.02
Scopebleed / edge exit
Intentexplicit binding
Touch≠ crossing
Topic7 · EDGE ZONES
Next7.03

Bleed shell получает intent semantics

00 / module api

7.02 не создаёт outside-canvas band заново: он получает `BLEED_ZONE_SHELL` из 7.00 и проверяет explicit exit policy для конкретного content binding.

ZONE

7.00 BLEED_ZONE_SHELL.

INTENT

Explicit binding + per-edge rules.

OUTPUT

Trim relation + local compliance.

BLEED ZONE ≠ PERMISSION. Наличие красной полосы за canvas edge само по себе не позволяет ни одному объекту пересечь trim.

Правило задаётся отдельно для каждого edge

01 / BleedIntentPolicy

Один объект может, например, быть обязан уходить в bleed справа, но не иметь права пересекать верхнюю границу.

BleedIntentPolicy {
  policyRef,
  bleedZoneRef,
  trimBoundaryRef,

  edgeRules: {
    TOP:
      PROHIBIT_EXIT |
      ALLOW_EXIT |
      REQUIRE_EXIT |
      IGNORE_EDGE,

    RIGHT: ...,
    BOTTOM: ...,
    LEFT: ...
  },

  minimumOutsideDepthByEdge?,
  depthUnit?,
  normalizationContextRef?,

  outerLimitRule:
    IGNORE_BEYOND_SHELL |
    PROHIBIT_BEYOND_SHELL,

  missingGeometryPolicy,
  confidence,
  provenance
}

BleedIntentBinding

02 / explicit intent

7.02 не определяет intent из типа объекта. Причина выхода должна быть указана явно.

BleedIntentBinding {
  bindingRef,
  contentRef,

  intentSourceRef,

  intentKind:
    PRINT_BLEED |
    INTENTIONAL_CROP |
    BACKGROUND_CONTINUATION |
    DECORATIVE_EDGE_EXIT |
    CUSTOM,

  geometryMode:
    FULL_SUPPORT |
    BOUNDING_BOX |
    CUSTOM_REGION,

  geometryRef?,
  customRegionRef?,
  policyRef,

  confidence,
  provenance
}
NO AUTO-BACKGROUND RULE. Даже объект с semantic role `BACKGROUND` не получает `ALLOW_EXIT` или `REQUIRE_EXIT`, пока upstream owner явно не создал binding/policy.

Touch ≠ crossing

03 / TrimEdgeRelation

Для intentional crop/bleed критично наличие support по обе стороны trim boundary.

RelationMeaning
INSIDE_ONLYsupport остаётся со внутренней стороны edge
TOUCHING_TRIMsupport касается edge, но не выходит наружу
CROSSES_TRIMsupport существует и внутри, и снаружи edge
OUTSIDE_ONLYtested support целиком находится с внешней стороны edge
N_Ageometry не разрешена
REQUIRE_EXIT NEEDS CROSSING. `TOUCHING_TRIM` не считается bleed. `OUTSIDE_ONLY` тоже не считается корректным intentional crop данного объекта, потому что нет continuity через trim.

PROHIBIT / ALLOW / REQUIRE / IGNORE

04 / per-edge compliance

Compliance — hard local relation, а не aesthetic preference.

PROHIBIT

Inside/touch — SATISFIED. Any support outside — BREACHED.

ALLOW

Exit разрешён, но не обязателен.

REQUIRE

Нужен именно CROSSES_TRIM и, если задано, minimum depth.

IGNORE

Edge не участвует в compliance; result N/A.

Глубина выхода

05 / outside depth

Для каждого edge измеряется максимальное extension наружу от trim.

TOP: depth = max(0, trim.y0 - minY) RIGHT: depth = max(0, maxX - trim.x1) BOTTOM: depth = max(0, maxY - trim.y1) LEFT: depth = max(0, trim.x0 - minX)
OUTSIDE DEPTH ≠ EDGE CLEARANCE. Это 7.02 descriptor выхода за trim. Continuous object-to-edge clearance/tension внутри/около edge принадлежит 7.03.

Minimum outside depth — explicit

06 / minimum bleed

Если export/print policy требует минимальную глубину bleed, она становится hard parameter данного policy.

REQUIRE_EXIT at edge e: relation(e) must equal CROSSES_TRIM and if d_min(e) exists: outsideDepth(e) >= d_min(e)
NO DEFAULT 3 MM. 7.02 не имеет глобального значения «стандартного bleed». Любая глубина приходит из explicit print/platform/document policy.

Policy может быть геометрически невыполним

07 / bleed shell capacity

Declared bleed shell ограничивает область, которую вообще описывает текущий contract.

shellDepth(TOP) = trim.y0 - outer.y0 shellDepth(RIGHT) = outer.x1 - trim.x1 shellDepth(BOTTOM) = outer.y1 - trim.y1 shellDepth(LEFT) = trim.x0 - outer.x0 if: requiredMinDepth > shellDepth then: POLICY_ZONE_UNSATISFIABLE
UNSATISFIABLE ≠ CONTENT BREACH. Это конфликт между policy и zone geometry. Нельзя обвинять конкретный объект в невыполнимом требовании.

Beyond declared bleed shell

08 / outer limit

Объект может выходить дальше объявленного shell; реакция задаётся отдельным policy rule.

IGNORE_BEYOND_SHELL

Факт сохраняется как diagnostic. 7.02 не делает его breach.

PROHIBIT_BEYOND_SHELL

Любой outsideDepth больше shell depth → BREACHED.

EXPORT ADAPTER MAY CLIP LATER. 7.02 описывает relation/policy; он не выполняет raster/vector clipping самостоятельно.

Exact support и bbox не равны

09 / geometry modes

Reference runner использует bbox для детерминированных tests, но contract сохраняет evidence strength.

FULL_SUPPORT

Owner adapter поставляет exact/declared support relation.

BOUNDING_BOX

Быстрая conservative approximation для edge crossing.

CUSTOM_REGION

Owner-qualified per-edge relation/depth.

DON'T RE-OWN MASK/CROP GEOMETRY. Если line/mask/seam geometry приходит, например, из 2.22, 7.02 использует её как evidence и владеет только edge-intent compliance.

BleedIntentResult

10 / result schema

Один binding даёт четыре per-edge results плюс aggregate local compliance.

BleedIntentResult {
  resultRef,
  policyRef,
  bindingRef,
  contentRef,
  intentKind,

  edgeResults: {
    TOP: {
      edgeRule,
      trimRelation,
      outsideDepth,
      shellDepth,
      reachesMinimumDepth,
      beyondDeclaredBleedShell,
      complianceStatus
    },
    ...
  },

  complianceStatus:
    SATISFIED |
    BREACHED |
    PARTIAL |
    N_A |
    INVALID,

  approximation,
  confidence,
  provenance
}

Safe и bleed policy не сливаются

11 / policy conflicts

Один и тот же contentRef теоретически может оказаться в противоречивых upstream policy sets.

Example conflict: 7.01: content X must remain inside hard safe zone 7.02: same content X must cross RIGHT trim edge 7.02 response: preserve both evidence chains emit policy-conflict diagnostic do NOT silently pick a winner 7.06 / upstream policy owner: resolves or reports conflict

Оставляем следующие модули следующими

12 / ownership firewall

Intentional edge exit не должен разрастись до универсального edge engine.

QuestionOwner
Где находится bleed shell?7.00
Protected content обязан быть внутри safe?7.01
Можно/нужно ли пересечь trim и насколько?7.02
Какой реальный clearance/tension до edge?7.03
Какие роли получают какие edge rules?7.04
Как platform overlay меняет usable edges?7.05
Violation / repair / score?7.06

Visual Lab

13 / visual lab

Показываем разницу между touch, crossing и required depth.

A · TOUCH ONLY TOUCHING_TRIM REQUIRE_EXIT → BREACHED B · CROSSES TRIM CROSSES_TRIM depth = 30 C · TOO DEEP beyond declared shell policy decides reaction bleed shell existence != permission to exit touch != cross · outside-only != continuous intentional crop no global default bleed depth: minimum comes from explicit policy bbox is approximation · exact support stays owner-qualified repair / severity / score remain 7.06

Bleed/edge-exit regression

14 / deterministic tests

Проверяем touch≠cross, per-edge rules, minimum depth, shell capacity, beyond-shell policy, missing geometry, deterministic sets и ownership barriers.

Tests not run yet.

DATA FOR LAYOUT ENGINE

15 / machine contract

Machine-readable 7.02 contract.

{
  "module": "Compo 7.02",
  "name": "bleed_and_intentional_edge_exit",
  "version": "1.1-final",
  "canonical_main_title": "Bleed и intentional edge exit",
  "topic": "07_ПОЛЯ_SAFE_ZONES_И_BLEED",
  "scope": "BLEED_INTENT_BINDING_TRIM_EDGE_CROSSING_OUTSIDE_DEPTH_AND_EXIT_POLICY_COMPLIANCE",
  "consumes": [
    "Compo7.00.BleedZoneShell / EdgeZoneGeometryResult with zoneKind=BLEED_ZONE_SHELL and relationToCanvas=OUTSET_BAND",
    "Compo6.00.CanvasDomainBoundary or explicit TrimBoundaryRef adapter",
    "explicit BleedIntentBinding[] from role/style/document/content owner",
    "owner-qualified content support geometry",
    "optional Compo6.03 CanvasNormalizationContext for SHORT_N policy depths",
    "optional crop/mask/seam evidence from owner-qualified geometry modules such as Compo2.22 without re-owning their line/mask semantics"
  ],
  "provides": [
    "BleedIntentPolicy",
    "BleedIntentBinding",
    "TrimEdgeRelation",
    "BleedDepthEvidence",
    "BleedIntentResult",
    "BleedEvaluationSet",
    "BleedPolicyDiagnostic[]",
    "bleedPolicyRef for Compo7.00 BleedZoneShell",
    "bleedEvidenceRef for downstream Compo7.06"
  ],
  "owns_metrics": [],
  "descriptors_only": [
    "edge.bleed.policyRef",
    "edge.bleed.bindingRef",
    "edge.bleed.contentRef",
    "edge.bleed.intentKind",
    "edge.bleed.edgeRule",
    "edge.bleed.trimRelation",
    "edge.bleed.outsideDepth",
    "edge.bleed.reachesMinimumDepth",
    "edge.bleed.beyondDeclaredBleedShell",
    "edge.bleed.complianceStatus",
    "edge.bleed.status",
    "edge.bleed.confidence"
  ],
  "trim_boundary_contract": {
    "baseline": "Compo6.00 full-canvas boundary acts as the trim-like boundary for baseline 7.00 OUTSET_BAND geometry",
    "custom_trim": "if production/export trim differs from the canvas boundary, an explicit TrimBoundaryRef/adapter is required",
    "coordinateFrame": "CANVAS_TOP_LEFT_Y_DOWN",
    "edges": {
      "TOP": "y=trim.y0",
      "RIGHT": "x=trim.x1",
      "BOTTOM": "y=trim.y1",
      "LEFT": "x=trim.x0"
    },
    "important": "7.02 must not infer a print trim boundary from raster size, bleed shell size or content bounds"
  },
  "bleed_intent_policy_schema": {
    "policyRef": "stable ref",
    "bleedZoneRef": "must point to a 7.00 BLEED_ZONE_SHELL",
    "trimBoundaryRef": "explicit trim/canvas-boundary ref",
    "edgeRules": {
      "TOP": "PROHIBIT_EXIT|ALLOW_EXIT|REQUIRE_EXIT|IGNORE_EDGE",
      "RIGHT": "same",
      "BOTTOM": "same",
      "LEFT": "same"
    },
    "minimumOutsideDepthByEdge": "optional EdgeOffsetSet-like nonnegative values; only meaningful for REQUIRE_EXIT",
    "depthUnit": "PX|CANVAS_UNIT|MM|SHORT_N when any minimum depth is declared",
    "normalizationContextRef": "required for SHORT_N depth",
    "outerLimitRule": "IGNORE_BEYOND_SHELL|PROHIBIT_BEYOND_SHELL",
    "missingGeometryPolicy": "N_A|INVALID",
    "confidence": "0..1",
    "provenance": "STANDARD|EMPIRICAL|INITIAL_HEURISTIC|IMPLEMENTATION_HEURISTIC|STYLE_PRESET"
  },
  "bleed_intent_binding_schema": {
    "bindingRef": "stable ref",
    "contentRef": "owner-qualified content/object ref",
    "intentSourceRef": "explicit source explaining why edge exit is allowed/required/prohibited",
    "intentKind": "PRINT_BLEED|INTENTIONAL_CROP|BACKGROUND_CONTINUATION|DECORATIVE_EDGE_EXIT|CUSTOM",
    "geometryMode": "FULL_SUPPORT|BOUNDING_BOX|CUSTOM_REGION",
    "geometryRef": "required for FULL_SUPPORT/BOUNDING_BOX",
    "customRegionRef": "required for CUSTOM_REGION",
    "policyRef": "BleedIntentPolicy ref",
    "confidence": "0..1",
    "provenance": "object",
    "no_implicit_intent": "background/image/decorative names never auto-authorize exit"
  },
  "trim_edge_relation_schema": {
    "INSIDE_ONLY": "tested geometry remains on the inside side of the trim edge",
    "TOUCHING_TRIM": "geometry touches trim edge but does not have support beyond it",
    "CROSSES_TRIM": "geometry has support on both inside and outside sides of the trim edge",
    "OUTSIDE_ONLY": "tested geometry lies entirely outside that trim edge",
    "N_A": "geometry unresolved"
  },
  "per_edge_compliance": {
    "PROHIBIT_EXIT": {
      "SATISFIED": [
        "INSIDE_ONLY",
        "TOUCHING_TRIM"
      ],
      "BREACHED": [
        "CROSSES_TRIM",
        "OUTSIDE_ONLY"
      ]
    },
    "ALLOW_EXIT": {
      "SATISFIED": [
        "INSIDE_ONLY",
        "TOUCHING_TRIM",
        "CROSSES_TRIM",
        "OUTSIDE_ONLY"
      ],
      "note": "permission is permissive, not a requirement"
    },
    "REQUIRE_EXIT": {
      "SATISFIED": "CROSSES_TRIM and outsideDepth >= explicit minimum depth if one exists",
      "BREACHED": "INSIDE_ONLY, TOUCHING_TRIM, OUTSIDE_ONLY, or insufficient depth"
    },
    "IGNORE_EDGE": "N_A"
  },
  "outside_depth_semantics": {
    "TOP": "max(0, trim.y0 - geometry.minY)",
    "RIGHT": "max(0, geometry.maxX - trim.x1)",
    "BOTTOM": "max(0, geometry.maxY - trim.y1)",
    "LEFT": "max(0, trim.x0 - geometry.minX)",
    "meaning": "maximum tested support extension beyond one trim edge",
    "important": "outsideDepth is a 7.02 bleed relation descriptor, not the 7.03 inside-edge clearance/tension metric"
  },
  "bleed_shell_depth_semantics": {
    "TOP": "trim.y0 - bleedOuterRect.y0",
    "RIGHT": "bleedOuterRect.x1 - trim.x1",
    "BOTTOM": "bleedOuterRect.y1 - trim.y1",
    "LEFT": "trim.x0 - bleedOuterRect.x0",
    "unsatisfiable_rule": "REQUIRE_EXIT minimum depth > declared shell depth => POLICY_ZONE_UNSATISFIABLE",
    "beyond_shell": "outsideDepth > declared shell depth",
    "outer_limit_rule": "beyond-shell is diagnostic under IGNORE_BEYOND_SHELL and BREACHED under PROHIBIT_BEYOND_SHELL"
  },
  "geometry_modes": {
    "FULL_SUPPORT": "owner supplies exact/declared support extrema or edge-relation evidence; baseline rect runtime requires extrema, not a generic bbox; approximation=false",
    "BOUNDING_BOX": "reference implementation uses bbox; approximation=true and bbox is never silently promoted to FULL_SUPPORT",
    "CUSTOM_REGION": "owner adapter provides per-edge relation/depth evidence",
    "important": "7.02 does not derive image alpha masks, line crop seams or path support itself"
  },
  "intent_kind_semantics": {
    "PRINT_BLEED": "explicit print/export bleed intent",
    "INTENTIONAL_CROP": "object is intentionally clipped by trim/canvas edge",
    "BACKGROUND_CONTINUATION": "background/support intentionally continues beyond one or more trim edges",
    "DECORATIVE_EDGE_EXIT": "decorative/support element intentionally exits the frame",
    "CUSTOM": "owner-defined intent with explicit policy source",
    "no_quality_order": "intent kinds are categorical descriptors, not ranked styles"
  },
  "ownership_map": {
    "7.00": "BLEED_ZONE_SHELL geometry and outside-canvas band",
    "7.01": "hard safe containment for explicitly protected semantic content",
    "7.02": "explicit exit permission/requirement, trim-crossing relation, bleed outside-depth and shell reach",
    "7.03": "continuous object-to-edge clearance and edge tension",
    "7.04": "role-dependent generation of edge-exit policies/bindings",
    "7.05": "platform overlays/dynamic safe zones",
    "7.06": "Violation objects, repair requests, target-aware scoring and consolidated Topic7 regression"
  },
  "semantic_firewalls": {
    "touch_vs_cross": "TOUCHING_TRIM is not CROSSES_TRIM",
    "bleed_shell_vs_permission": "existence of a bleed shell does not authorize crossing",
    "exit_permission_vs_role": "7.02 evaluates explicit policy; 7.04 decides role-dependent policy generation",
    "bleed_depth_vs_edge_clearance": "outsideDepth measures extension outside trim; 7.03 clearance measures relation to an edge/zone from object geometry",
    "crop_semantics_vs_line_mask": "Compo2.22 may own a line/mask/seam geometry mechanism; 7.02 only owns whether the resulting content crossing is intended/permitted under edge policy",
    "breach_vs_violation": "BREACHED is local compliance evidence; canonical violation aggregation remains 7.06"
  },
  "metric_policy": {
    "trim_relation": "descriptor only",
    "outside_depth": "constraint/compliance descriptor only",
    "direct_scoring": "FORBIDDEN in 7.02",
    "more_bleed_is_better": "FORBIDDEN",
    "deeper_exit_is_better": "FORBIDDEN",
    "cropped_object_is_more_dynamic": "FORBIDDEN"
  },
  "hard_constraints": [
    "7.02 owns bleed/intentional-edge-exit policy and local trim-crossing relation evidence only; no design-quality score.",
    "Only explicit BleedIntentBinding may authorize or require an edge exit; object role/name/appearance never implies permission.",
    "A touch of the trim boundary is not a crossing.",
    "REQUIRE_EXIT needs support on both sides of the target trim edge.",
    "PROHIBIT_EXIT is breached by support beyond the target trim edge even if the object also remains inside.",
    "ALLOW_EXIT permits crossing but does not require it.",
    "IGNORE_EDGE produces N_A for that edge and no compliance vote.",
    "Minimum outside depth, when declared, is a hard policy parameter and must use a compatible metric unit.",
    "A required minimum depth larger than the declared bleed-shell depth is an unsatisfiable policy/zone configuration, not a content-layout breach.",
    "Bounding-box evidence is an approximation and must not be silently relabeled as exact painted-support evidence.",
    "Bleed-shell geometry does not itself grant exit permission.",
    "Safe-zone protection from 7.01 and bleed intent from 7.02 are separate policies; conflicts are not silently resolved here.",
    "7.02 does not own continuous inside-edge clearance or edge tension; 7.03 owns those metrics.",
    "7.02 does not author role-dependent exit rules; 7.04 owns role policy.",
    "7.02 does not own dynamic platform overlay lifecycle; 7.05 owns it.",
    "7.02 does not construct canonical Violation/repair/score objects; 7.06 owns them.",
    "N/A != 0.",
    "No beautyScore."
  ],
  "hard_rules": [
    "7.02 owns bleed/intentional-edge-exit policy and local trim-crossing relation evidence only; no design-quality score.",
    "Only explicit BleedIntentBinding may authorize or require an edge exit; object role/name/appearance never implies permission.",
    "A touch of the trim boundary is not a crossing.",
    "REQUIRE_EXIT needs support on both sides of the target trim edge.",
    "PROHIBIT_EXIT is breached by support beyond the target trim edge even if the object also remains inside.",
    "ALLOW_EXIT permits crossing but does not require it.",
    "IGNORE_EDGE produces N_A for that edge and no compliance vote.",
    "Minimum outside depth, when declared, is a hard policy parameter and must use a compatible metric unit.",
    "A required minimum depth larger than the declared bleed-shell depth is an unsatisfiable policy/zone configuration, not a content-layout breach.",
    "Bounding-box evidence is an approximation and must not be silently relabeled as exact painted-support evidence.",
    "Bleed-shell geometry does not itself grant exit permission.",
    "Safe-zone protection from 7.01 and bleed intent from 7.02 are separate policies; conflicts are not silently resolved here.",
    "7.02 does not own continuous inside-edge clearance or edge tension; 7.03 owns those metrics.",
    "7.02 does not author role-dependent exit rules; 7.04 owns role policy.",
    "7.02 does not own dynamic platform overlay lifecycle; 7.05 owns it.",
    "7.02 does not construct canonical Violation/repair/score objects; 7.06 owns them.",
    "N/A != 0.",
    "No beautyScore."
  ],
  "soft_constraints": [],
  "preferences": [],
  "overrides_allowed_by": [
    "explicit higher-level document/platform export policy may replace one BleedIntentPolicy with another version",
    "no module may silently override a per-edge rule inside the same policy instance"
  ],
  "initial_heuristics": {
    "numeric_epsilon": {
      "value": 1e-12,
      "provenance": "IMPLEMENTATION_HEURISTIC",
      "note": "reference numerical equality only; does not turn touch into crossing"
    }
  },
  "correction_policy": {
    "foreign_content_mutation": "FORBIDDEN",
    "missing_bleed_shell": "route to Compo7.00/source owner",
    "missing_intent_binding": "request explicit role/style/document owner binding; do not infer",
    "safe_vs_bleed_policy_conflict": "route evidence to Compo7.06 or upstream policy owner; do not resolve silently",
    "continuous_edge_clearance_question": "route to Compo7.03",
    "role_dependent_exit_question": "route to Compo7.04",
    "dynamic_platform_edge_question": "route to Compo7.05",
    "breach_repair_or_scoring": "route to Compo7.06"
  },
  "deferred_inputs": [
    "Compo7.03 edge clearance/tension",
    "Compo7.04 role-dependent edge-exit policy generation",
    "Compo7.05 platform/dynamic safe geometry",
    "Compo7.06 violations/repair/scoring/tests",
    "future export/print owner adapters for non-canvas trim boundaries"
  ],
  "recompute_when": [
    "7.00 bleed-shell geometry changes",
    "trim boundary changes",
    "BleedIntentPolicy changes",
    "BleedIntentBinding membership/version changes",
    "content support/bbox/custom geometry changes",
    "6.03 normalization context changes for SHORT_N minimum depth"
  ],
  "tests": [
    "touch != cross",
    "require exit",
    "allow exit",
    "prohibit exit",
    "minimum depth",
    "unsatisfiable policy/zone",
    "beyond shell",
    "bbox approximation",
    "missing geometry",
    "deterministic set",
    "no role/scoring/repair leakage"
  ],
  "finality": "BLEED_INTENT_TRIM_CROSSING_AND_EXIT_COMPLIANCE_ONLY",
  "style_preset_values": []
}
ARCHITECTURE CHECKPOINT · 7.02 OWNS EXPLICIT BLEED/EDGE-EXIT INTENT, TRIM-CROSSING RELATION, OUTSIDE DEPTH AND LOCAL COMPLIANCE ONLY — NO DESIGN SCORE. BLEED_ZONE_SHELL DOES NOT GRANT PERMISSION. TOUCHING_TRIM != CROSSES_TRIM; REQUIRE_EXIT NEEDS SUPPORT ON BOTH SIDES OF TRIM. MINIMUM DEPTH HAS NO GLOBAL DEFAULT AND MAY NOT EXCEED DECLARED SHELL WITHOUT AN UNSATISFIABLE POLICY DIAGNOSTIC. BBOX IS APPROXIMATION. 7.03 OWNS CONTINUOUS CLEARANCE/TENSION, 7.04 ROLE POLICY, 7.05 PLATFORM OVERLAYS, 7.06 VIOLATIONS/REPAIR/SCORING. LINE/MASK/CROP GEOMETRY MAY BE CONSUMED OWNER-QUALIFIED WITHOUT RE-OWNERSHIP. NO BEAUTYSCORE.
VISITS / ...