mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 10:33:45 +00:00
Prefire multiple devices (#2543)
* Update Prefire, setup multiple snapshot devices and languages Squashed commits: [28cb4ae6d] Switch to macos-14, iOS 17 and the iPhone 15 simulator [080fc82cb] Update snapshots [c874ca9c7] Bump Compound and Prefire, reduce perceptual precission to 0.98 [a59b8a54c] Update snapshots after adding iPad and pseudolanguage snapshotting [f30cc3277] Setup multi-language snapshotting [aeb11c7e7] Update prefire template, setup multiple snapshot devices * Update ruby dependencies and fastlane plugins * Bump Compound, switch back to the original prefire - version 2.0.4 * Remove preview test simulator version specifiers
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
test_configuration:
|
||||
- template_file_path: PreviewTests.stencil
|
||||
- simulator_device: "iPhone15,2"
|
||||
- required_os: 17
|
||||
- snapshot_devices:
|
||||
- iPhone 15
|
||||
- iPad
|
||||
@@ -0,0 +1,276 @@
|
||||
// swiftlint:disable all
|
||||
// swiftformat:disable all
|
||||
|
||||
import XCTest
|
||||
import SwiftUI
|
||||
import Prefire
|
||||
@testable import SnapshotTesting
|
||||
#if canImport(AccessibilitySnapshot)
|
||||
import AccessibilitySnapshot
|
||||
#endif
|
||||
{% if argument.mainTarget %}
|
||||
@testable import {{ argument.mainTarget }}
|
||||
{% endif %}
|
||||
{% for import in argument.imports %}
|
||||
{% if import != "last" %}
|
||||
import {{ import }}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% for import in argument.testableImports %}
|
||||
{% if import != "last" %}
|
||||
@testable import {{ import }}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
class PreviewTests: XCTestCase {
|
||||
private let deviceConfig: ViewImageConfig = .iPhoneX
|
||||
private var simulatorDevice: String?{% if argument.simulatorDevice %} = "{{ argument.simulatorDevice|default:nil }}"{% endif %}
|
||||
private var requiredOSVersion: Int?{% if argument.simulatorOSVersion %} = {{ argument.simulatorOSVersion }}{% endif %}
|
||||
private let snapshotDevices: [String]{% if argument.snapshotDevices %} = {{ argument.snapshotDevices|split:"|" }}{% else %} = []{% endif %}
|
||||
|
||||
|
||||
{% if argument.file %}
|
||||
|
||||
private var file: StaticString { .init(stringLiteral: "{{ argument.file }}") }
|
||||
{% endif %}
|
||||
|
||||
override func setUp() {
|
||||
super.setUp()
|
||||
|
||||
checkEnvironments()
|
||||
UIView.setAnimationsEnabled(false)
|
||||
}
|
||||
|
||||
// MARK: - PreviewProvider
|
||||
|
||||
{% for type in types.types where (type.implements.PrefireProvider or type.based.PrefireProvider or type|annotated:"PrefireProvider") and type.name != "TestablePreview" %}
|
||||
func test_{{ type.name|lowerFirstLetter|replace:"_Previews", "" }}() {
|
||||
for preview in {{ type.name }}._allPreviews {
|
||||
assertSnapshots(matching: preview)
|
||||
}
|
||||
}
|
||||
{%- if not forloop.last %}
|
||||
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% if argument.previewsMacros %}
|
||||
// MARK: - Macros
|
||||
|
||||
{{ argument.previewsMacros }}
|
||||
{% endif %}
|
||||
// MARK: Private
|
||||
|
||||
private func assertSnapshots(matching preview: _Preview, testName: String = #function) {
|
||||
guard !snapshotDevices.isEmpty else {
|
||||
if let failure = assertSnapshots(matching: AnyView(preview.content),
|
||||
name: preview.displayName,
|
||||
isScreen: preview.layout == .device,
|
||||
device: preview.device?.snapshotDevice() ?? deviceConfig,
|
||||
testName: testName) {
|
||||
XCTFail(failure)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
for deviceName in snapshotDevices {
|
||||
guard var device = PreviewDevice(rawValue: deviceName).snapshotDevice() else {
|
||||
fatalError("Unknown device name: \(deviceName)")
|
||||
}
|
||||
|
||||
// Ignore specific device safe area
|
||||
device.safeArea = .zero
|
||||
|
||||
// Ignore specific device display scale
|
||||
let traits = UITraitCollection(displayScale: 2.0)
|
||||
|
||||
if let failure = assertSnapshots(matching: AnyView(preview.content),
|
||||
name: preview.displayName,
|
||||
isScreen: preview.layout == .device,
|
||||
device: device,
|
||||
testName: testName + deviceName + "-" + localeCode,
|
||||
traits: traits) {
|
||||
XCTFail(failure)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private var localeCode: String {
|
||||
if UserDefaults.standard.bool(forKey: "NSDoubleLocalizedStrings") {
|
||||
return "pseudo"
|
||||
}
|
||||
return languageCode + "-" + regionCode
|
||||
}
|
||||
|
||||
private var languageCode: String {
|
||||
Locale.current.language.languageCode?.identifier ?? ""
|
||||
}
|
||||
|
||||
private var regionCode: String {
|
||||
Locale.current.language.region?.identifier ?? ""
|
||||
}
|
||||
|
||||
private func assertSnapshots(matching view: AnyView,
|
||||
name: String?, isScreen: Bool,
|
||||
device: ViewImageConfig,
|
||||
testName: String = #function,
|
||||
traits: UITraitCollection = .init()) -> String? {
|
||||
var delay: TimeInterval = 0
|
||||
var precision: Float = 1
|
||||
var perceptualPrecision: Float = 1
|
||||
|
||||
let view = view
|
||||
.onPreferenceChange(DelayPreferenceKey.self) { delay = $0 }
|
||||
.onPreferenceChange(PrecisionPreferenceKey.self) { precision = $0 }
|
||||
.onPreferenceChange(PerceptualPrecisionPreferenceKey.self) { perceptualPrecision = $0 }
|
||||
|
||||
let matchingView = isScreen ? AnyView(view) : AnyView(view
|
||||
.frame(width: device.size?.width)
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
)
|
||||
|
||||
let failure = verifySnapshot(
|
||||
of: matchingView,
|
||||
as: .prefireImage(precision: { precision },
|
||||
perceptualPrecision: { perceptualPrecision },
|
||||
duration: { delay },
|
||||
layout: isScreen ? .device(config: device) : .sizeThatFits,
|
||||
traits: traits),
|
||||
named: name{% if argument.file %},
|
||||
file: file{% endif %},
|
||||
testName: testName
|
||||
)
|
||||
|
||||
#if canImport(AccessibilitySnapshot)
|
||||
let vc = UIHostingController(rootView: matchingView)
|
||||
vc.view.frame = UIScreen.main.bounds
|
||||
assertSnapshot(
|
||||
matching: vc,
|
||||
as: .wait(for: delay, on: .accessibilityImage(showActivationPoints: .always)),
|
||||
named: name.flatMap { $0 + ".accessibility" }{% if argument.file %},
|
||||
file: file{% endif %},
|
||||
testName: testName
|
||||
)
|
||||
#endif
|
||||
return failure
|
||||
}
|
||||
|
||||
/// Check environments to avoid problems with snapshots on different devices or OS.
|
||||
private func checkEnvironments() {
|
||||
if let simulatorDevice {
|
||||
let deviceModel = ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"]
|
||||
guard deviceModel?.contains(simulatorDevice) ?? false else {
|
||||
fatalError("Switch to using \(simulatorDevice) for these tests.")
|
||||
}
|
||||
}
|
||||
|
||||
if let requiredOSVersion {
|
||||
let osVersion = ProcessInfo().operatingSystemVersion
|
||||
guard osVersion.majorVersion == requiredOSVersion else {
|
||||
fatalError("Switch to iOS \(requiredOSVersion) for these tests.")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - SnapshotTesting + Extensions
|
||||
|
||||
private extension PreviewDevice {
|
||||
func snapshotDevice() -> ViewImageConfig? {
|
||||
switch rawValue {
|
||||
case "iPhone 15", "iPhone 14", "iPhone 13", "iPhone 12", "iPhone 11", "iPhone 10":
|
||||
return .iPhoneX
|
||||
case "iPhone 6", "iPhone 6s", "iPhone 7", "iPhone 8":
|
||||
return .iPhone8
|
||||
case "iPhone 6 Plus", "iPhone 6s Plus", "iPhone 8 Plus":
|
||||
return .iPhone8Plus
|
||||
case "iPhone SE (1st generation)", "iPhone SE (2nd generation)":
|
||||
return .iPhoneSe
|
||||
case "iPad":
|
||||
return .iPad10_2
|
||||
case "iPad Mini":
|
||||
return .iPadMini
|
||||
case "iPad Pro 11":
|
||||
return .iPadPro11
|
||||
case "iPad Pro 12.9":
|
||||
return .iPadPro12_9
|
||||
default: return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private extension Snapshotting where Value: SwiftUI.View, Format == UIImage {
|
||||
static func prefireImage(
|
||||
drawHierarchyInKeyWindow: Bool = false,
|
||||
precision: @escaping () -> Float,
|
||||
perceptualPrecision: @escaping () -> Float,
|
||||
duration: @escaping () -> TimeInterval,
|
||||
layout: SwiftUISnapshotLayout = .sizeThatFits,
|
||||
traits: UITraitCollection = .init()
|
||||
) -> Snapshotting {
|
||||
let config: ViewImageConfig
|
||||
|
||||
switch layout {
|
||||
#if os(iOS) || os(tvOS)
|
||||
case let .device(config: deviceConfig):
|
||||
config = deviceConfig
|
||||
#endif
|
||||
case .sizeThatFits:
|
||||
config = .init(safeArea: .zero, size: nil, traits: traits)
|
||||
case let .fixed(width: width, height: height):
|
||||
let size = CGSize(width: width, height: height)
|
||||
config = .init(safeArea: .zero, size: size, traits: traits)
|
||||
}
|
||||
|
||||
return SimplySnapshotting<UIImage>(pathExtension: "png", diffing: .prefireImage(precision: precision, perceptualPrecision: perceptualPrecision, scale: traits.displayScale))
|
||||
.asyncPullback { view in
|
||||
var config = config
|
||||
|
||||
let controller: UIViewController
|
||||
|
||||
if config.size != nil {
|
||||
controller = UIHostingController(rootView: view)
|
||||
} else {
|
||||
let hostingController = UIHostingController(rootView: view)
|
||||
|
||||
let maxSize = CGSize.zero
|
||||
config.size = hostingController.sizeThatFits(in: maxSize)
|
||||
|
||||
controller = hostingController
|
||||
}
|
||||
|
||||
return Async<UIImage> { callback in
|
||||
let strategy = snapshotView(
|
||||
config: config,
|
||||
drawHierarchyInKeyWindow: drawHierarchyInKeyWindow,
|
||||
traits: traits,
|
||||
view: controller.view,
|
||||
viewController: controller
|
||||
)
|
||||
|
||||
let duration = duration()
|
||||
if duration != .zero {
|
||||
let expectation = XCTestExpectation(description: "Wait")
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + duration) {
|
||||
expectation.fulfill()
|
||||
}
|
||||
_ = XCTWaiter.wait(for: [expectation], timeout: duration + 1)
|
||||
}
|
||||
strategy.run(callback)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private extension Diffing where Value == UIImage {
|
||||
static func prefireImage(precision: @escaping () -> Float, perceptualPrecision: @escaping () -> Float, scale: CGFloat?) -> Diffing {
|
||||
lazy var originalDiffing = Diffing.image(precision: precision(), perceptualPrecision: 0.98, scale: scale)
|
||||
return Diffing(
|
||||
toData: { originalDiffing.toData($0) },
|
||||
fromData: { originalDiffing.fromData($0) },
|
||||
diff: { originalDiffing.diff($0, $1) }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// swiftlint:enable all
|
||||
// swiftformat:enable all
|
||||
@@ -2,9 +2,26 @@
|
||||
"configurations" : [
|
||||
{
|
||||
"id" : "D789E5F1-30B8-4A23-B20E-281ACE05CFD6",
|
||||
"name" : "Default",
|
||||
"name" : "English",
|
||||
"options" : {
|
||||
|
||||
"language" : "en",
|
||||
"locationScenario" : {
|
||||
"identifier" : "London, England",
|
||||
"referenceType" : "built-in"
|
||||
},
|
||||
"region" : "GB"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id" : "059C4F1C-EAB6-4D96-BA8F-30DF92A365E9",
|
||||
"name" : "Pseudolanguage",
|
||||
"options" : {
|
||||
"language" : "IDELaunchSchemeLanguageDoubleLocalizedStrings",
|
||||
"locationScenario" : {
|
||||
"identifier" : "London, England",
|
||||
"referenceType" : "built-in"
|
||||
},
|
||||
"region" : "DE"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c7eca90ff3c9a34106fa556be1a0b865695e30b3753bd7add22e686d9ea258c6
|
||||
size 167818
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2fb30d84c0853cbab1341218d256e42c64d3f9388e9b51fe572c1cf3d44e4270
|
||||
size 235706
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:022549154cb0f9a9d6d828b592251e787d04b871f01c05f0133b8bda66a7e4c0
|
||||
size 114860
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a12aa0931a0e8428e1db8f70c79fb84af1e5aa5ff0c14d3553154f5e7b6ee56c
|
||||
size 182408
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c374de7541c3218ed8988adc086265a0c1e4cf7fe73461068ef79356c0bfaae0
|
||||
size 138506
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:70fcd44d149c0c7633fe2bee0ba85f3ae81d1fedd801a66239f0d1307909a430
|
||||
size 173623
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5eb23616fd2661ac5a2990e0dfef92c504da2726db2138222b88fba79fcd7500
|
||||
size 267411
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9be44c03d825f3650984e0cfd0540915913f896951acd0d39991f9843371c111
|
||||
size 122394
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:28cffcec20c859af14d5e018c63da99c3014375d56ffd30751c15846f823f031
|
||||
size 200260
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:dadb1c1c336e0a8a74218bfc0b8d2b6d5e82e02b78489dd7c269ca7be53842db
|
||||
size 142673
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:00901d81bcf6162af7818cac12604d49d47d700ae98fe9f263aec7d8664c7d96
|
||||
size 149648
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b431c7382f2bd6169445dd6eb57985e81b052c296333b99ec90f9b4bc2cc7a92
|
||||
size 184609
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:25ec6698fbca73ff83f88300ed333a050aef317f388ce71fc6476596c123853d
|
||||
size 104872
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d117add9e8bf7b4400f03dd33bb0171917f6046e4c296bc5e122b92de64e84aa
|
||||
size 139693
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0ff828f5d649ccf1a46d0b7a126eea8d4754f997e8e30bffc6163c9d90aab62c
|
||||
size 127416
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:bfa36c329639b7bd53482c4066a37743160839bd9a4debe3de9cfdb80883e961
|
||||
size 115021
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:95ea5891cadd570a9dfd69fd1ff1282f3b91c688f63b7e78443b76ecc27109e4
|
||||
size 152680
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b6c0168a64d2438a4a11c031845dd70401758c91b507617a8960eba73fa4efd8
|
||||
size 68382
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b1ea1685762aa0e0f05b5c974a069e3747aba7469c83b0ab754a1f69193e6418
|
||||
size 98385
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:85b985d45867e305258e43cf7181d74d5be39258d68f3484731e4c2bdc3ea2da
|
||||
size 93646
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:86e1421b4be07786d755bd195b59f2175d8694a45a9c575d47cbd600b606a09e
|
||||
size 135685
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5f7e77738f7863830162825f0eb3b5c12edb20700820c2897aba02608aad391e
|
||||
size 166823
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ae2dcb5510d49106cfdfa8a9edb46e885d343f83b73dc5b8a088a26a99738335
|
||||
size 91052
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:79a196f4288fe6fb3cc4ad9ba80ddd4bbe676fe0325f3cc4272ebbd3d7ed72b1
|
||||
size 116741
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:6d8b859217f475cd3477e96e8f501662d7c288d731800112d97af0d8c7718273
|
||||
size 129515
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5140ad4c2e87cedd06778a7dee016da2357db9bf4d52cb503f9e3d2bc363d905
|
||||
size 117569
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f9922d84c272da0d0df45dc37b5a391bf654ab73024159148d80afaa94c69fe3
|
||||
size 133736
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:99821a8646ec4494d5faf8e1027ff3af755fd57ba0c86789c8c294ee1d0447a9
|
||||
size 159121
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3ddc6a03294746a12c7072a9f85f7af9296ca085a2108107ba1df4664dd669c4
|
||||
size 178130
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2e3efc828ed17b5860d525801af71eb9f3b77a89d3b1e8d296199a44805d28de
|
||||
size 74117
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:19688b95f90db29ff6f604c56dfcda7e571f360a5dd121594bcf2b000559e3d7
|
||||
size 85161
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:956c62fe195c949834b198703e1a7661b859ba6b509815fcecbd7200bf6d801f
|
||||
size 113704
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1d1e5d4ff7af3faabe400cd75e4621df01a7e6bec1dca29a5a407f3951810e23
|
||||
size 132567
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:daa2048ba6399cff083bc56e088c5b1581cb24aafc8a337d3c430abc4f726627
|
||||
size 100719
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:95b97cb16f44b790b415d87301b440ab8d916886c16a964ef46337fc4440ff75
|
||||
size 112640
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:39a6378f7df6c01583babab0b71bac767f97fa37905f2d867d0a8904d7e9acdd
|
||||
size 122499
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:55e0c5e851d041da806f13a65b5d1b0c1161a3b71941db9cc6e9a8723bf4510f
|
||||
size 124974
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:640a83ceb101623de31fd268475af5b9059c7a2ca7a8f7aa8199fb7daef5a939
|
||||
size 100288
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a1bbe9c2e6a8fb461ea4aaa0624f5f73c4465072b598d5aafd053df719eb5610
|
||||
size 98946
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4ce96b100be97ab727d12dd40fa830e45c3273cde01109db36edb2948cb0f23b
|
||||
size 169765
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8674d2c5605782b44e429817a872f828465efa8fd0efed8da84fa6e1502a4c3b
|
||||
size 171910
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5de5005d6e79e1d8bbc85ec321df1978098c1caa08d951eb600e50348101f9b3
|
||||
size 114059
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:65ae23a0ac8ec3fe8ba1e8492c9347d0a0e57de0c2b1d1b84507ec9f0058a3e1
|
||||
size 113353
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:854578a7bf75adaad847dcf733ad364670d0b5c601f3c767c26a1f477f67e2a2
|
||||
size 80094
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d09086b13a697b7ce3e112aebec1c8fcaa07143e7d24d6b6fcae8b12e4844899
|
||||
size 82078
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:77162b478466530aa5673acca394d3b34b36174a486abc2aa78802b63dcccc04
|
||||
size 57653
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c5de6d19acc089cea0d13048ea24ad2bdfbf84474f99469c97ad46f7a2135b58
|
||||
size 56491
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:51f1498af1600bd16c2ff63d26a241e0eed0279576bf7f7d063d2d8752bd1b90
|
||||
size 124281
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:332349a7e1b08546476638d82703d6658193ff36931f4eb105cac8df4d20f274
|
||||
size 126046
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e79c31390ca36a329d1bebaa344a2aaaa16325d128c8c38275bc90a1b1da5047
|
||||
size 70183
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a338698467bdd325c3ac3e9ab714bcf3dd45f4f0cc1d4cb9cc7ace6a5c802237
|
||||
size 69005
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:fc42e53ebad66196b3dac9a0d3be487b064deafa75dd4a76aae6d4bf6b7b9cca
|
||||
size 105399
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:37dc958d49a8f2cf05422d6334566684073d45bcd7bfed775bde0baeb1236bde
|
||||
size 105681
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:328561b6398a9933313f2c511b6dbeedb3a32219f5df2f04e5d3f4d758e3e697
|
||||
size 85677
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:992d6bf4555a16f2456a93d46f013c9abf4d817b03d2a90ea3ea8cff4be2a550
|
||||
size 84232
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f9fb8d94bfa8533cfb42bbcfa9dcb5abfa61f1ccf74adca0ea9f902310bbbb53
|
||||
size 108769
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:32b935a10ffce63ddeccd817c7439ae9e79d8c732698d886638483e6cb3dce54
|
||||
size 97696
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d08caa830148a6cde48cbce58769934c8d8d6b9a759b7eeabafda110c59a9162
|
||||
size 101336
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b82e5015a7c1d4217cf57ffd9dec598de325ab925489097ea870f75f2437d789
|
||||
size 138109
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:bfd4175b3c9cdbe6f92bc9fd68d2760ac122b92de8d2cf9909db816f00475e71
|
||||
size 117414
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:70d6145bbe005041218aa7e6ed0bc7c9be34480c5fff783500f368d176db2ebc
|
||||
size 123473
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8550ac5e218bcd29ecf4e1b7c570046280f5bab447be47f99bc8d4a3d090f443
|
||||
size 60872
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2e2ed1976b415e39c28f13ee7b48c8ab2850da2e461f2561048415a9d5614763
|
||||
size 50446
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8495eb3332ec93bb27b08eadb2f163c2fb648523e39e5637ebce043e884a316f
|
||||
size 54454
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4d856dc741b5d93f0687a3f6f99f348307c13c3dde47c90933e619820b8da175
|
||||
size 86909
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3b5861a69bdec28fb65f118528af9615446c24e14da6a07e91cfb8b6292ae955
|
||||
size 69225
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8279de468b0d1757829e2c1a57c9d98d894e55cb089121a9b353e4ea7bfbfdad
|
||||
size 75720
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:905d8d16cfce1540a91a3c8ef7d4295b844d2aab4c3ed3035230277acb56e228
|
||||
size 94357
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f918886d8da2987f6ae26762267557ce2f7d7f0b02ce985de56caa3fb7ee305c
|
||||
size 83101
|
||||
-3
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:08af67d397dafe03f60b36e2d1650a9031c12041ce5e015f6c2f81af4e9731fa
|
||||
size 88510
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c7f0fd9b44f02c77dd16eb42923bf40a42970f384ca9b8d61f6474a0083388ce
|
||||
size 82339
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e28312355d30b5bf3473ee327ba84a622a94af9bdcb9dd1f4435b356b52fc45d
|
||||
size 81405
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c7f0fd9b44f02c77dd16eb42923bf40a42970f384ca9b8d61f6474a0083388ce
|
||||
size 82339
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e28312355d30b5bf3473ee327ba84a622a94af9bdcb9dd1f4435b356b52fc45d
|
||||
size 81405
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c4d662451a74318edb71684b01b9d79b388f37e977e5dcb459c71e5ddd645b29
|
||||
size 41108
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4d28917da204938efb19eab7a37876b1c85a838c76771fa844504018501059bc
|
||||
size 39218
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c4d662451a74318edb71684b01b9d79b388f37e977e5dcb459c71e5ddd645b29
|
||||
size 41108
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4d28917da204938efb19eab7a37876b1c85a838c76771fa844504018501059bc
|
||||
size 39218
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b26ac0a837243d801ad91fa6b9d79cc880b0001c9940a467c126c0e51eaeb1bf
|
||||
size 68867
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d1214de5c36335a1e6bf8b8839b028e7a7d2ea31cfdbcdbae901470f2fed1447
|
||||
size 66226
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e397b937f7f407afccd1b6b98e67ca3c15d743a607c370713f8486d7cf215fa3
|
||||
size 74639
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c2eddb648a0298d35c9ed697aefaf89ce609f58c0d3ba9fdb0b2c1cd892594fd
|
||||
size 123637
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e397b937f7f407afccd1b6b98e67ca3c15d743a607c370713f8486d7cf215fa3
|
||||
size 74639
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c2eddb648a0298d35c9ed697aefaf89ce609f58c0d3ba9fdb0b2c1cd892594fd
|
||||
size 123637
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:012ed47b68467b49ba5824c021f8b4ae8a0c2eea5dc5477f5b52ce69b185175b
|
||||
size 51382
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e02beede3f2a35a44b403435c8634d20cc9a120141dd7973f158c3c755914247
|
||||
size 73050
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:012ed47b68467b49ba5824c021f8b4ae8a0c2eea5dc5477f5b52ce69b185175b
|
||||
size 51382
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e02beede3f2a35a44b403435c8634d20cc9a120141dd7973f158c3c755914247
|
||||
size 73050
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7833be660342b496d8c652c0351ef87746844a57bff98b708e08405c37518a92
|
||||
size 64979
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4a2018e28af9bff5d97c3a49fc824ba47f648987e7ed7d7e4af56041db872219
|
||||
size 130410
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ff896f598f8727e98beeec6b16eb72f939c32cd70aa087b6687e8334878b358e
|
||||
size 176633
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e3111166fcde6e995fe21c008ff24608fa8d524d6da3bb53ea29dc6e8487a3d8
|
||||
size 182650
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:313113fd6bb30e1a16d35bd67534ba314954ba8d1d6a75603ad6f7c41a28c7cb
|
||||
size 118587
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:fda9a9b13afc071983034b96b163e7ff938c02ad81a9ab3e1139557c75841909
|
||||
size 124228
|
||||
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c9fdecb8d69665bd20ce42c29a94df8fd912f1c3688207c02c2bf0ef955e80d1
|
||||
size 144194
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:11302abb63ef416995108ba008b4d7f850bba43e8188e6db6c166f3916327e13
|
||||
size 234184
|
||||
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c68018bb8f7c06958413b2ac0dc3ad22d677fabea52f3bbe9cc866673a4f2b6d
|
||||
size 282938
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user