     return self
   }
 }
-
-private extension NSLayoutConstraint {
-  /**
-   Checks if the constraint is equal to given constraint.
-   - Parameter _ other: An NSLayoutConstraint.
-   - Returns: A Bool indicating whether constraints are equal.
-   */
-  func equalTo(_ other: NSLayoutConstraint) -> Bool {
-    return firstItem === other.firstItem
-      && secondItem === other.secondItem
-      && firstAttribute == other.firstAttribute
-      && secondAttribute == other.secondAttribute
-  }
-}
-
-/// A memory reference to the lastConstraint of UIView.
-private var LastConstraintKey: UInt8 = 0
-
-private extension UIView {
-  /**
-   The last consntraint that's created by Layout system.
-   Used to set multiplier/priority on the last constraint.
-   */
-  var lastConstraint: NSLayoutConstraint? {
-    get {
-      return AssociatedObject.get(base: self, key: &LastConstraintKey) {
-        nil
-      }
-    }
-    set(value) {
-      AssociatedObject.set(base: self, key: &LastConstraintKey, value: value)
-    }
-  }
-}

  @discardableResult
  func edges(_ anchor: LayoutAnchorable, top: CGFloat = 0, left: CGFloat = 0, bottom: CGFloat = 0, right: CGFloat = 0) -> Layout {
    return constraint(.edges, to: anchor, constants: top, left, -bottom, -right)
  }
}


  }
}

private extension NSLayoutConstraint {
  /**
   Checks if the constraint is equal to given constraint.
   - Parameter _ other: An NSLayoutConstraint.
   - Returns: A Bool indicating whether constraints are equal.
   */
  func equalTo(_ other: NSLayoutConstraint) -> Bool {
    return firstItem === other.firstItem
      && secondItem === other.secondItem
      && firstAttribute == other.firstAttribute
      && secondAttribute == other.secondAttribute
  }
}

/// A memory reference to the lastConstraint of UIView.
private var LastConstraintKey: UInt8 = 0

private extension UIView {
  /**
   The last consntraint that's created by Layout system.
   Used to set multiplier/priority on the last constraint.
   */
  var lastConstraint: NSLayoutConstraint? {
    get {
      return AssociatedObject.get(base: self, key: &LastConstraintKey) {
        nil
      }
    }
    set(value) {
      AssociatedObject.set(base: self, key: &LastConstraintKey, value: value)
    }
  }
}

public struct Layout {
  /// A weak reference to the constraintable.
  public weak var constraintable: Constraintable?
