diff --git a/.gitignore b/.gitignore index 330d167..b36e226 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ ## User settings xcuserdata/ +xcshareddata/ ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) *.xcscmblueprint @@ -37,9 +38,9 @@ playground.xcworkspace # Swift Package Manager # # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. -# Packages/ -# Package.pins -# Package.resolved + Packages/ + Package.pins + Package.resolved # *.xcodeproj # # Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata @@ -54,7 +55,7 @@ playground.xcworkspace # you should judge for yourself, the pros and cons are mentioned at: # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control # -# Pods/ +Pods/ # # Add this line if you want to avoid checking in source code from the Xcode workspace # *.xcworkspace diff --git a/Podfile b/Podfile index fa757fc..da0e48e 100644 --- a/Podfile +++ b/Podfile @@ -1,10 +1,15 @@ # Uncomment the next line to define a global platform for your project -# platform :ios, '9.0' +platform :ios, '13.0' target 'ZarinPal-Challenge' do # Comment the next line if you don't want to use dynamic frameworks use_frameworks! - + pod 'Alamofire' + pod 'RxSwift' + pod 'Kingfisher' + pod 'RxAlamofire' + pod 'KeychainAccess' + # Pods for ZarinPal-Challenge target 'ZarinPal-ChallengeTests' do diff --git a/Podfile.lock b/Podfile.lock index 216d83f..88ee819 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,3 +1,38 @@ -PODFILE CHECKSUM: 76fa47e3580de9df404b88cc7b7494f0515bcaa6 +PODS: + - Alamofire (5.2.1) + - KeychainAccess (4.2.0) + - Kingfisher (5.14.0): + - Kingfisher/Core (= 5.14.0) + - Kingfisher/Core (5.14.0) + - RxAlamofire (5.3.2): + - RxAlamofire/Core (= 5.3.2) + - RxAlamofire/Core (5.3.2): + - Alamofire (~> 5.1) + - RxSwift (~> 5.1) + - RxSwift (5.1.1) -COCOAPODS: 1.9.0 +DEPENDENCIES: + - Alamofire + - KeychainAccess + - Kingfisher + - RxAlamofire + - RxSwift + +SPEC REPOS: + trunk: + - Alamofire + - KeychainAccess + - Kingfisher + - RxAlamofire + - RxSwift + +SPEC CHECKSUMS: + Alamofire: e911732990610fe89af59ac0077f923d72dc3dfd + KeychainAccess: 3f760109aa99b05d0f231e28b22642da7153e38a + Kingfisher: 7b64389a43139c903ec434788344c288217c792d + RxAlamofire: 9234f30d94bfae9889c2aaba36358312083a7ad3 + RxSwift: 81470a2074fa8780320ea5fe4102807cb7118178 + +PODFILE CHECKSUM: 407d4b8608220ca0dc21b142869a638ea0e71b19 + +COCOAPODS: 1.9.3 diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 216d83f..88ee819 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -1,3 +1,38 @@ -PODFILE CHECKSUM: 76fa47e3580de9df404b88cc7b7494f0515bcaa6 +PODS: + - Alamofire (5.2.1) + - KeychainAccess (4.2.0) + - Kingfisher (5.14.0): + - Kingfisher/Core (= 5.14.0) + - Kingfisher/Core (5.14.0) + - RxAlamofire (5.3.2): + - RxAlamofire/Core (= 5.3.2) + - RxAlamofire/Core (5.3.2): + - Alamofire (~> 5.1) + - RxSwift (~> 5.1) + - RxSwift (5.1.1) -COCOAPODS: 1.9.0 +DEPENDENCIES: + - Alamofire + - KeychainAccess + - Kingfisher + - RxAlamofire + - RxSwift + +SPEC REPOS: + trunk: + - Alamofire + - KeychainAccess + - Kingfisher + - RxAlamofire + - RxSwift + +SPEC CHECKSUMS: + Alamofire: e911732990610fe89af59ac0077f923d72dc3dfd + KeychainAccess: 3f760109aa99b05d0f231e28b22642da7153e38a + Kingfisher: 7b64389a43139c903ec434788344c288217c792d + RxAlamofire: 9234f30d94bfae9889c2aaba36358312083a7ad3 + RxSwift: 81470a2074fa8780320ea5fe4102807cb7118178 + +PODFILE CHECKSUM: 407d4b8608220ca0dc21b142869a638ea0e71b19 + +COCOAPODS: 1.9.3 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 5fedb56..600e67d 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -3,22 +3,285 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 51; objects = { /* Begin PBXBuildFile section */ - 1F760140CC23BB814CF091139AE19ED7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; - 217EB1C586F2254EB685B005F550FA05 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A35D144A2A827E3093DBF7ACFA83FD08 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-dummy.m */; }; - 388EC120893D448BB41DCC41EA46E120 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; - 4315B3875B1E77A83836B03EF2F86EE9 /* Pods-ZarinPal-Challenge-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4728D22E0B97E533341E7DB8392B6F7C /* Pods-ZarinPal-Challenge-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 57FDC7B37A2A3894D1F45ACC53820755 /* Pods-ZarinPal-Challenge-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BE70C650FDB60FC8863F68F7453D797 /* Pods-ZarinPal-Challenge-dummy.m */; }; - 67D421D70ADBE3B367E24D2681185E3C /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1948AFEC898E25BA832E04F4A208574D /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 762BC8AB935C56BE09C05CD73C12C086 /* Pods-ZarinPal-ChallengeTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 929150D77AAB71741A9E9FCADCD08D8F /* Pods-ZarinPal-ChallengeTests-dummy.m */; }; - B317665CAB8280DDFE0C84C2FCA24B5C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; - C7FC5D88F9335CD86FB9B2A81EF4B993 /* Pods-ZarinPal-ChallengeTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 56EAC788B05D9880ABB8F56146B1719E /* Pods-ZarinPal-ChallengeTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 000C38BD26FC114912F5614E23D2AADB /* Materialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0619C9B50A883817FECE679E29B77B8D /* Materialize.swift */; }; + 013BAC24F7AC722E59517CB110A9E685 /* HTTPMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16307324F2D97556F5663C1EF3F95C21 /* HTTPMethod.swift */; }; + 0328978088F9CA2304C84F9F01D901F8 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D066BEE9AB7B657DB9333F2B25FEB75E /* RxSwift.framework */; }; + 03C3BCDA8AF8F248F5AFBFE6173F9790 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 625C043AAFD384945066C53E7213CA28 /* Alamofire.framework */; }; + 0441B3E976E5F55E22731AECFF0DBA88 /* Keychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 411678192EDF82B2E1D3E6765E8378E7 /* Keychain.swift */; }; + 0A1849775CF90D514963187D3A771CF8 /* Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 959DC66AA00C5F5D78EE2694B6B94991 /* Combine.swift */; }; + 0A6B5DD01688D2909B123872D28BA244 /* ImageDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = F73FC0E38E73882B2B91483831143538 /* ImageDownloader.swift */; }; + 0A900DF17E3B64F08AF673E9A0DDD697 /* OperationQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C9B05237DDBB04D89F523B57A2882D4 /* OperationQueue+Alamofire.swift */; }; + 0AB71AF65247418102DB179E57D88F3A /* Enumerated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74F638687F4F370F858B0DEF3E0DCA20 /* Enumerated.swift */; }; + 1208E81DA8B532D0646D627B50290EB6 /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B2FE69DD8F204BABC508F0960865E11 /* AFError.swift */; }; + 1271D16ED09C3A7F1C8B59FB5E8F4C4A /* ImageTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 425747CCDD994EA6654A722FE899CFE4 /* ImageTransition.swift */; }; + 1551A1F11A0CD69969A09432459680AB /* ConcurrentMainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAE1D3DB03DB076DBFAAD5DAA48ED42D /* ConcurrentMainScheduler.swift */; }; + 157C093553DEA8090A5EDB594C7A10EF /* Runtime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26936794D1DB66B45A2D862EA320F37F /* Runtime.swift */; }; + 17CC4FFFA725523CD333A6DD694F2282 /* DisposeBag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B30026AA233413FC84ADC996DE22F01 /* DisposeBag.swift */; }; + 1861A810ED5264F6E4649B40902F0CD9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F16DE93868A621D529E6F58B590A52F6 /* Foundation.framework */; }; + 19D605A3233499828FB6B790869F3E9C /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CBA85CA17C1A3024B7628C885ECFA77 /* NetworkReachabilityManager.swift */; }; + 1A361DDEBA9D315A978044784D4EDDDD /* DispatchQueueConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A62FAB858F3CC04CB87BE6E46917A2D /* DispatchQueueConfiguration.swift */; }; + 1A909DA95F2CD6258B509441E8D3E8DD /* Scan.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F7479F086E4965ABA7EC3B3402C602A /* Scan.swift */; }; + 1AD75F47FE3BC2920DD31132A54690B0 /* Zip+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 898992236FDF6CE427D1877E0CCA7BE1 /* Zip+Collection.swift */; }; + 1B16F30BCA7395D43CDA1614D72FF4FD /* Never.swift in Sources */ = {isa = PBXBuildFile; fileRef = DADC46AA65EE33A1A024A0F501992328 /* Never.swift */; }; + 1F8B5F5424AF7BF4F316EC397254DC7D /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3234010256E666332F10F54559E9C62 /* Disposable.swift */; }; + 200080F909B0D344E3CE80F74B03ECC5 /* Amb.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5F8051790E0C8D6A5CD49B339F13AC1 /* Amb.swift */; }; + 20D9273F69B4400E82CA2B7490AC86B8 /* GroupedObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 398E251A70A8FF37C40141988FD7B439 /* GroupedObservable.swift */; }; + 21098700BAE16F27074144E1A1E87058 /* ImmediateSchedulerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52B36DBA18B85701C079296C85F81DD0 /* ImmediateSchedulerType.swift */; }; + 212EDC48B68107BEA9247F3464CE696E /* StringEncoding+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4001B299A45DC7FDA921BDEEFA26E56 /* StringEncoding+Alamofire.swift */; }; + 2169973D7461954F47AE2E4B2FC29AFC /* AnimatedImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44F9B41811A622183982C21CB895EFF9 /* AnimatedImageView.swift */; }; + 218C14EAE5AA31C30314AE0289B732A0 /* Protected.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45E7F430910C80A083FE82FE3D00ED5A /* Protected.swift */; }; + 218E9683CDC3DCB849CB22E6ADDD5C4F /* Storage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 499EE1D4E6FC3579CCC4972A318B056B /* Storage.swift */; }; + 22317FB40CA21FA8EFB63E6FF0C8EA74 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F16DE93868A621D529E6F58B590A52F6 /* Foundation.framework */; }; + 22A3E0815D8E49A485754A7D78ED80B1 /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9CCD3A70426E65B698489963A19CE8 /* Observable.swift */; }; + 22E3593402DFAC73BAFA6307677BBF49 /* SkipUntil.swift in Sources */ = {isa = PBXBuildFile; fileRef = B98F850673BC787FD8DDA161AE59E8B5 /* SkipUntil.swift */; }; + 2383DC5D50035FE086DDDACDB50EC9EE /* PublishSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EF246C1C14FDA286E4114E521736804 /* PublishSubject.swift */; }; + 23893EBD37112E3260FD0039C6D934D2 /* Platform.Darwin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FE5A7D0621A9048C3A4C6D5976C1276 /* Platform.Darwin.swift */; }; + 240EF0FF0F201B2F7F3C661B2078865B /* SerialDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 548451D1CD8130451C5B6920CB276AAE /* SerialDisposable.swift */; }; + 244F0DE7DDA46F7605FE1295B0C23940 /* BinaryDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78314C24026D355F2120A42FF58645BB /* BinaryDisposable.swift */; }; + 251D4E658F69C420B89BDB6EA623A58E /* DelaySubscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90E6DDADC786F2FC74E5285DB0A1FA57 /* DelaySubscription.swift */; }; + 257E2F3365C158D467A2BD2D2275421F /* Take.swift in Sources */ = {isa = PBXBuildFile; fileRef = 067D90F0CEB95D96E30D1284A3E5784D /* Take.swift */; }; + 278C391F914E5369B466166B047457EC /* DefaultIfEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD08AEC2992892DBC79FBB65549D497A /* DefaultIfEmpty.swift */; }; + 27AC73ECEA22469300D0C84082D5A11A /* ImageDrawing.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9249D191D968E7B7AB75F1324207188 /* ImageDrawing.swift */; }; + 27E59A11A2743B0595CDE3A08675EAE1 /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 033D48EB997314056439AF54C5624E73 /* DispatchQueue+Alamofire.swift */; }; + 2A80579B7147B18AB18CF737B8A20653 /* Debounce.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EB7A1B7B33664FCBB2BBAEF74F39520 /* Debounce.swift */; }; + 2A946D64F55D1483CD914783D0CDBCF1 /* Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15DA68FD6FFD207DE3CDF2B968450088 /* Deprecated.swift */; }; + 2AAE4EC8CBDAAE6806ECAAA1E3BA6A9C /* RxSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6322AC0EEA5B5127CD6BD565BB71AC8A /* RxSwift-dummy.m */; }; + 2AB0908DB89DC0346534B731071023E9 /* AsyncSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10383D568E058B336D2E0BCDF8FC7183 /* AsyncSubject.swift */; }; + 2ADE4D81B153C3C15E72222B215715A7 /* Sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27A44183300B3E3DA1B191EF6640DB12 /* Sequence.swift */; }; + 2C55083149398A707C6DEB531A79FA68 /* InvocableScheduledItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22DE75871201BB99F6D9A90E05FEF721 /* InvocableScheduledItem.swift */; }; + 2E26660DBED28E86214D536BF15B125C /* TailRecursiveSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EBC04A2929D255B059B8CC2703D7914 /* TailRecursiveSink.swift */; }; + 2F39AC009FDCDC6395456DF9C6F73B2E /* CallbackQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBE5A728B87782FB72878986E6B1FBDC /* CallbackQueue.swift */; }; + 3042057ECA913E5C78A350B2E2FF822F /* Date+Dispatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15D9BC62D6D57370EFEFEFD5DDE897C2 /* Date+Dispatch.swift */; }; + 362273CEE6198B2A9943EDB204774E0C /* AddRef.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0163A1A23827FD076DAAFF8643F5F4EB /* AddRef.swift */; }; + 36880F928C91B20C440FD6A2992E1015 /* SynchronizedUnsubscribeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09361BA8E6E6E82C50B7BCC6CBCAEEB5 /* SynchronizedUnsubscribeType.swift */; }; + 3692F6E79192C7C0F0734A0764688555 /* SubscriptionDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CFDAD9A08A708221B30DBF88A10AC4A /* SubscriptionDisposable.swift */; }; + 378968E21A878D10E59EDE9D6E5CD2A8 /* AnyObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0D9B6ED1A957C3A83CCBDA87AAC2F56 /* AnyObserver.swift */; }; + 37AB7998EDB4785059E5AE357BE4E5C9 /* HistoricalSchedulerTimeConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 505BAAA69882749C4B39978C45E5071F /* HistoricalSchedulerTimeConverter.swift */; }; + 37F4E4415F535C015875E7D805FFCBDB /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74BCBABA22721DDE14E1DF04A4A9B197 /* Filter.swift */; }; + 380E926A87908F8A64A7F8E0616C5F04 /* ObserverType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 929A0F24C55E82B06835285648FDA85C /* ObserverType.swift */; }; + 381FF05F8B4F611EE9C2FDBE4457BB89 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB4B735751392F4AAD11CB1047C85047 /* SessionDelegate.swift */; }; + 38414C27340BAA4B6E00079E75730168 /* SingleAsync.swift in Sources */ = {isa = PBXBuildFile; fileRef = C27B3571E69AA88981466646F0799CCB /* SingleAsync.swift */; }; + 388EC120893D448BB41DCC41EA46E120 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F16DE93868A621D529E6F58B590A52F6 /* Foundation.framework */; }; + 392B550454354027A95860A24F373493 /* MemoryStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86BB7362A7F94E6674FBA969CE6F1193 /* MemoryStorage.swift */; }; + 39B1ACDAFFF0F087BD5683911CB5230D /* RefCountDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9262D50865B81A98A03B217562B46E36 /* RefCountDisposable.swift */; }; + 39C07DB1B30E5DDCCE16B39185E8DDD9 /* Kingfisher.h in Headers */ = {isa = PBXBuildFile; fileRef = F24ACF8DAB8C608767AE2A45175983DE /* Kingfisher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3BB69FBC9B4043D8F9C2182D9A408215 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70279BF6B621244FD4E99E3FA969BF84 /* Optional.swift */; }; + 3BE14D60B48F7A168E30B6035A6679D8 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCDDE871B2139C7EDAB41A4454F90FD /* Filter.swift */; }; + 3CDC916FB54AD7FB3B09493AF85A9701 /* InvocableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BD4796079AEAA1770BB626C3E2F3C1F /* InvocableType.swift */; }; + 3D728B246C8B0E212964F5DF12D847E7 /* MainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D75E745C30B234F8BD7943A9C517EDD2 /* MainScheduler.swift */; }; + 3F4DF4517D1059BE482E602E134A5BA2 /* AsMaybe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7883D1C1517EA40EF4F9D39A31AFA589 /* AsMaybe.swift */; }; + 402F0DBB21DF2E7B25044A0B33DB5EF2 /* Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = D990B2F2A1AFFA9189D6DBED281674E7 /* Create.swift */; }; + 413419D5EAF49981F1126220D949998D /* DiskStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8581CE9DD99FC0BBD1593683726A157 /* DiskStorage.swift */; }; + 42647EEE57B042DAB0C7CEE7BCF64EC0 /* ConcurrentDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC2071B5879AC831074F017B1C906A36 /* ConcurrentDispatchQueueScheduler.swift */; }; + 43B93B810B94AAD8487786B9A41C5FD7 /* Empty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EC61B634F24D93EF78D589CE18B259F /* Empty.swift */; }; + 445B3E9800D7F3C32FB3677643980451 /* Buffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1518C616F78424562879952E20839BFF /* Buffer.swift */; }; + 448BD1677C0CBD4901638A3F4AC2C584 /* Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85255EDEC8EAC6DD99F50FC3DB6E987A /* Rx.swift */; }; + 45B8CC1C61E7A0BB28CFA8CE7C12FEBC /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0816990BD0B647AF5164D6E6455F3234 /* MultipartFormData.swift */; }; + 45C53EBA8D54ABBD03AFABA40AA04526 /* ImageProgressive.swift in Sources */ = {isa = PBXBuildFile; fileRef = F24F9003E2ADB9AE86616C247DE54D20 /* ImageProgressive.swift */; }; + 47FDBBBD2704901588C3A7C56BBC502D /* ServerTrustEvaluation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4188BE4EED13391A64998B7B06C5A5E6 /* ServerTrustEvaluation.swift */; }; + 4836AC5421118D6CD767EA7FEA236190 /* AsSingle.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAE2F30A262E7E176C3AF43C07417BCE /* AsSingle.swift */; }; + 4A125BC9435C0689EFC9083C4D6AD1F1 /* ExtensionHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3516252C90B00D97DD37F111D5CB8FC4 /* ExtensionHelpers.swift */; }; + 4AD3326FA91CD559FC19A975A464045C /* Delay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C7589BDA048239577D612E858FF653E /* Delay.swift */; }; + 4AEB48FE18565A59266480250E7C3FEA /* KeychainAccess-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F6BF14FD13364687AC6F7514F56201B1 /* KeychainAccess-dummy.m */; }; + 4AEC050FA7D5ED52FDA9DF50EA3560DF /* ParameterEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDBF0F688E6A4CD6FBEE0D1743CBBA50 /* ParameterEncoder.swift */; }; + 4B11223B7E84D678CC7DCE06E7DA4F2D /* Kingfisher-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D857181C4673CEF0F9B67620B473D5A9 /* Kingfisher-dummy.m */; }; + 4B57A516324CA2AA6404752841979F26 /* RxAlamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C442203F47CADC5AC901C0F9F97DA865 /* RxAlamofire-dummy.m */; }; + 4E7FE4FF235AB5843E61A30E9A5587BD /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EFE49B6A3F2ACACA53EDC9B6BA55FFB /* Zip.swift */; }; + 4EFE36DF9F9729C26B8E18C8286C59AE /* RetryWhen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 452D7A95615ED2D8C0D6D848304B8993 /* RetryWhen.swift */; }; + 4F324195DB9715761578C9BB6C959581 /* ObserverBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D42BD27C7C772F2DD09FD373D6429701 /* ObserverBase.swift */; }; + 52AFC373558EA66A36978ACA2A59C208 /* Box.swift in Sources */ = {isa = PBXBuildFile; fileRef = 839CDDA883AD160622114D395B0BC0AE /* Box.swift */; }; + 532B18B72A872D358410EDFDF45C4372 /* CombineLatest+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FCCA4D3DE137F71ED26397453C864F4 /* CombineLatest+Collection.swift */; }; + 53573D140ED2FF4625595921244E9F83 /* NSButton+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 191AC4F4AB5BD56DFD263E48E1AB2B8E /* NSButton+Kingfisher.swift */; }; + 54D3CC0DC1A5947741E4A38DC6607ED9 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88DEE843952EBE6C6762EAF82B046C9D /* Event.swift */; }; + 556F95F5C8A393118AD02C0B3D2CD0FA /* ObservableType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F54ABB135FCDACF873EC52CF0CEE48EF /* ObservableType+Extensions.swift */; }; + 573EDF8B91E14694D54B5BE83975E9D5 /* VirtualTimeScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C15D4198D93510C817FD2B25F88F5DD /* VirtualTimeScheduler.swift */; }; + 57E809146DE1D795AB566D582C5BD4FB /* FormatIndicatedCacheSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83FFAA34C0694F74BFED60ADD4A079BF /* FormatIndicatedCacheSerializer.swift */; }; + 582440200A0588E93F90DFD5932E9D7B /* Do.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7BD7E88DB95EBAA1FEEABFFFE01689D /* Do.swift */; }; + 585D6BBB3A5B389B9C70A97F4B70FC97 /* ScheduledDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B10FD73F6398B956B80ED1FE9B3F4669 /* ScheduledDisposable.swift */; }; + 590A62CC64098FA33EBE9E7C80252AEA /* PrimitiveSequence+Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46D4B0D1884B1BA92269E97FE75BA80D /* PrimitiveSequence+Zip+arity.swift */; }; + 59E1831DBFE51C03F59EB2494505179B /* KingfisherError.swift in Sources */ = {isa = PBXBuildFile; fileRef = E35E296BA84ABD61543346D74EC20B81 /* KingfisherError.swift */; }; + 5FC220D00A9E77B0BC2692FA3ADDC91F /* Concat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CCEC5EC3875D020AC32E4DA3EFD7122 /* Concat.swift */; }; + 63136E19EACBC3161488B6B884ABA696 /* NopDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7817B6DBD169C012BE328C62A192F536 /* NopDisposable.swift */; }; + 633A738C2CE3EA5A17BEB50A455E003E /* Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EBAB60C5897051C2316213F5F7142A1 /* Range.swift */; }; + 643A62B599350B4B53DDD1410723A9F5 /* ImagePrefetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 752796ACBEA305EEBEFD748A8679CBE0 /* ImagePrefetcher.swift */; }; + 6546D728B69398F93B506845141EBD61 /* EventMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC2315E02B5261A21CD77A2ED9458182 /* EventMonitor.swift */; }; + 666EC5C8356E6D4448A2FE7BEE77AD88 /* RedirectHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6BA79D4E0DDFE0B71562D24CB6F8F3A /* RedirectHandler.swift */; }; + 66B26C6CAE737EC21F4BA1F1851B69C5 /* Result+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 821D74ADF0234940ED98AA4468E72292 /* Result+Alamofire.swift */; }; + 67E69E300EE6181E0B20EC86B03AA675 /* ConnectableObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 779429C210EDC0C06EBD930C6BBD7EE8 /* ConnectableObservableType.swift */; }; + 6A42DF7F22F13782A12CB39D27154210 /* Dematerialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBCFCF079BADA708A65B7579149D4EFA /* Dematerialize.swift */; }; + 6AE407A4FB6C3D6ADD862CC6E3067A17 /* Session.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17C6926A88CA28D8CF5B4ACF2EC35275 /* Session.swift */; }; + 6BBEF75DB6945785D3CD3CDBDD2D326E /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 647050628C3D31651EA46C7FD32DFDC3 /* Timer.swift */; }; + 6C08F6A77889651626583100F560153D /* RequestTaskMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4A24C974707ED0CDB350DE6BBE5A06C /* RequestTaskMap.swift */; }; + 6C0E45AB1E295621D97BE9531892442B /* CompactMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = A99BDA0F275A32954C7FE17CE3971217 /* CompactMap.swift */; }; + 6C4240E6A28A56C7EABA3E403BCCE73B /* Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A0CAA48847F34C17E584A88FD6DECE6 /* Kingfisher.swift */; }; + 6DB679FAC0D49C31AB6DEBDB924B9D2A /* Just.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1215EA13A41048DD10EDE77B642C47A /* Just.swift */; }; + 6E54F64E8DA73F4B0B46C216F9F93F63 /* RequestInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B039F96FDDEA436B0073B14E48456A1B /* RequestInterceptor.swift */; }; + 72EC2712926E6D28B52360D9AC41668F /* AlamofireExtended.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFB3861A0A35150D2E2794B059B009EF /* AlamofireExtended.swift */; }; + 7307C336843B0FB44EAD3D1BC2619616 /* Sink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3724C9716235E3349686B3673358041A /* Sink.swift */; }; + 7520BBB91891BC2263563F03822A1C01 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D038366E3788022B2F31A117C064C204 /* CFNetwork.framework */; }; + 762BC8AB935C56BE09C05CD73C12C086 /* Pods-ZarinPal-ChallengeTests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 41432D3DEDE04E12AF060D6AF670DBFB /* Pods-ZarinPal-ChallengeTests-dummy.m */; }; + 76C605C95842AAD9EC43BEAB6C6FD3B3 /* Resource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FB0C07A7647943777785C6F7A0A4211 /* Resource.swift */; }; + 76FB3FD4AD9C576C030C1E0637C9F33E /* ImageCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A95F076F066F9CC07BE99760C4C47B5 /* ImageCache.swift */; }; + 78BB80F440AB317CB32EE1EA942DDCDA /* DisposeBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EA51507F94CDAA42B238B03E0695740 /* DisposeBase.swift */; }; + 78F729E34F9C452364DD7361DDE0DC39 /* SchedulerServices+Emulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80E74EF4893B488FF857A8CE4FDC1EE9 /* SchedulerServices+Emulation.swift */; }; + 79C0E6867C42B4169225F2A8C770632F /* TakeUntil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7690DCA3815B4ED5896D32F4B3DCCEA9 /* TakeUntil.swift */; }; + 7AC1EAE913A2CC4FF6A5273A8AD62766 /* TakeWhile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15C3C06DBF0CA2E5A0A2DE9923E46CF6 /* TakeWhile.swift */; }; + 7AE4E0F90BD0EA42A97F982A52B7A4F1 /* ShareReplayScope.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18969F8C7C53F2B0400640CA17BFDF84 /* ShareReplayScope.swift */; }; + 7AEDED167CE0CF8DA2D28A8164D536FD /* DistinctUntilChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = A20555107FDA9102C5AA9893640EFE06 /* DistinctUntilChanged.swift */; }; + 7D2186484ADCDD14DE414F8416E78009 /* KingfisherManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 611BACC53E77BA8F425E243BF2B85747 /* KingfisherManager.swift */; }; + 7D3DD4A8BB36733BA15868F7FB8C56CE /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A04C4F43B9777A2414B11DEEC8A58F9E /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7D59B085FB0A678C50F49C942F9CDAE5 /* Source.swift in Sources */ = {isa = PBXBuildFile; fileRef = 224251C3803F296E4A9EB47ED35DEABB /* Source.swift */; }; + 7D942177C32597E1B9B6DA9E2F878B6E /* Pods-ZarinPal-Challenge-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D25297CDF54F662FA70E497145DD101C /* Pods-ZarinPal-Challenge-dummy.m */; }; + 7DA111BA28D2ABAF0127448656A91BA1 /* SessionDataTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = A73DF35D76323C984D36C30A76BF3662 /* SessionDataTask.swift */; }; + 7F2769AABD3176553E569502FD2AAD21 /* SwitchIfEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D245CE9081855A2718101C3021DC33A /* SwitchIfEmpty.swift */; }; + 7F90E304EC83E2D4BC3C674662FE19C5 /* VirtualTimeConverterType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DD65F1925A20337FF64BAC0F9E630E6 /* VirtualTimeConverterType.swift */; }; + 80393ECBF62D8B951CC84B8D6F8AF72F /* Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BBE48394B7DEB868314A28A14C013A0 /* Debug.swift */; }; + 81D70A63ECE90CEC6C1006265C325F43 /* SynchronizedDisposeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66572EED79FE2C5D0F72ED42197B47E2 /* SynchronizedDisposeType.swift */; }; + 82CC5117492096336ACEDE1124567CE1 /* ImageDataProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB52EC5695EF69491EA624A7ACA40EE /* ImageDataProcessor.swift */; }; + 82DEA99839D2880247BA18D89E5F9BD2 /* ScheduledItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E30DAA1566530999AF15C1051FB55E5 /* ScheduledItem.swift */; }; + 8562C26109739EAD1B4917504D363371 /* ObservableConvertibleType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E2134B59F30BCAF295A3382063C81FB /* ObservableConvertibleType.swift */; }; + 85BC3DF15F95BC9BB8985A3CE520250D /* AnonymousDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14DF196F359C86C4037554CDB65CCC22 /* AnonymousDisposable.swift */; }; + 87FDC793BD71B3BBAA9A1FB2DAF72390 /* RecursiveScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D62F09D0BF6DD4046AC49E3950E9A8E3 /* RecursiveScheduler.swift */; }; + 8AA937910F87915DE700CAB6C868689E /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FAA7A0AA8B61FAF0B63596361D1DD85 /* Notifications.swift */; }; + 8AC553BABF1F773BB7D7300E57B2C079 /* LockOwnerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8ECF395E7136282FABAAE9C22A38CA65 /* LockOwnerType.swift */; }; + 8F33CA5B6335C2B684BE10CC74275754 /* Cancelable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A897ECCF10FBEE07F46FACDCFB00377 /* Cancelable.swift */; }; + 909F37979BBA1E170AF88E167159472B /* Throttle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A816703105738BA6F33BA20E63E3B50 /* Throttle.swift */; }; + 90BD253B4E9EDDC45CEF9E4D793B4EEF /* Disposables.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55045F0AA9C2253109330A0D09A8788B /* Disposables.swift */; }; + 911448B2EDA2FF880108F77642797A88 /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E4B6CBE9137985EBA69A31705F63360 /* ResponseSerialization.swift */; }; + 91B837CE0DCD8EDB300FCDFFA1279162 /* HTTPHeaders.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8647F675FA167A44DF26ECE1202680 /* HTTPHeaders.swift */; }; + 9433A37319050AECED47A83CC1AB2411 /* SizeExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E45F3DDA76A18F2A034B475FEFC0A25 /* SizeExtensions.swift */; }; + 94F4DAC20B2201C47D1ED7B0E7D77C6C /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = B02348A70D0B199DB8AD5E7E33F3DF32 /* Error.swift */; }; + 958C357B713AECA31632AB439CFDA258 /* DispatchQueue+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C3D043CE78177A8BF13D17D4D59A0CF /* DispatchQueue+Extensions.swift */; }; + 9636E11CF444B5E3BD2A3352301BE5AD /* PriorityQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37F077A69ECCFDFA2FE01BB9DA090632 /* PriorityQueue.swift */; }; + 964F19AF6D0884583EDAF7B485311CC3 /* OperationQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = E384C262E7B0083A152C2E3D41DE348E /* OperationQueueScheduler.swift */; }; + 987EEB1A1ACD67D5B17AE94B89250DCF /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CC385D9A0D2447390EFA8694C4B30A3 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-dummy.m */; }; + 9B1D8A7798D8A6F518FC9AF9725431D0 /* URLConvertible+URLRequestConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1255257C12D9B24FA466C9EF40218D59 /* URLConvertible+URLRequestConvertible.swift */; }; + 9EC48C10940C6FFC240828C6C81660CE /* RxAlamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06D782CA9C5B920E27943C1253E7A91C /* RxAlamofire.swift */; }; + 9EC4DC3F4A764364051BE6DB7FD72161 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F16DE93868A621D529E6F58B590A52F6 /* Foundation.framework */; }; + 9F4859AA0B7FF10EBFCE500D05E97F22 /* AuthenticationChallengeResponsable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE24F13AB43CE46F29E83927CEED6A71 /* AuthenticationChallengeResponsable.swift */; }; + 9FED70D1E1FBFB80E974E999EF732258 /* RetryPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7EA148ECCDA9A1E40339417AE013699 /* RetryPolicy.swift */; }; + A0320089ED98A5622FCCB1AAC4F4AC25 /* Completable+AndThen.swift in Sources */ = {isa = PBXBuildFile; fileRef = D46142DB79B9FA3A8E4B410DC9C7D684 /* Completable+AndThen.swift */; }; + A1023981CAAFFBC61BCD3DA6E2491054 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F16DE93868A621D529E6F58B590A52F6 /* Foundation.framework */; }; + A19BDE1BF90D364A40FC0B9B298BA904 /* PrimitiveSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = C75700F5626DBF25E789E328CD7CAD68 /* PrimitiveSequence.swift */; }; + A1D1489ADDDD3ACD02AC9AED719208B5 /* Delegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DA388371AC49D5AADC6831CEBD8C044 /* Delegate.swift */; }; + A1D6D2E007627C790B556F7BAC2242D7 /* Generate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4C1BAF37F9B5A72B54646194DBE04A0 /* Generate.swift */; }; + A20AE360A512A67895C91CB28DF6B6C1 /* BooleanDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00B0934841EF469285C479DC89F819A3 /* BooleanDisposable.swift */; }; + A3C87B0E42879746015BEB545A0F2911 /* RxMutableBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = B37E6C41F532D8A6247B754478250788 /* RxMutableBox.swift */; }; + A64E1D9D0CA42B550F568EFB870D9984 /* Reduce.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4D93B0C8D66F269E61F2D75BE5E7355 /* Reduce.swift */; }; + A738C2A39C0150BBA7EA5EC19B95F03E /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D038366E3788022B2F31A117C064C204 /* CFNetwork.framework */; }; + A73D2C10F7050940A457BBF0520CC254 /* HistoricalScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7F048C09A51B3D2E3C39209D49325F9 /* HistoricalScheduler.swift */; }; + A7A0D8D40C074424B7A4F359C8790B87 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F16DE93868A621D529E6F58B590A52F6 /* Foundation.framework */; }; + A8CA4F9987AE6E7A9EBC9944E5559730 /* ObserveOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2B54AA5756D9BA9B3589B7A8893283E /* ObserveOn.swift */; }; + A9F52292CD73CC7BC667BC6BFB13F76E /* Indicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649DD429D576558D8EAE452744540E3C /* Indicator.swift */; }; + AA32E60194E22BD7D63996982953B254 /* ImageFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FC6E94F796A1AA30B7E4204CE34A016 /* ImageFormat.swift */; }; + AA4527ED7942734D4DCE293A7FBB893C /* Switch.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF2D1B246D817AD1EDC63039FE3AB168 /* Switch.swift */; }; + ABA85887A41495358C83CE3F3030EDEA /* CachedResponseHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB8D8BABED2806E0E981C83CA88DF724 /* CachedResponseHandler.swift */; }; + AE183A07F8F15318E296BB2FA9E93208 /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C23D1FA69B75625AD041D49B5D3DF31 /* Queue.swift */; }; + B1B3801DF32AB2D77B6577A96EA33239 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D58610939EE493575A600EA4955385 /* Bag.swift */; }; + B3F3418383835F5795F21789582430D7 /* RxSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D9BAE6364F1F56E36F54E6B7A544B1A1 /* RxSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B690AD6B2A18313576F26178C23A304B /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C99CF11179ADC96B280669E661C33C8 /* Map.swift */; }; + B6CE1FAD5C0B24594682854E29E99771 /* TakeLast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89D56CAC2344B9B4CAE2ED6EFA61B765 /* TakeLast.swift */; }; + B75AD9511D1B3B1E0B08513B2C3E2796 /* Deferred.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C3B1942F281B93DA5D5F54340E1C5B4 /* Deferred.swift */; }; + B7737F84659155FBF39EF9D3A5B17E2D /* RecursiveLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = FABE8CCE388DC9968112EB40C89D3526 /* RecursiveLock.swift */; }; + B92281396F6448036664F8939B350A67 /* Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA912BF88C514FF679F066AD58E83BE9 /* Deprecated.swift */; }; + B92AA4636470D82BFB22BDDDC8FA4950 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D8C50F82EF8C4858E5C5D2EFF937B3B7 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B9F473D757984B46946C217CF4D0BB6F /* RxAlamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BE52E3390F764B4330C86E439E7F5DCE /* RxAlamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BD311F47ACB85AC1BEECFD5A2EB97DAD /* Placeholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D2F1F4AEA67AEFDC563FCA98B4EBDF /* Placeholder.swift */; }; + BE0B30B8B0C36D3D9DC9CE8FD3FC9270 /* Repeat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06A4AE1E6EC369DA7ADF37D8EE493622 /* Repeat.swift */; }; + BF5D7A588E42170704DE3CE387810002 /* RequestModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0107BDA4259CD8AD54654045C68A522 /* RequestModifier.swift */; }; + C13E5F031FD8FEEB5E18F4E60304A975 /* SubjectType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 711E4C6C8201883EF21BBB65E1CEAC3A /* SubjectType.swift */; }; + C1757CF4A9E70F5D77CDD107E90C4EC1 /* GroupBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B7244FA93A7E9CFF252783CAAC1AAE9 /* GroupBy.swift */; }; + C1B55D63F80D507704962D4541723BF9 /* ScheduledItemType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 263551EF170EE4E8E6D14A53C7DECCF1 /* ScheduledItemType.swift */; }; + C1C5B050B55C15103ABC81769551A283 /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 983AC7EFF94E1DD2CE81AFC3C566CCB0 /* Response.swift */; }; + C1F1DB6A9CBDE584D09BA1613AAD4F9D /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4CC56DB2EFDFFFA75E3AF86CC70144A /* Alamofire.swift */; }; + C5053041C41069386FEFB068B2F2592D /* Producer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0011C6B1E7E4642848AC91AF9D110B8E /* Producer.swift */; }; + C59B03D6B3761A1639F360584CCD937C /* Reactive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5192029C2A3AB595BCB93B5B25BA3C1B /* Reactive.swift */; }; + C5AEBA560DADF30E2AF41613A3A40287 /* ObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEA283DF8684AD5C7856CEB1019F2A80 /* ObservableType.swift */; }; + C6D5A4B4028B2C43380C9FA58BD5C8CA /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7931779C1BB2C10D2765E7EFF85AAF5A /* Alamofire-dummy.m */; }; + C6E3928D0C0A0AE738527490941D0231 /* Lock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2051B1D402139C1AC8CE76A86FC9B296 /* Lock.swift */; }; + C7FC5D88F9335CD86FB9B2A81EF4B993 /* Pods-ZarinPal-ChallengeTests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CFF197B432FA90A17243B0025D2E1949 /* Pods-ZarinPal-ChallengeTests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C8B51CA7C1F4582EE520BFBD51B46EBF /* SynchronizedOnType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E467AA243CBC53964425C936D3C3745 /* SynchronizedOnType.swift */; }; + C96B3276A65AA61BFBF555CF47281FC9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F16DE93868A621D529E6F58B590A52F6 /* Foundation.framework */; }; + CA2E1CDCD21BB8C3311BC778CD040C07 /* StartWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1832BC12CCF01A67A35FCE20F63011F9 /* StartWith.swift */; }; + CB56EC7BD0DA2060EA8FAAE0062B18B5 /* CompositeDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3EC94BDC15D866EAD35E792E357CD33 /* CompositeDisposable.swift */; }; + CB9E545E5E59F4F994F92F71584E7DBA /* Catch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C420C7B75B0C01159361D7D6B45FB73 /* Catch.swift */; }; + CBF8F66AAE972CB75436EE640DB403DF /* UIButton+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF8DF24A1958904B77D9775354DD684D /* UIButton+Kingfisher.swift */; }; + CDE6E025EB7814166FE10729FD8ECD99 /* RedirectHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1962990E7F16E9A519C7FD45C1A848AE /* RedirectHandler.swift */; }; + CEA7813B92D78FCFB724C33EE0986706 /* Sample.swift in Sources */ = {isa = PBXBuildFile; fileRef = D71FFD5BF89C5C539EB89EF5FB9D34F9 /* Sample.swift */; }; + D01F65F0FB64651347BE071B40D9137C /* ImageProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42724DF9930FFB0908A11316902EA12A /* ImageProcessor.swift */; }; + D032F06A647A94DF048FE619D7CDB272 /* SkipWhile.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAD1EAB246F0E9C0550C6B4E79D567C3 /* SkipWhile.swift */; }; + D03F1F02DE8606E6057D57866611BEBF /* MultipartUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32B4E6D659A35EBDB998712E84645779 /* MultipartUpload.swift */; }; + D06D1ECF0F83459B30344E72D5BD80C0 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFCBF0F60B9C342FE48428BE78CB41B8 /* Result.swift */; }; + D120E1076F09BC2B6EB04DFB77B4337E /* ImageDownloaderDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20E0F58B3D3E556A35D8C70C2A28C1AC /* ImageDownloaderDelegate.swift */; }; + D14066FAE94E304798E43651E5886D13 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = C04AF88A6948CF1AC7B1536ED334704A /* ParameterEncoding.swift */; }; + D1F8033E0AD4B56664E739ACCD2112A4 /* Skip.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA5D170F0740DBB4909BFF9ED18B53E2 /* Skip.swift */; }; + D2A1BADA7775EB86BE54E76DD5287DCC /* KingfisherOptionsInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0F815E176CFF4358A741576FC6261B4 /* KingfisherOptionsInfo.swift */; }; + D2F623D1BA8366959E5B4B28EE8C74A3 /* CacheSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2F45CC54DB91935D6428EE0F34B68A2 /* CacheSerializer.swift */; }; + D31FC7FDD450C4CDD633ECBAD27C6221 /* URLEncodedFormEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = E34187EC0B0E5221A5215B62239AE3A5 /* URLEncodedFormEncoder.swift */; }; + D33A41A088CFD8CDEF093B81473ABC24 /* ImageDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACB2E0F22217B5B18CABEDFD7233EFDB /* ImageDataProvider.swift */; }; + D3B6C7CC81054A15944438950930B466 /* RetryStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 990228538A4AEABE2D0621D996709F47 /* RetryStrategy.swift */; }; + D44F078796D03389385A9DD7F217B1D6 /* SerialDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EF30F7C629856BCC6C696EF97B97FB3 /* SerialDispatchQueueScheduler.swift */; }; + D5EAAFB6FAD77A8F0699345149BA3CBB /* URLRequest+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7395E4F40EBB212BF7591C8BB3B2324B /* URLRequest+Alamofire.swift */; }; + D766EFD6660F107FEC78405FD014A3FE /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E636324FF512D5534685DA16D0A9F36D /* Accelerate.framework */; }; + D79218E9447AFB6964801AFB76AE9F88 /* AnonymousObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 542070D748C492FE013B67268A1149BA /* AnonymousObserver.swift */; }; + D89D6F7695104E270DBEC916123DEF43 /* Kingfisher-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 596E21E4DC96E5D01738479FD5E0B374 /* Kingfisher-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D923DDA4528407F75DB495279D07D4D7 /* CurrentThreadScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8873416F0C46F0D3F62AC5B0E190ECF8 /* CurrentThreadScheduler.swift */; }; + DC627AFC5B585686898B014184AFCABD /* AuthenticationInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6C53D40AFB85133C5BD4F3EF6247A9 /* AuthenticationInterceptor.swift */; }; + DD81AB9BF82BFE0952A930F2A52C0852 /* SingleAssignmentDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3840916AD62D98AFC86B38968F5C3E2 /* SingleAssignmentDisposable.swift */; }; + DE2A5AB7398EBDD08BABC124E9665F92 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F935AC1A23CB48A9D36A15A31529B8B /* Errors.swift */; }; + DE2FE634CA168C76E6F6EAECCCF2CB25 /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EDE466EC1A478252595CBA349FB4F16 /* Image.swift */; }; + DE6DA36B51EBC21B11E6248A468DFADC /* Single.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F07C439F4BA0E8755636317C360D87C /* Single.swift */; }; + DEA77F6D339E0B35012BF98B8CB52443 /* SwiftSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37C5773E0BD3DF72FAF60DC234A4F508 /* SwiftSupport.swift */; }; + DED03AFE23DB113D32230604E77249CE /* ReplaySubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = E62F4618DFBEA45C47CF9FC8C300E8CC /* ReplaySubject.swift */; }; + DEE0BD97F8CD350B96FA108DEAD01DB5 /* ImageModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = B318FE4ECDD4733B648469CCF5F5D348 /* ImageModifier.swift */; }; + DF5EE39834598701885BF91B8DA3F4FC /* BehaviorSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 595DC02CD608D79E79AA7581A772F381 /* BehaviorSubject.swift */; }; + DF6658C44F6B22D44A16800F9AC8EEF6 /* Window.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C75C99593AD1C9F5E331A6DFD0316A9 /* Window.swift */; }; + E08FECB666202EFED71715190199E69C /* ElementAt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C202705BBEDDA6B392126B8E7D0A090 /* ElementAt.swift */; }; + E1A6590BCB3BA54410D5B3FC2629CD28 /* Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = E140F9C6C1574D1F421E8537B08D642F /* Zip+arity.swift */; }; + E83CF16789783F9BAA743F164005E251 /* Pods-ZarinPal-Challenge-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DB31277BAA8C023523621013FF67E0A /* Pods-ZarinPal-Challenge-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E892C063BD7E9C2E9C5F661A1C7F0385 /* ObservableType+PrimitiveSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = F10E9FF23A84E8D3A2B4F09416BF85A5 /* ObservableType+PrimitiveSequence.swift */; }; + E931E4B7ED6AC4EE078413311FD623FC /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AAC2E3B34AD921C4DD4E9F20888BD8F /* SessionDelegate.swift */; }; + EA377F55280BB4DB0977C6B851E76C2C /* Multicast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 896EF46C4260C706795EE477D84B92C5 /* Multicast.swift */; }; + EA5568FD865CDC270C7FDF9D07C12A3A /* ImageView+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C453C15EA3F03E9ADD5E481D797FACD /* ImageView+Kingfisher.swift */; }; + EC23F29D2C7B9152F3233DF049A1EE39 /* AtomicInt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0219F877DE8FB5B8390B716F32C04945 /* AtomicInt.swift */; }; + EC4D53B1BC4EB5390F74BDE60EDAE214 /* AsyncLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = F358AF61F9B33D43FFA1B8F9C5B2CD0D /* AsyncLock.swift */; }; + EC956D27982D69BF6B130038DE212367 /* ToArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = 376C376AD22B84530024BD485AA0B630 /* ToArray.swift */; }; + EDB130D89644C795A4A2E17CE0305303 /* WithLatestFrom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A7F1E7E5785B9807E4F78D56A5F4BF /* WithLatestFrom.swift */; }; + EDC93BD7B9262119AE145E4C7A9D0212 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA7EE75418928B44E4CB6F49E367D780 /* Request.swift */; }; + EE90ED93B7DA1077B2719ACD0F5C3190 /* CombineLatest+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = A22DB6847FFD3AC7CD964EDAE1B93C2F /* CombineLatest+arity.swift */; }; + EEADFC5C1C5EC6E3E20506B8E069931D /* KeychainAccess-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D46A94B50ABB881AB5BC98266432AA41 /* KeychainAccess-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EF3991B6151D1EAD5C4B87ADBA8CE991 /* WKInterfaceImage+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = E949103FD36DE87EF284F00703F63E76 /* WKInterfaceImage+Kingfisher.swift */; }; + EF57BD189600FEFBA65A04F840192612 /* GIFAnimatedImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7188EBAD5921CACC9E504E9F85031344 /* GIFAnimatedImage.swift */; }; + F0F3224FF592F9BA2A044A2FC2BD4CCD /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93A7692D1C5ACCC47AA5BB9E8AD30CEF /* Validation.swift */; }; + F1543EC3846F2E15359F430E948DDF4E /* First.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A54D4C1F92B629B4B4E893C18E627B /* First.swift */; }; + F19E2530F8D6A2E77237F8EF833CDC3F /* CombineLatest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F29C80DD5DC50DFFDE37AD9335ACA535 /* CombineLatest.swift */; }; + F44F054D9ED0F79A2779274CA3CF51A1 /* Using.swift in Sources */ = {isa = PBXBuildFile; fileRef = 047EC44A0A9520988020CA0DD05BB0B9 /* Using.swift */; }; + F6B16DC8CADA07287C6A372AC8AD787C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F16DE93868A621D529E6F58B590A52F6 /* Foundation.framework */; }; + F70EF854395CDE981A8336E4FF0310FE /* URLSessionConfiguration+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 003512BFB651C42047495A9CBDE2F773 /* URLSessionConfiguration+Alamofire.swift */; }; + F73CDB9658982F89437A1F4CDC144821 /* Platform.Linux.swift in Sources */ = {isa = PBXBuildFile; fileRef = 709A6D5EB16F39F8619358C0CA8E2CEF /* Platform.Linux.swift */; }; + F824D8B4E40E8CD1DECD73091700F6E1 /* Completable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A40520DFE818B7A2724B53A8B45F725C /* Completable.swift */; }; + F9CCB1BC57BA36F85953C081C8473456 /* Merge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E97A696DA30A54EDAF4DB2AC1197E24 /* Merge.swift */; }; + FB38D9498D76115C61C207652A90140B /* String+MD5.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4DD61BE537D88D61F14AD36AEAAAF56 /* String+MD5.swift */; }; + FBBA65DCD3D997437F8293CD97880D84 /* Timeout.swift in Sources */ = {isa = PBXBuildFile; fileRef = C455780032C7F86376EB849CBC98D115 /* Timeout.swift */; }; + FC7C6C4F25A77710D646A2B8D1ED4737 /* Maybe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C72FE3611A3540C95FAA9190B252430 /* Maybe.swift */; }; + FD0C2FD8AF7C9B0704B9D5143E0ABD35 /* SchedulerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8845B45D7EAEAB167EB6CD70BB0A460 /* SchedulerType.swift */; }; + FEAF8F3D9F922D73FEE7B2EE8E02C74F /* InfiniteSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CBE438A20AB015176E28AEB53889F99 /* InfiniteSequence.swift */; }; + FF50AA7746ABDF3E94BD1401903B8F2C /* Bag+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3E66B958F6C34F5FE2FAF7ACFA5D3FC /* Bag+Rx.swift */; }; + FF50B50E6D4965F1CC418B00A8C8C42C /* SubscribeOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A8EB607FBF31872ED7B39A5A11C2267 /* SubscribeOn.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 07F9227876E96A5D6B07CA1733513A53 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; + remoteInfo = Alamofire; + }; 0AC6C753A2B7F41276942CCDAB7A6976 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -26,46 +289,440 @@ remoteGlobalIDString = 88BE9EE64421AA70EFFB01FADBD15BCA; remoteInfo = "Pods-ZarinPal-Challenge"; }; + 20F6A8C47FD84D1FDCE8077CF4C04FC8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; + remoteInfo = Alamofire; + }; + 3313AACA06A2C66FD2320270AE628F0E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 615C831BCE925ED486B225B87E44926D; + remoteInfo = KeychainAccess; + }; + 6A8F6219296DF86CCF2A225506DB86EA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 615C831BCE925ED486B225B87E44926D; + remoteInfo = KeychainAccess; + }; + 6CDC0D90057EA0191C186AD1D563CD78 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E8022D22FAA6690B5E1C379C1BCE1491; + remoteInfo = Kingfisher; + }; + 85B9500BA13D9556E5B2C293F44C9D1D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1A538A5499B1706F0983D6826042657B; + remoteInfo = RxAlamofire; + }; + 8C360A8D883901B9ACEE2AD664DAEC1C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1A538A5499B1706F0983D6826042657B; + remoteInfo = RxAlamofire; + }; + 9D6E5DC2920F80289DA1ECD0A7444F07 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F; + remoteInfo = RxSwift; + }; + B4FA3FA5BF35DC5C0C1CC3B0BFEB2D48 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F; + remoteInfo = RxSwift; + }; + B7408713D836E3C1A3BF0D064CDE3C32 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E8022D22FAA6690B5E1C379C1BCE1491; + remoteInfo = Kingfisher; + }; + DD07ED53F211BF68E0369A587EB2414E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F; + remoteInfo = RxSwift; + }; + EF2FD7A8BFFD7B1EAE6A98C8451F20AC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; + remoteInfo = Alamofire; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 0011C6B1E7E4642848AC91AF9D110B8E /* Producer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Producer.swift; path = RxSwift/Observables/Producer.swift; sourceTree = ""; }; + 003512BFB651C42047495A9CBDE2F773 /* URLSessionConfiguration+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLSessionConfiguration+Alamofire.swift"; path = "Source/URLSessionConfiguration+Alamofire.swift"; sourceTree = ""; }; + 00B0934841EF469285C479DC89F819A3 /* BooleanDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BooleanDisposable.swift; path = RxSwift/Disposables/BooleanDisposable.swift; sourceTree = ""; }; 00FB01FED72F213D4108B2DA7E79F146 /* Pods_ZarinPal_Challenge_ZarinPal_ChallengeUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_ZarinPal_Challenge_ZarinPal_ChallengeUITests.framework; path = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 0B0ABF9F2F9BCE165A823DCE7CBBC407 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.plist"; sourceTree = ""; }; - 0C91FA78C95C3EC496F244C22B95B391 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.modulemap"; sourceTree = ""; }; - 10A80CBE3B571F8ACCBDD3177BC66F2E /* Pods-ZarinPal-Challenge-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ZarinPal-Challenge-acknowledgements.markdown"; sourceTree = ""; }; - 1948AFEC898E25BA832E04F4A208574D /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-umbrella.h"; sourceTree = ""; }; - 284E0AE441EB6C425742D433DEDF9F55 /* Pods-ZarinPal-ChallengeTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ZarinPal-ChallengeTests.modulemap"; sourceTree = ""; }; - 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 4728D22E0B97E533341E7DB8392B6F7C /* Pods-ZarinPal-Challenge-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ZarinPal-Challenge-umbrella.h"; sourceTree = ""; }; - 56EAC788B05D9880ABB8F56146B1719E /* Pods-ZarinPal-ChallengeTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ZarinPal-ChallengeTests-umbrella.h"; sourceTree = ""; }; - 5B72014EE182AFF18E61C039EB8B1B50 /* Pods-ZarinPal-ChallengeTests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ZarinPal-ChallengeTests-Info.plist"; sourceTree = ""; }; - 6A058E279EA05AF8E63FE25EF8D890A2 /* Pods-ZarinPal-ChallengeTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ZarinPal-ChallengeTests-acknowledgements.plist"; sourceTree = ""; }; - 6BE70C650FDB60FC8863F68F7453D797 /* Pods-ZarinPal-Challenge-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ZarinPal-Challenge-dummy.m"; sourceTree = ""; }; - 76F9E8516DD08D023112D21337D25B01 /* Pods-ZarinPal-Challenge.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ZarinPal-Challenge.release.xcconfig"; sourceTree = ""; }; - 804D79F783479FF1E143EF9AD9215823 /* Pods-ZarinPal-ChallengeTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ZarinPal-ChallengeTests-acknowledgements.markdown"; sourceTree = ""; }; + 0163A1A23827FD076DAAFF8643F5F4EB /* AddRef.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AddRef.swift; path = RxSwift/Observables/AddRef.swift; sourceTree = ""; }; + 0219F877DE8FB5B8390B716F32C04945 /* AtomicInt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AtomicInt.swift; path = Platform/AtomicInt.swift; sourceTree = ""; }; + 033D48EB997314056439AF54C5624E73 /* DispatchQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Alamofire.swift"; path = "Source/DispatchQueue+Alamofire.swift"; sourceTree = ""; }; + 047EC44A0A9520988020CA0DD05BB0B9 /* Using.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Using.swift; path = RxSwift/Observables/Using.swift; sourceTree = ""; }; + 0619C9B50A883817FECE679E29B77B8D /* Materialize.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Materialize.swift; path = RxSwift/Observables/Materialize.swift; sourceTree = ""; }; + 067D90F0CEB95D96E30D1284A3E5784D /* Take.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Take.swift; path = RxSwift/Observables/Take.swift; sourceTree = ""; }; + 06A4AE1E6EC369DA7ADF37D8EE493622 /* Repeat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Repeat.swift; path = RxSwift/Observables/Repeat.swift; sourceTree = ""; }; + 06D782CA9C5B920E27943C1253E7A91C /* RxAlamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxAlamofire.swift; path = Sources/RxAlamofire/RxAlamofire.swift; sourceTree = ""; }; + 0816990BD0B647AF5164D6E6455F3234 /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = ""; }; + 09361BA8E6E6E82C50B7BCC6CBCAEEB5 /* SynchronizedUnsubscribeType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SynchronizedUnsubscribeType.swift; path = RxSwift/Concurrency/SynchronizedUnsubscribeType.swift; sourceTree = ""; }; + 0B7244FA93A7E9CFF252783CAAC1AAE9 /* GroupBy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GroupBy.swift; path = RxSwift/Observables/GroupBy.swift; sourceTree = ""; }; + 0C23D1FA69B75625AD041D49B5D3DF31 /* Queue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Queue.swift; path = Platform/DataStructures/Queue.swift; sourceTree = ""; }; + 0C4A54FA7A143556993AD19B5EADBFAC /* Pods-ZarinPal-Challenge.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ZarinPal-Challenge.release.xcconfig"; sourceTree = ""; }; + 0CBA85CA17C1A3024B7628C885ECFA77 /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/NetworkReachabilityManager.swift; sourceTree = ""; }; + 0CCDDE871B2139C7EDAB41A4454F90FD /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = Sources/Image/Filter.swift; sourceTree = ""; }; + 0FC6E94F796A1AA30B7E4204CE34A016 /* ImageFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageFormat.swift; path = Sources/Image/ImageFormat.swift; sourceTree = ""; }; + 10383D568E058B336D2E0BCDF8FC7183 /* AsyncSubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncSubject.swift; path = RxSwift/Subjects/AsyncSubject.swift; sourceTree = ""; }; + 1255257C12D9B24FA466C9EF40218D59 /* URLConvertible+URLRequestConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLConvertible+URLRequestConvertible.swift"; path = "Source/URLConvertible+URLRequestConvertible.swift"; sourceTree = ""; }; + 138A16EFF3D4B96475E0F28D47F7C0B8 /* Pods-ZarinPal-ChallengeTests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ZarinPal-ChallengeTests-acknowledgements.plist"; sourceTree = ""; }; + 14DF196F359C86C4037554CDB65CCC22 /* AnonymousDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnonymousDisposable.swift; path = RxSwift/Disposables/AnonymousDisposable.swift; sourceTree = ""; }; + 1518C616F78424562879952E20839BFF /* Buffer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Buffer.swift; path = RxSwift/Observables/Buffer.swift; sourceTree = ""; }; + 15C3C06DBF0CA2E5A0A2DE9923E46CF6 /* TakeWhile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TakeWhile.swift; path = RxSwift/Observables/TakeWhile.swift; sourceTree = ""; }; + 15D9BC62D6D57370EFEFEFD5DDE897C2 /* Date+Dispatch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+Dispatch.swift"; path = "RxSwift/Date+Dispatch.swift"; sourceTree = ""; }; + 15DA68FD6FFD207DE3CDF2B968450088 /* Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Deprecated.swift; path = Sources/General/Deprecated.swift; sourceTree = ""; }; + 15DB35DD9697244A12950FC1B67DB0F1 /* Pods-ZarinPal-Challenge.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ZarinPal-Challenge.debug.xcconfig"; sourceTree = ""; }; + 16307324F2D97556F5663C1EF3F95C21 /* HTTPMethod.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPMethod.swift; path = Source/HTTPMethod.swift; sourceTree = ""; }; + 17C6926A88CA28D8CF5B4ACF2EC35275 /* Session.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Session.swift; path = Source/Session.swift; sourceTree = ""; }; + 1832BC12CCF01A67A35FCE20F63011F9 /* StartWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StartWith.swift; path = RxSwift/Observables/StartWith.swift; sourceTree = ""; }; + 18969F8C7C53F2B0400640CA17BFDF84 /* ShareReplayScope.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShareReplayScope.swift; path = RxSwift/Observables/ShareReplayScope.swift; sourceTree = ""; }; + 191AC4F4AB5BD56DFD263E48E1AB2B8E /* NSButton+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSButton+Kingfisher.swift"; path = "Sources/Extensions/NSButton+Kingfisher.swift"; sourceTree = ""; }; + 1962990E7F16E9A519C7FD45C1A848AE /* RedirectHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RedirectHandler.swift; path = Sources/Networking/RedirectHandler.swift; sourceTree = ""; }; + 1BBE48394B7DEB868314A28A14C013A0 /* Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debug.swift; path = RxSwift/Observables/Debug.swift; sourceTree = ""; }; + 1C420C7B75B0C01159361D7D6B45FB73 /* Catch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Catch.swift; path = RxSwift/Observables/Catch.swift; sourceTree = ""; }; + 1C99CF11179ADC96B280669E661C33C8 /* Map.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Map.swift; path = RxSwift/Observables/Map.swift; sourceTree = ""; }; + 1CC385D9A0D2447390EFA8694C4B30A3 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-dummy.m"; sourceTree = ""; }; + 1D16A4A1B47ADC3E128041B0E67F1C8E /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-Info.plist"; sourceTree = ""; }; + 1DA388371AC49D5AADC6831CEBD8C044 /* Delegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Delegate.swift; path = Sources/Utility/Delegate.swift; sourceTree = ""; }; + 1E467AA243CBC53964425C936D3C3745 /* SynchronizedOnType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SynchronizedOnType.swift; path = RxSwift/Concurrency/SynchronizedOnType.swift; sourceTree = ""; }; + 1EC2FADB12DB2D36DD25CF92065944BE /* Pods-ZarinPal-Challenge-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ZarinPal-Challenge-acknowledgements.markdown"; sourceTree = ""; }; + 1FAA7A0AA8B61FAF0B63596361D1DD85 /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = ""; }; + 1FE5A7D0621A9048C3A4C6D5976C1276 /* Platform.Darwin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Darwin.swift; path = Platform/Platform.Darwin.swift; sourceTree = ""; }; + 2051B1D402139C1AC8CE76A86FC9B296 /* Lock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Lock.swift; path = RxSwift/Concurrency/Lock.swift; sourceTree = ""; }; + 20E0F58B3D3E556A35D8C70C2A28C1AC /* ImageDownloaderDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDownloaderDelegate.swift; path = Sources/Networking/ImageDownloaderDelegate.swift; sourceTree = ""; }; + 224251C3803F296E4A9EB47ED35DEABB /* Source.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Source.swift; path = Sources/General/ImageSource/Source.swift; sourceTree = ""; }; + 22DE75871201BB99F6D9A90E05FEF721 /* InvocableScheduledItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InvocableScheduledItem.swift; path = RxSwift/Schedulers/Internal/InvocableScheduledItem.swift; sourceTree = ""; }; + 24B59CF553A8DD29152DA27721FAB201 /* KeychainAccess.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = KeychainAccess.modulemap; sourceTree = ""; }; + 263551EF170EE4E8E6D14A53C7DECCF1 /* ScheduledItemType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScheduledItemType.swift; path = RxSwift/Schedulers/Internal/ScheduledItemType.swift; sourceTree = ""; }; + 26936794D1DB66B45A2D862EA320F37F /* Runtime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Runtime.swift; path = Sources/Utility/Runtime.swift; sourceTree = ""; }; + 2758E7E37F4B367F8FDC32BC2BD165A6 /* Kingfisher.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Kingfisher.modulemap; sourceTree = ""; }; + 27A44183300B3E3DA1B191EF6640DB12 /* Sequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sequence.swift; path = RxSwift/Observables/Sequence.swift; sourceTree = ""; }; + 2CCEC5EC3875D020AC32E4DA3EFD7122 /* Concat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Concat.swift; path = RxSwift/Observables/Concat.swift; sourceTree = ""; }; + 2DD65F1925A20337FF64BAC0F9E630E6 /* VirtualTimeConverterType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VirtualTimeConverterType.swift; path = RxSwift/Schedulers/VirtualTimeConverterType.swift; sourceTree = ""; }; + 2E9CCD3A70426E65B698489963A19CE8 /* Observable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Observable.swift; path = RxSwift/Observable.swift; sourceTree = ""; }; + 2F935AC1A23CB48A9D36A15A31529B8B /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Errors.swift; path = RxSwift/Errors.swift; sourceTree = ""; }; + 2FB0C07A7647943777785C6F7A0A4211 /* Resource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Resource.swift; path = Sources/General/ImageSource/Resource.swift; sourceTree = ""; }; + 30A54D4C1F92B629B4B4E893C18E627B /* First.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = First.swift; path = RxSwift/Observables/First.swift; sourceTree = ""; }; + 32B4E6D659A35EBDB998712E84645779 /* MultipartUpload.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartUpload.swift; path = Source/MultipartUpload.swift; sourceTree = ""; }; + 3516252C90B00D97DD37F111D5CB8FC4 /* ExtensionHelpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExtensionHelpers.swift; path = Sources/Utility/ExtensionHelpers.swift; sourceTree = ""; }; + 3724C9716235E3349686B3673358041A /* Sink.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sink.swift; path = RxSwift/Observables/Sink.swift; sourceTree = ""; }; + 376C376AD22B84530024BD485AA0B630 /* ToArray.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToArray.swift; path = RxSwift/Observables/ToArray.swift; sourceTree = ""; }; + 37C5773E0BD3DF72FAF60DC234A4F508 /* SwiftSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftSupport.swift; path = RxSwift/SwiftSupport/SwiftSupport.swift; sourceTree = ""; }; + 37F077A69ECCFDFA2FE01BB9DA090632 /* PriorityQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PriorityQueue.swift; path = Platform/DataStructures/PriorityQueue.swift; sourceTree = ""; }; + 398E251A70A8FF37C40141988FD7B439 /* GroupedObservable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GroupedObservable.swift; path = RxSwift/GroupedObservable.swift; sourceTree = ""; }; + 3A8EB607FBF31872ED7B39A5A11C2267 /* SubscribeOn.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubscribeOn.swift; path = RxSwift/Observables/SubscribeOn.swift; sourceTree = ""; }; + 3B30026AA233413FC84ADC996DE22F01 /* DisposeBag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DisposeBag.swift; path = RxSwift/Disposables/DisposeBag.swift; sourceTree = ""; }; + 3C3D043CE78177A8BF13D17D4D59A0CF /* DispatchQueue+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Extensions.swift"; path = "Platform/DispatchQueue+Extensions.swift"; sourceTree = ""; }; + 3C453C15EA3F03E9ADD5E481D797FACD /* ImageView+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageView+Kingfisher.swift"; path = "Sources/Extensions/ImageView+Kingfisher.swift"; sourceTree = ""; }; + 3CFDAD9A08A708221B30DBF88A10AC4A /* SubscriptionDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubscriptionDisposable.swift; path = RxSwift/Disposables/SubscriptionDisposable.swift; sourceTree = ""; }; + 3E30DAA1566530999AF15C1051FB55E5 /* ScheduledItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScheduledItem.swift; path = RxSwift/Schedulers/Internal/ScheduledItem.swift; sourceTree = ""; }; + 3EF30F7C629856BCC6C696EF97B97FB3 /* SerialDispatchQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SerialDispatchQueueScheduler.swift; path = RxSwift/Schedulers/SerialDispatchQueueScheduler.swift; sourceTree = ""; }; + 3F07C439F4BA0E8755636317C360D87C /* Single.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Single.swift; path = RxSwift/Traits/Single.swift; sourceTree = ""; }; + 411678192EDF82B2E1D3E6765E8378E7 /* Keychain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Keychain.swift; path = Lib/KeychainAccess/Keychain.swift; sourceTree = ""; }; + 41432D3DEDE04E12AF060D6AF670DBFB /* Pods-ZarinPal-ChallengeTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ZarinPal-ChallengeTests-dummy.m"; sourceTree = ""; }; + 4188BE4EED13391A64998B7B06C5A5E6 /* ServerTrustEvaluation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustEvaluation.swift; path = Source/ServerTrustEvaluation.swift; sourceTree = ""; }; + 4194C92095E70BE84C226A97A345190D /* RxAlamofire.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxAlamofire.debug.xcconfig; sourceTree = ""; }; + 425747CCDD994EA6654A722FE899CFE4 /* ImageTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageTransition.swift; path = Sources/Image/ImageTransition.swift; sourceTree = ""; }; + 42724DF9930FFB0908A11316902EA12A /* ImageProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageProcessor.swift; path = Sources/Image/ImageProcessor.swift; sourceTree = ""; }; + 44F9B41811A622183982C21CB895EFF9 /* AnimatedImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedImageView.swift; path = Sources/Views/AnimatedImageView.swift; sourceTree = ""; }; + 452D7A95615ED2D8C0D6D848304B8993 /* RetryWhen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryWhen.swift; path = RxSwift/Observables/RetryWhen.swift; sourceTree = ""; }; + 45E7F430910C80A083FE82FE3D00ED5A /* Protected.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Protected.swift; path = Source/Protected.swift; sourceTree = ""; }; + 46D4B0D1884B1BA92269E97FE75BA80D /* PrimitiveSequence+Zip+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PrimitiveSequence+Zip+arity.swift"; path = "RxSwift/Traits/PrimitiveSequence+Zip+arity.swift"; sourceTree = ""; }; + 499EE1D4E6FC3579CCC4972A318B056B /* Storage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Storage.swift; path = Sources/Cache/Storage.swift; sourceTree = ""; }; + 49A69E12774D4B9ABA6256B7E1B7F681 /* Pods-ZarinPal-ChallengeTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ZarinPal-ChallengeTests.release.xcconfig"; sourceTree = ""; }; + 49E39F59A2838E494DB264D2EBD454E9 /* Pods-ZarinPal-Challenge-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ZarinPal-Challenge-acknowledgements.plist"; sourceTree = ""; }; + 4BD55471CDDBEFB856C2C4A3DFB92AF2 /* RxAlamofire.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxAlamofire.release.xcconfig; sourceTree = ""; }; + 4C15D4198D93510C817FD2B25F88F5DD /* VirtualTimeScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VirtualTimeScheduler.swift; path = RxSwift/Schedulers/VirtualTimeScheduler.swift; sourceTree = ""; }; + 4C8D0E13D3F067492B9E8207389F24BC /* Pods-ZarinPal-ChallengeTests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ZarinPal-ChallengeTests.modulemap"; sourceTree = ""; }; + 4E2134B59F30BCAF295A3382063C81FB /* ObservableConvertibleType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObservableConvertibleType.swift; path = RxSwift/ObservableConvertibleType.swift; sourceTree = ""; }; + 4E285C79D6D0EED2A23D067825F5BB3D /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.debug.xcconfig"; sourceTree = ""; }; + 4E97A696DA30A54EDAF4DB2AC1197E24 /* Merge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Merge.swift; path = RxSwift/Observables/Merge.swift; sourceTree = ""; }; + 4EB609DC6A4EC7EEFEE3742842A4889E /* Pods-ZarinPal-ChallengeTests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ZarinPal-ChallengeTests-acknowledgements.markdown"; sourceTree = ""; }; + 505BAAA69882749C4B39978C45E5071F /* HistoricalSchedulerTimeConverter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HistoricalSchedulerTimeConverter.swift; path = RxSwift/Schedulers/HistoricalSchedulerTimeConverter.swift; sourceTree = ""; }; + 50EF3ABA5EE474E545B5598E9AC8388B /* KeychainAccess.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = KeychainAccess.debug.xcconfig; sourceTree = ""; }; + 5192029C2A3AB595BCB93B5B25BA3C1B /* Reactive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reactive.swift; path = RxSwift/Reactive.swift; sourceTree = ""; }; + 52B36DBA18B85701C079296C85F81DD0 /* ImmediateSchedulerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImmediateSchedulerType.swift; path = RxSwift/ImmediateSchedulerType.swift; sourceTree = ""; }; + 542070D748C492FE013B67268A1149BA /* AnonymousObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnonymousObserver.swift; path = RxSwift/Observers/AnonymousObserver.swift; sourceTree = ""; }; + 548451D1CD8130451C5B6920CB276AAE /* SerialDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SerialDisposable.swift; path = RxSwift/Disposables/SerialDisposable.swift; sourceTree = ""; }; + 55045F0AA9C2253109330A0D09A8788B /* Disposables.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Disposables.swift; path = RxSwift/Disposables/Disposables.swift; sourceTree = ""; }; + 585FE8397D179AEA53F2D8642F76DD12 /* Kingfisher.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Kingfisher.release.xcconfig; sourceTree = ""; }; + 595DC02CD608D79E79AA7581A772F381 /* BehaviorSubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BehaviorSubject.swift; path = RxSwift/Subjects/BehaviorSubject.swift; sourceTree = ""; }; + 596E21E4DC96E5D01738479FD5E0B374 /* Kingfisher-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Kingfisher-umbrella.h"; sourceTree = ""; }; + 5BB52EC5695EF69491EA624A7ACA40EE /* ImageDataProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDataProcessor.swift; path = Sources/Networking/ImageDataProcessor.swift; sourceTree = ""; }; + 5BDD8B483A5826851D9CBBB5F961A53C /* RxAlamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxAlamofire-prefix.pch"; sourceTree = ""; }; + 5C202705BBEDDA6B392126B8E7D0A090 /* ElementAt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ElementAt.swift; path = RxSwift/Observables/ElementAt.swift; sourceTree = ""; }; + 5C7589BDA048239577D612E858FF653E /* Delay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Delay.swift; path = RxSwift/Observables/Delay.swift; sourceTree = ""; }; + 5D245CE9081855A2718101C3021DC33A /* SwitchIfEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwitchIfEmpty.swift; path = RxSwift/Observables/SwitchIfEmpty.swift; sourceTree = ""; }; + 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Alamofire.framework; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5F7479F086E4965ABA7EC3B3402C602A /* Scan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Scan.swift; path = RxSwift/Observables/Scan.swift; sourceTree = ""; }; + 611BACC53E77BA8F425E243BF2B85747 /* KingfisherManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherManager.swift; path = Sources/General/KingfisherManager.swift; sourceTree = ""; }; + 625C043AAFD384945066C53E7213CA28 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6322AC0EEA5B5127CD6BD565BB71AC8A /* RxSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RxSwift-dummy.m"; sourceTree = ""; }; + 647050628C3D31651EA46C7FD32DFDC3 /* Timer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timer.swift; path = RxSwift/Observables/Timer.swift; sourceTree = ""; }; + 649DD429D576558D8EAE452744540E3C /* Indicator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Indicator.swift; path = Sources/Views/Indicator.swift; sourceTree = ""; }; + 66572EED79FE2C5D0F72ED42197B47E2 /* SynchronizedDisposeType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SynchronizedDisposeType.swift; path = RxSwift/Concurrency/SynchronizedDisposeType.swift; sourceTree = ""; }; + 668B5EF350CBA0BC77C647E9B9CE41FE /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.plist"; sourceTree = ""; }; + 67A7F1E7E5785B9807E4F78D56A5F4BF /* WithLatestFrom.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WithLatestFrom.swift; path = RxSwift/Observables/WithLatestFrom.swift; sourceTree = ""; }; + 6C9B05237DDBB04D89F523B57A2882D4 /* OperationQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "OperationQueue+Alamofire.swift"; path = "Source/OperationQueue+Alamofire.swift"; sourceTree = ""; }; + 6DB31277BAA8C023523621013FF67E0A /* Pods-ZarinPal-Challenge-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ZarinPal-Challenge-umbrella.h"; sourceTree = ""; }; + 6EA51507F94CDAA42B238B03E0695740 /* DisposeBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DisposeBase.swift; path = RxSwift/Disposables/DisposeBase.swift; sourceTree = ""; }; + 6EB7A1B7B33664FCBB2BBAEF74F39520 /* Debounce.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debounce.swift; path = RxSwift/Observables/Debounce.swift; sourceTree = ""; }; + 6EFE49B6A3F2ACACA53EDC9B6BA55FFB /* Zip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Zip.swift; path = RxSwift/Observables/Zip.swift; sourceTree = ""; }; + 70279BF6B621244FD4E99E3FA969BF84 /* Optional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Optional.swift; path = RxSwift/Observables/Optional.swift; sourceTree = ""; }; + 709A6D5EB16F39F8619358C0CA8E2CEF /* Platform.Linux.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Linux.swift; path = Platform/Platform.Linux.swift; sourceTree = ""; }; + 711E4C6C8201883EF21BBB65E1CEAC3A /* SubjectType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubjectType.swift; path = RxSwift/Subjects/SubjectType.swift; sourceTree = ""; }; + 7188EBAD5921CACC9E504E9F85031344 /* GIFAnimatedImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GIFAnimatedImage.swift; path = Sources/Image/GIFAnimatedImage.swift; sourceTree = ""; }; + 71BFEB65345E8645CC3562C4A6B5C629 /* RxAlamofire-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RxAlamofire-Info.plist"; sourceTree = ""; }; + 7395E4F40EBB212BF7591C8BB3B2324B /* URLRequest+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLRequest+Alamofire.swift"; path = "Source/URLRequest+Alamofire.swift"; sourceTree = ""; }; + 74BCBABA22721DDE14E1DF04A4A9B197 /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = RxSwift/Observables/Filter.swift; sourceTree = ""; }; + 74F638687F4F370F858B0DEF3E0DCA20 /* Enumerated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Enumerated.swift; path = RxSwift/Observables/Enumerated.swift; sourceTree = ""; }; + 752796ACBEA305EEBEFD748A8679CBE0 /* ImagePrefetcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePrefetcher.swift; path = Sources/Networking/ImagePrefetcher.swift; sourceTree = ""; }; + 75D2F1F4AEA67AEFDC563FCA98B4EBDF /* Placeholder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Placeholder.swift; path = Sources/Image/Placeholder.swift; sourceTree = ""; }; + 7690DCA3815B4ED5896D32F4B3DCCEA9 /* TakeUntil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TakeUntil.swift; path = RxSwift/Observables/TakeUntil.swift; sourceTree = ""; }; + 779429C210EDC0C06EBD930C6BBD7EE8 /* ConnectableObservableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConnectableObservableType.swift; path = RxSwift/ConnectableObservableType.swift; sourceTree = ""; }; + 77DFF13F2B81549F9DD38C73E89EA10C /* RxAlamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RxAlamofire.modulemap; sourceTree = ""; }; + 7817B6DBD169C012BE328C62A192F536 /* NopDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NopDisposable.swift; path = RxSwift/Disposables/NopDisposable.swift; sourceTree = ""; }; + 78314C24026D355F2120A42FF58645BB /* BinaryDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryDisposable.swift; path = RxSwift/Disposables/BinaryDisposable.swift; sourceTree = ""; }; + 783D248D632226E588DDC9279F79ECA7 /* RxSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RxSwift-Info.plist"; sourceTree = ""; }; + 7883D1C1517EA40EF4F9D39A31AFA589 /* AsMaybe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsMaybe.swift; path = RxSwift/Observables/AsMaybe.swift; sourceTree = ""; }; + 78A7BAD672685269AC67907327DA460C /* Alamofire-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Alamofire-Info.plist"; sourceTree = ""; }; + 7931779C1BB2C10D2765E7EFF85AAF5A /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; + 796162A58C7D71468DDBCA974A78FCE6 /* Kingfisher.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Kingfisher.debug.xcconfig; sourceTree = ""; }; + 7A62FAB858F3CC04CB87BE6E46917A2D /* DispatchQueueConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DispatchQueueConfiguration.swift; path = RxSwift/Schedulers/Internal/DispatchQueueConfiguration.swift; sourceTree = ""; }; + 7B2FE69DD8F204BABC508F0960865E11 /* AFError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AFError.swift; path = Source/AFError.swift; sourceTree = ""; }; + 7C72FE3611A3540C95FAA9190B252430 /* Maybe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Maybe.swift; path = RxSwift/Traits/Maybe.swift; sourceTree = ""; }; + 7C75C99593AD1C9F5E331A6DFD0316A9 /* Window.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Window.swift; path = RxSwift/Observables/Window.swift; sourceTree = ""; }; + 7E45F3DDA76A18F2A034B475FEFC0A25 /* SizeExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SizeExtensions.swift; path = Sources/Utility/SizeExtensions.swift; sourceTree = ""; }; + 7EC61B634F24D93EF78D589CE18B259F /* Empty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Empty.swift; path = RxSwift/Observables/Empty.swift; sourceTree = ""; }; + 7F9539204CF012E6654FF52214BF2EAF /* Alamofire.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.release.xcconfig; sourceTree = ""; }; + 7FCCA4D3DE137F71ED26397453C864F4 /* CombineLatest+Collection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CombineLatest+Collection.swift"; path = "RxSwift/Observables/CombineLatest+Collection.swift"; sourceTree = ""; }; + 7FD43A4D2098C5F88D34781D52645C62 /* RxSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxSwift-prefix.pch"; sourceTree = ""; }; + 809C5FAB588354C9BA37DC3EAB8CB45C /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RxSwift.framework; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 80E74EF4893B488FF857A8CE4FDC1EE9 /* SchedulerServices+Emulation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SchedulerServices+Emulation.swift"; path = "RxSwift/Schedulers/SchedulerServices+Emulation.swift"; sourceTree = ""; }; + 821D74ADF0234940ED98AA4468E72292 /* Result+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Result+Alamofire.swift"; path = "Source/Result+Alamofire.swift"; sourceTree = ""; }; + 82F1475AA0F9C33F7EA4A1459305D2AB /* RxAlamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RxAlamofire.framework; path = RxAlamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 839CDDA883AD160622114D395B0BC0AE /* Box.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Box.swift; path = Sources/Utility/Box.swift; sourceTree = ""; }; + 83FFAA34C0694F74BFED60ADD4A079BF /* FormatIndicatedCacheSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FormatIndicatedCacheSerializer.swift; path = Sources/Cache/FormatIndicatedCacheSerializer.swift; sourceTree = ""; }; + 85255EDEC8EAC6DD99F50FC3DB6E987A /* Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Rx.swift; path = RxSwift/Rx.swift; sourceTree = ""; }; + 86BB7362A7F94E6674FBA969CE6F1193 /* MemoryStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MemoryStorage.swift; path = Sources/Cache/MemoryStorage.swift; sourceTree = ""; }; + 8745E70DA5DDFA43561CF26761E4ADA2 /* Kingfisher-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Kingfisher-Info.plist"; sourceTree = ""; }; + 8873416F0C46F0D3F62AC5B0E190ECF8 /* CurrentThreadScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CurrentThreadScheduler.swift; path = RxSwift/Schedulers/CurrentThreadScheduler.swift; sourceTree = ""; }; + 88DEE843952EBE6C6762EAF82B046C9D /* Event.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Event.swift; path = RxSwift/Event.swift; sourceTree = ""; }; + 896EF46C4260C706795EE477D84B92C5 /* Multicast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Multicast.swift; path = RxSwift/Observables/Multicast.swift; sourceTree = ""; }; + 898992236FDF6CE427D1877E0CCA7BE1 /* Zip+Collection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Zip+Collection.swift"; path = "RxSwift/Observables/Zip+Collection.swift"; sourceTree = ""; }; + 89D56CAC2344B9B4CAE2ED6EFA61B765 /* TakeLast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TakeLast.swift; path = RxSwift/Observables/TakeLast.swift; sourceTree = ""; }; + 8A0CAA48847F34C17E584A88FD6DECE6 /* Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Kingfisher.swift; path = Sources/General/Kingfisher.swift; sourceTree = ""; }; + 8BD4796079AEAA1770BB626C3E2F3C1F /* InvocableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InvocableType.swift; path = RxSwift/Schedulers/Internal/InvocableType.swift; sourceTree = ""; }; + 8BD5A4A0F520D7F44B09D4D7C4E71436 /* Alamofire.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.debug.xcconfig; sourceTree = ""; }; + 8E4B6CBE9137985EBA69A31705F63360 /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; }; + 8EBC04A2929D255B059B8CC2703D7914 /* TailRecursiveSink.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TailRecursiveSink.swift; path = RxSwift/Observers/TailRecursiveSink.swift; sourceTree = ""; }; + 8ECF395E7136282FABAAE9C22A38CA65 /* LockOwnerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LockOwnerType.swift; path = RxSwift/Concurrency/LockOwnerType.swift; sourceTree = ""; }; + 8EDE466EC1A478252595CBA349FB4F16 /* Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Image.swift; path = Sources/Image/Image.swift; sourceTree = ""; }; + 8EF246C1C14FDA286E4114E521736804 /* PublishSubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PublishSubject.swift; path = RxSwift/Subjects/PublishSubject.swift; sourceTree = ""; }; 8F0FD7C85D23FD1B911114D3FD8FAF99 /* Pods_ZarinPal_ChallengeTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_ZarinPal_ChallengeTests.framework; path = "Pods-ZarinPal-ChallengeTests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 929150D77AAB71741A9E9FCADCD08D8F /* Pods-ZarinPal-ChallengeTests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ZarinPal-ChallengeTests-dummy.m"; sourceTree = ""; }; + 90E6DDADC786F2FC74E5285DB0A1FA57 /* DelaySubscription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DelaySubscription.swift; path = RxSwift/Observables/DelaySubscription.swift; sourceTree = ""; }; + 9262D50865B81A98A03B217562B46E36 /* RefCountDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RefCountDisposable.swift; path = RxSwift/Disposables/RefCountDisposable.swift; sourceTree = ""; }; + 929A0F24C55E82B06835285648FDA85C /* ObserverType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObserverType.swift; path = RxSwift/ObserverType.swift; sourceTree = ""; }; + 93A7692D1C5ACCC47AA5BB9E8AD30CEF /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; }; + 959DC66AA00C5F5D78EE2694B6B94991 /* Combine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Combine.swift; path = Source/Combine.swift; sourceTree = ""; }; + 983AC7EFF94E1DD2CE81AFC3C566CCB0 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Response.swift; sourceTree = ""; }; + 990228538A4AEABE2D0621D996709F47 /* RetryStrategy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryStrategy.swift; path = Sources/Networking/RetryStrategy.swift; sourceTree = ""; }; + 9A816703105738BA6F33BA20E63E3B50 /* Throttle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Throttle.swift; path = RxSwift/Observables/Throttle.swift; sourceTree = ""; }; + 9A897ECCF10FBEE07F46FACDCFB00377 /* Cancelable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cancelable.swift; path = RxSwift/Cancelable.swift; sourceTree = ""; }; + 9A95F076F066F9CC07BE99760C4C47B5 /* ImageCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageCache.swift; path = Sources/Cache/ImageCache.swift; sourceTree = ""; }; + 9AAC2E3B34AD921C4DD4E9F20888BD8F /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Sources/Networking/SessionDelegate.swift; sourceTree = ""; }; + 9C3B1942F281B93DA5D5F54340E1C5B4 /* Deferred.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Deferred.swift; path = RxSwift/Observables/Deferred.swift; sourceTree = ""; }; + 9CBE438A20AB015176E28AEB53889F99 /* InfiniteSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InfiniteSequence.swift; path = Platform/DataStructures/InfiniteSequence.swift; sourceTree = ""; }; 9D18D3EFD64979CC9E51244495894E68 /* Pods_ZarinPal_Challenge.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_ZarinPal_Challenge.framework; path = "Pods-ZarinPal-Challenge.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - A35D144A2A827E3093DBF7ACFA83FD08 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-dummy.m"; sourceTree = ""; }; - B02EBCC0F574FB26E202E16AA0F135A2 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.release.xcconfig"; sourceTree = ""; }; - C32A9CC20041EA73B140D2D1D3C0668A /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.markdown"; sourceTree = ""; }; - C8DEEA5207995F84B221CD03C3C6AEFC /* Pods-ZarinPal-ChallengeTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ZarinPal-ChallengeTests.debug.xcconfig"; sourceTree = ""; }; - DBC198BF4A0654FD9E522AD044C4B50E /* Pods-ZarinPal-Challenge-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ZarinPal-Challenge-acknowledgements.plist"; sourceTree = ""; }; - DD50DB8F66C7CD185621AECCE59A51E4 /* Pods-ZarinPal-Challenge.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ZarinPal-Challenge.debug.xcconfig"; sourceTree = ""; }; - E59F433F8DFE3257CF592642FB4A172B /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.debug.xcconfig"; sourceTree = ""; }; - EDE3D976A20897ED29659CFD88C80464 /* Pods-ZarinPal-Challenge-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ZarinPal-Challenge-Info.plist"; sourceTree = ""; }; - F1BC30C98D8B4051D36FEE679FA91FF1 /* Pods-ZarinPal-ChallengeTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ZarinPal-ChallengeTests.release.xcconfig"; sourceTree = ""; }; - F924769908C01233B6AD1A1CE9381219 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-Info.plist"; sourceTree = ""; }; - FBDDF7A57DCEDA30DDF609DA5286FA56 /* Pods-ZarinPal-Challenge.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ZarinPal-Challenge.modulemap"; sourceTree = ""; }; + 9DC52BCA7ED71CD24EC349C7D3AEE386 /* Kingfisher-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Kingfisher-prefix.pch"; sourceTree = ""; }; + 9EBAB60C5897051C2316213F5F7142A1 /* Range.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Range.swift; path = RxSwift/Observables/Range.swift; sourceTree = ""; }; + 9F50A523458C90015E8A7E5A1A7C781A /* KeychainAccess-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "KeychainAccess-prefix.pch"; sourceTree = ""; }; + 9FF19B8AC8BA3F0AE260F8022B4FD622 /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Alamofire.modulemap; sourceTree = ""; }; + A04C4F43B9777A2414B11DEEC8A58F9E /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; + A20555107FDA9102C5AA9893640EFE06 /* DistinctUntilChanged.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DistinctUntilChanged.swift; path = RxSwift/Observables/DistinctUntilChanged.swift; sourceTree = ""; }; + A21656C83B0771ED29EF71B73F5AE5A7 /* Pods-ZarinPal-ChallengeTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ZarinPal-ChallengeTests.debug.xcconfig"; sourceTree = ""; }; + A22DB6847FFD3AC7CD964EDAE1B93C2F /* CombineLatest+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CombineLatest+arity.swift"; path = "RxSwift/Observables/CombineLatest+arity.swift"; sourceTree = ""; }; + A30716C79782F65418DB4BAF64AF01F2 /* RxSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxSwift.release.xcconfig; sourceTree = ""; }; + A3E66B958F6C34F5FE2FAF7ACFA5D3FC /* Bag+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Bag+Rx.swift"; path = "RxSwift/Extensions/Bag+Rx.swift"; sourceTree = ""; }; + A40520DFE818B7A2724B53A8B45F725C /* Completable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Completable.swift; path = RxSwift/Traits/Completable.swift; sourceTree = ""; }; + A4DD61BE537D88D61F14AD36AEAAAF56 /* String+MD5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+MD5.swift"; path = "Sources/Utility/String+MD5.swift"; sourceTree = ""; }; + A73DF35D76323C984D36C30A76BF3662 /* SessionDataTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDataTask.swift; path = Sources/Networking/SessionDataTask.swift; sourceTree = ""; }; + A7EA148ECCDA9A1E40339417AE013699 /* RetryPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryPolicy.swift; path = Source/RetryPolicy.swift; sourceTree = ""; }; + A8581CE9DD99FC0BBD1593683726A157 /* DiskStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiskStorage.swift; path = Sources/Cache/DiskStorage.swift; sourceTree = ""; }; + A8AA98D83F767BBB50C079B5F6E2C12C /* Pods-ZarinPal-Challenge-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ZarinPal-Challenge-Info.plist"; sourceTree = ""; }; + A99BDA0F275A32954C7FE17CE3971217 /* CompactMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompactMap.swift; path = RxSwift/Observables/CompactMap.swift; sourceTree = ""; }; + AA912BF88C514FF679F066AD58E83BE9 /* Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Deprecated.swift; path = RxSwift/Deprecated.swift; sourceTree = ""; }; + AAD1EAB246F0E9C0550C6B4E79D567C3 /* SkipWhile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkipWhile.swift; path = RxSwift/Observables/SkipWhile.swift; sourceTree = ""; }; + AB4B735751392F4AAD11CB1047C85047 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/SessionDelegate.swift; sourceTree = ""; }; + AB8D8BABED2806E0E981C83CA88DF724 /* CachedResponseHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CachedResponseHandler.swift; path = Source/CachedResponseHandler.swift; sourceTree = ""; }; + AC2071B5879AC831074F017B1C906A36 /* ConcurrentDispatchQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConcurrentDispatchQueueScheduler.swift; path = RxSwift/Schedulers/ConcurrentDispatchQueueScheduler.swift; sourceTree = ""; }; + AC5D4B0DBB44587D19C8C65883F09863 /* KeychainAccess.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = KeychainAccess.release.xcconfig; sourceTree = ""; }; + ACB2E0F22217B5B18CABEDFD7233EFDB /* ImageDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDataProvider.swift; path = Sources/General/ImageSource/ImageDataProvider.swift; sourceTree = ""; }; + AEA283DF8684AD5C7856CEB1019F2A80 /* ObservableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObservableType.swift; path = RxSwift/ObservableType.swift; sourceTree = ""; }; + B02348A70D0B199DB8AD5E7E33F3DF32 /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = RxSwift/Observables/Error.swift; sourceTree = ""; }; + B039F96FDDEA436B0073B14E48456A1B /* RequestInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestInterceptor.swift; path = Source/RequestInterceptor.swift; sourceTree = ""; }; + B0A97D55EBC1DEFCAA7F8900959EB353 /* Pods-ZarinPal-Challenge-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ZarinPal-Challenge-frameworks.sh"; sourceTree = ""; }; + B10FD73F6398B956B80ED1FE9B3F4669 /* ScheduledDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScheduledDisposable.swift; path = RxSwift/Disposables/ScheduledDisposable.swift; sourceTree = ""; }; + B1215EA13A41048DD10EDE77B642C47A /* Just.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Just.swift; path = RxSwift/Observables/Just.swift; sourceTree = ""; }; + B2F45CC54DB91935D6428EE0F34B68A2 /* CacheSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CacheSerializer.swift; path = Sources/Cache/CacheSerializer.swift; sourceTree = ""; }; + B318FE4ECDD4733B648469CCF5F5D348 /* ImageModifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageModifier.swift; path = Sources/Networking/ImageModifier.swift; sourceTree = ""; }; + B37E6C41F532D8A6247B754478250788 /* RxMutableBox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxMutableBox.swift; path = RxSwift/RxMutableBox.swift; sourceTree = ""; }; + B3840916AD62D98AFC86B38968F5C3E2 /* SingleAssignmentDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SingleAssignmentDisposable.swift; path = RxSwift/Disposables/SingleAssignmentDisposable.swift; sourceTree = ""; }; + B3EC94BDC15D866EAD35E792E357CD33 /* CompositeDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompositeDisposable.swift; path = RxSwift/Disposables/CompositeDisposable.swift; sourceTree = ""; }; + B498806F037717F133D6EC31F49677A5 /* Pods-ZarinPal-ChallengeTests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-ZarinPal-ChallengeTests-Info.plist"; sourceTree = ""; }; + B4A24C974707ED0CDB350DE6BBE5A06C /* RequestTaskMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestTaskMap.swift; path = Source/RequestTaskMap.swift; sourceTree = ""; }; + B4C1BAF37F9B5A72B54646194DBE04A0 /* Generate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Generate.swift; path = RxSwift/Observables/Generate.swift; sourceTree = ""; }; + B5D58610939EE493575A600EA4955385 /* Bag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bag.swift; path = Platform/DataStructures/Bag.swift; sourceTree = ""; }; + B98F850673BC787FD8DDA161AE59E8B5 /* SkipUntil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkipUntil.swift; path = RxSwift/Observables/SkipUntil.swift; sourceTree = ""; }; + BB6C53D40AFB85133C5BD4F3EF6247A9 /* AuthenticationInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthenticationInterceptor.swift; path = Source/AuthenticationInterceptor.swift; sourceTree = ""; }; + BBE5A728B87782FB72878986E6B1FBDC /* CallbackQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CallbackQueue.swift; path = Sources/Utility/CallbackQueue.swift; sourceTree = ""; }; + BE24F13AB43CE46F29E83927CEED6A71 /* AuthenticationChallengeResponsable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthenticationChallengeResponsable.swift; path = Sources/Networking/AuthenticationChallengeResponsable.swift; sourceTree = ""; }; + BE52E3390F764B4330C86E439E7F5DCE /* RxAlamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxAlamofire-umbrella.h"; sourceTree = ""; }; + BFCBF0F60B9C342FE48428BE78CB41B8 /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Sources/Utility/Result.swift; sourceTree = ""; }; + C04AF88A6948CF1AC7B1536ED334704A /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = ""; }; + C27B3571E69AA88981466646F0799CCB /* SingleAsync.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SingleAsync.swift; path = RxSwift/Observables/SingleAsync.swift; sourceTree = ""; }; + C2E668B83F834DA175518604CF39505C /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.release.xcconfig"; sourceTree = ""; }; + C2F494138BA732DB78601BA92401098B /* Pods-ZarinPal-Challenge.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ZarinPal-Challenge.modulemap"; sourceTree = ""; }; + C3234010256E666332F10F54559E9C62 /* Disposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Disposable.swift; path = RxSwift/Disposable.swift; sourceTree = ""; }; + C3F44C782D64D7EB20B61CE3844EBFAD /* Kingfisher.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Kingfisher.framework; path = Kingfisher.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C442203F47CADC5AC901C0F9F97DA865 /* RxAlamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RxAlamofire-dummy.m"; sourceTree = ""; }; + C455780032C7F86376EB849CBC98D115 /* Timeout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timeout.swift; path = RxSwift/Observables/Timeout.swift; sourceTree = ""; }; + C4CC56DB2EFDFFFA75E3AF86CC70144A /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; + C6BA79D4E0DDFE0B71562D24CB6F8F3A /* RedirectHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RedirectHandler.swift; path = Source/RedirectHandler.swift; sourceTree = ""; }; + C75700F5626DBF25E789E328CD7CAD68 /* PrimitiveSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PrimitiveSequence.swift; path = RxSwift/Traits/PrimitiveSequence.swift; sourceTree = ""; }; + C7F048C09A51B3D2E3C39209D49325F9 /* HistoricalScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HistoricalScheduler.swift; path = RxSwift/Schedulers/HistoricalScheduler.swift; sourceTree = ""; }; + CA5D170F0740DBB4909BFF9ED18B53E2 /* Skip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Skip.swift; path = RxSwift/Observables/Skip.swift; sourceTree = ""; }; + CA7EE75418928B44E4CB6F49E367D780 /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = ""; }; + CB80E135AD3BFA2FC07C83876E5912D3 /* RxSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxSwift.debug.xcconfig; sourceTree = ""; }; + CBCFCF079BADA708A65B7579149D4EFA /* Dematerialize.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Dematerialize.swift; path = RxSwift/Observables/Dematerialize.swift; sourceTree = ""; }; + CD08AEC2992892DBC79FBB65549D497A /* DefaultIfEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultIfEmpty.swift; path = RxSwift/Observables/DefaultIfEmpty.swift; sourceTree = ""; }; + CFB3861A0A35150D2E2794B059B009EF /* AlamofireExtended.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlamofireExtended.swift; path = Source/AlamofireExtended.swift; sourceTree = ""; }; + CFF197B432FA90A17243B0025D2E1949 /* Pods-ZarinPal-ChallengeTests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ZarinPal-ChallengeTests-umbrella.h"; sourceTree = ""; }; + D038366E3788022B2F31A117C064C204 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + D066BEE9AB7B657DB9333F2B25FEB75E /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D0D9B6ED1A957C3A83CCBDA87AAC2F56 /* AnyObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyObserver.swift; path = RxSwift/AnyObserver.swift; sourceTree = ""; }; + D0F815E176CFF4358A741576FC6261B4 /* KingfisherOptionsInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherOptionsInfo.swift; path = Sources/General/KingfisherOptionsInfo.swift; sourceTree = ""; }; + D25297CDF54F662FA70E497145DD101C /* Pods-ZarinPal-Challenge-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-ZarinPal-Challenge-dummy.m"; sourceTree = ""; }; + D2F088FFF504CE9AC13BD899F651C0EA /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-frameworks.sh"; sourceTree = ""; }; + D4001B299A45DC7FDA921BDEEFA26E56 /* StringEncoding+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "StringEncoding+Alamofire.swift"; path = "Source/StringEncoding+Alamofire.swift"; sourceTree = ""; }; + D42BD27C7C772F2DD09FD373D6429701 /* ObserverBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObserverBase.swift; path = RxSwift/Observers/ObserverBase.swift; sourceTree = ""; }; + D46142DB79B9FA3A8E4B410DC9C7D684 /* Completable+AndThen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Completable+AndThen.swift"; path = "RxSwift/Traits/Completable+AndThen.swift"; sourceTree = ""; }; + D46A94B50ABB881AB5BC98266432AA41 /* KeychainAccess-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "KeychainAccess-umbrella.h"; sourceTree = ""; }; + D62F09D0BF6DD4046AC49E3950E9A8E3 /* RecursiveScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecursiveScheduler.swift; path = RxSwift/Schedulers/RecursiveScheduler.swift; sourceTree = ""; }; + D71FFD5BF89C5C539EB89EF5FB9D34F9 /* Sample.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sample.swift; path = RxSwift/Observables/Sample.swift; sourceTree = ""; }; + D75E745C30B234F8BD7943A9C517EDD2 /* MainScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MainScheduler.swift; path = RxSwift/Schedulers/MainScheduler.swift; sourceTree = ""; }; + D857181C4673CEF0F9B67620B473D5A9 /* Kingfisher-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Kingfisher-dummy.m"; sourceTree = ""; }; + D8C50F82EF8C4858E5C5D2EFF937B3B7 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-umbrella.h"; sourceTree = ""; }; + D990B2F2A1AFFA9189D6DBED281674E7 /* Create.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Create.swift; path = RxSwift/Observables/Create.swift; sourceTree = ""; }; + D9BAE6364F1F56E36F54E6B7A544B1A1 /* RxSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxSwift-umbrella.h"; sourceTree = ""; }; + DA8647F675FA167A44DF26ECE1202680 /* HTTPHeaders.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPHeaders.swift; path = Source/HTTPHeaders.swift; sourceTree = ""; }; + DADC46AA65EE33A1A024A0F501992328 /* Never.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Never.swift; path = RxSwift/Observables/Never.swift; sourceTree = ""; }; + DAE1D3DB03DB076DBFAAD5DAA48ED42D /* ConcurrentMainScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConcurrentMainScheduler.swift; path = RxSwift/Schedulers/ConcurrentMainScheduler.swift; sourceTree = ""; }; + DB3FC4F6BA974BE61AC9EE45258BE35B /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.modulemap"; sourceTree = ""; }; + DC2315E02B5261A21CD77A2ED9458182 /* EventMonitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EventMonitor.swift; path = Source/EventMonitor.swift; sourceTree = ""; }; + DFD08DC1DB36B66ABDC8604D0CEC4780 /* RxSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RxSwift.modulemap; sourceTree = ""; }; + E140F9C6C1574D1F421E8537B08D642F /* Zip+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Zip+arity.swift"; path = "RxSwift/Observables/Zip+arity.swift"; sourceTree = ""; }; + E2B54AA5756D9BA9B3589B7A8893283E /* ObserveOn.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObserveOn.swift; path = RxSwift/Observables/ObserveOn.swift; sourceTree = ""; }; + E34187EC0B0E5221A5215B62239AE3A5 /* URLEncodedFormEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLEncodedFormEncoder.swift; path = Source/URLEncodedFormEncoder.swift; sourceTree = ""; }; + E35E296BA84ABD61543346D74EC20B81 /* KingfisherError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherError.swift; path = Sources/General/KingfisherError.swift; sourceTree = ""; }; + E384C262E7B0083A152C2E3D41DE348E /* OperationQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OperationQueueScheduler.swift; path = RxSwift/Schedulers/OperationQueueScheduler.swift; sourceTree = ""; }; + E43E429BB6A8864E8DBD3BCAD845A229 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; + E4D93B0C8D66F269E61F2D75BE5E7355 /* Reduce.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reduce.swift; path = RxSwift/Observables/Reduce.swift; sourceTree = ""; }; + E5F8051790E0C8D6A5CD49B339F13AC1 /* Amb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Amb.swift; path = RxSwift/Observables/Amb.swift; sourceTree = ""; }; + E62F4618DFBEA45C47CF9FC8C300E8CC /* ReplaySubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReplaySubject.swift; path = RxSwift/Subjects/ReplaySubject.swift; sourceTree = ""; }; + E636324FF512D5534685DA16D0A9F36D /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Accelerate.framework; sourceTree = DEVELOPER_DIR; }; + E7BD7E88DB95EBAA1FEEABFFFE01689D /* Do.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Do.swift; path = RxSwift/Observables/Do.swift; sourceTree = ""; }; + E8845B45D7EAEAB167EB6CD70BB0A460 /* SchedulerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SchedulerType.swift; path = RxSwift/SchedulerType.swift; sourceTree = ""; }; + E8EE7F078656FABB8F6821D10FF994BB /* KeychainAccess.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = KeychainAccess.framework; path = KeychainAccess.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E9249D191D968E7B7AB75F1324207188 /* ImageDrawing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDrawing.swift; path = Sources/Image/ImageDrawing.swift; sourceTree = ""; }; + E9487D66C60BC6077973AEB3BBAE3EBB /* KeychainAccess-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "KeychainAccess-Info.plist"; sourceTree = ""; }; + E949103FD36DE87EF284F00703F63E76 /* WKInterfaceImage+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "WKInterfaceImage+Kingfisher.swift"; path = "Sources/Extensions/WKInterfaceImage+Kingfisher.swift"; sourceTree = ""; }; + EBD4157159E2FB1C0414CD4D6C0128C6 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.markdown"; sourceTree = ""; }; + EDBF0F688E6A4CD6FBEE0D1743CBBA50 /* ParameterEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoder.swift; path = Source/ParameterEncoder.swift; sourceTree = ""; }; + EF8DF24A1958904B77D9775354DD684D /* UIButton+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIButton+Kingfisher.swift"; path = "Sources/Extensions/UIButton+Kingfisher.swift"; sourceTree = ""; }; + F0107BDA4259CD8AD54654045C68A522 /* RequestModifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestModifier.swift; path = Sources/Networking/RequestModifier.swift; sourceTree = ""; }; + F10E9FF23A84E8D3A2B4F09416BF85A5 /* ObservableType+PrimitiveSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableType+PrimitiveSequence.swift"; path = "RxSwift/Traits/ObservableType+PrimitiveSequence.swift"; sourceTree = ""; }; + F16DE93868A621D529E6F58B590A52F6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + F24ACF8DAB8C608767AE2A45175983DE /* Kingfisher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Kingfisher.h; path = Sources/Kingfisher.h; sourceTree = ""; }; + F24F9003E2ADB9AE86616C247DE54D20 /* ImageProgressive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageProgressive.swift; path = Sources/Image/ImageProgressive.swift; sourceTree = ""; }; + F29C80DD5DC50DFFDE37AD9335ACA535 /* CombineLatest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombineLatest.swift; path = RxSwift/Observables/CombineLatest.swift; sourceTree = ""; }; + F358AF61F9B33D43FFA1B8F9C5B2CD0D /* AsyncLock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncLock.swift; path = RxSwift/Concurrency/AsyncLock.swift; sourceTree = ""; }; + F54ABB135FCDACF873EC52CF0CEE48EF /* ObservableType+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableType+Extensions.swift"; path = "RxSwift/ObservableType+Extensions.swift"; sourceTree = ""; }; + F6BF14FD13364687AC6F7514F56201B1 /* KeychainAccess-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "KeychainAccess-dummy.m"; sourceTree = ""; }; + F73FC0E38E73882B2B91483831143538 /* ImageDownloader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDownloader.swift; path = Sources/Networking/ImageDownloader.swift; sourceTree = ""; }; + FABE8CCE388DC9968112EB40C89D3526 /* RecursiveLock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecursiveLock.swift; path = Platform/RecursiveLock.swift; sourceTree = ""; }; + FAE2F30A262E7E176C3AF43C07417BCE /* AsSingle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsSingle.swift; path = RxSwift/Observables/AsSingle.swift; sourceTree = ""; }; + FF2D1B246D817AD1EDC63039FE3AB168 /* Switch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Switch.swift; path = RxSwift/Observables/Switch.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 98B07ED56002580CC8C6E1282BC96E3D /* Frameworks */ = { + 03A376BED47431245EB81E8F36A77229 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 03C3BCDA8AF8F248F5AFBFE6173F9790 /* Alamofire.framework in Frameworks */, + A1023981CAAFFBC61BCD3DA6E2491054 /* Foundation.framework in Frameworks */, + 0328978088F9CA2304C84F9F01D901F8 /* RxSwift.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0CAE36019D77469B2BBCD8E084F02FFC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 22317FB40CA21FA8EFB63E6FF0C8EA74 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 618A9B04115B6657C3EC9B0BD947BB76 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1861A810ED5264F6E4649B40902F0CD9 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7668D0A8468B5894E555ECAA4EC50BC1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9EC4DC3F4A764364051BE6DB7FD72161 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9590D3FE7A79CD7CBEE3F346E8C19D4D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B317665CAB8280DDFE0C84C2FCA24B5C /* Foundation.framework in Frameworks */, + A738C2A39C0150BBA7EA5EC19B95F03E /* CFNetwork.framework in Frameworks */, + F6B16DC8CADA07287C6A372AC8AD787C /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -77,119 +734,558 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - E94005EB199A5B040AA30B45504AF801 /* Frameworks */ = { + F121F1729DCD8D2E657B8346424BD5E8 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1F760140CC23BB814CF091139AE19ED7 /* Foundation.framework in Frameworks */, + C96B3276A65AA61BFBF555CF47281FC9 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F7EEE2AED53D95FF81F503CF71ECAAAB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D766EFD6660F107FEC78405FD014A3FE /* Accelerate.framework in Frameworks */, + 7520BBB91891BC2263563F03822A1C01 /* CFNetwork.framework in Frameworks */, + A7A0D8D40C074424B7A4F359C8790B87 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 8336BCDE33DFB3D6B6791090D8B86F03 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests */ = { + 005BC2A9D3AB91C0D793321FBF5C3BF4 /* Support Files */ = { + isa = PBXGroup; + children = ( + 24B59CF553A8DD29152DA27721FAB201 /* KeychainAccess.modulemap */, + F6BF14FD13364687AC6F7514F56201B1 /* KeychainAccess-dummy.m */, + E9487D66C60BC6077973AEB3BBAE3EBB /* KeychainAccess-Info.plist */, + 9F50A523458C90015E8A7E5A1A7C781A /* KeychainAccess-prefix.pch */, + D46A94B50ABB881AB5BC98266432AA41 /* KeychainAccess-umbrella.h */, + 50EF3ABA5EE474E545B5598E9AC8388B /* KeychainAccess.debug.xcconfig */, + AC5D4B0DBB44587D19C8C65883F09863 /* KeychainAccess.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/KeychainAccess"; + sourceTree = ""; + }; + 04AD93950ED190ABF8FE343328234686 /* Kingfisher */ = { + isa = PBXGroup; + children = ( + 11A1ABA9B8AA0E2542A5EB508F3B2DC2 /* Core */, + 80B6BA3E267005015E310DC222877837 /* Support Files */, + ); + name = Kingfisher; + path = Kingfisher; + sourceTree = ""; + }; + 11A1ABA9B8AA0E2542A5EB508F3B2DC2 /* Core */ = { + isa = PBXGroup; + children = ( + 44F9B41811A622183982C21CB895EFF9 /* AnimatedImageView.swift */, + BE24F13AB43CE46F29E83927CEED6A71 /* AuthenticationChallengeResponsable.swift */, + 839CDDA883AD160622114D395B0BC0AE /* Box.swift */, + B2F45CC54DB91935D6428EE0F34B68A2 /* CacheSerializer.swift */, + BBE5A728B87782FB72878986E6B1FBDC /* CallbackQueue.swift */, + 1DA388371AC49D5AADC6831CEBD8C044 /* Delegate.swift */, + 15DA68FD6FFD207DE3CDF2B968450088 /* Deprecated.swift */, + A8581CE9DD99FC0BBD1593683726A157 /* DiskStorage.swift */, + 3516252C90B00D97DD37F111D5CB8FC4 /* ExtensionHelpers.swift */, + 0CCDDE871B2139C7EDAB41A4454F90FD /* Filter.swift */, + 83FFAA34C0694F74BFED60ADD4A079BF /* FormatIndicatedCacheSerializer.swift */, + 7188EBAD5921CACC9E504E9F85031344 /* GIFAnimatedImage.swift */, + 8EDE466EC1A478252595CBA349FB4F16 /* Image.swift */, + 9A95F076F066F9CC07BE99760C4C47B5 /* ImageCache.swift */, + 5BB52EC5695EF69491EA624A7ACA40EE /* ImageDataProcessor.swift */, + ACB2E0F22217B5B18CABEDFD7233EFDB /* ImageDataProvider.swift */, + F73FC0E38E73882B2B91483831143538 /* ImageDownloader.swift */, + 20E0F58B3D3E556A35D8C70C2A28C1AC /* ImageDownloaderDelegate.swift */, + E9249D191D968E7B7AB75F1324207188 /* ImageDrawing.swift */, + 0FC6E94F796A1AA30B7E4204CE34A016 /* ImageFormat.swift */, + B318FE4ECDD4733B648469CCF5F5D348 /* ImageModifier.swift */, + 752796ACBEA305EEBEFD748A8679CBE0 /* ImagePrefetcher.swift */, + 42724DF9930FFB0908A11316902EA12A /* ImageProcessor.swift */, + F24F9003E2ADB9AE86616C247DE54D20 /* ImageProgressive.swift */, + 425747CCDD994EA6654A722FE899CFE4 /* ImageTransition.swift */, + 3C453C15EA3F03E9ADD5E481D797FACD /* ImageView+Kingfisher.swift */, + 649DD429D576558D8EAE452744540E3C /* Indicator.swift */, + F24ACF8DAB8C608767AE2A45175983DE /* Kingfisher.h */, + 8A0CAA48847F34C17E584A88FD6DECE6 /* Kingfisher.swift */, + E35E296BA84ABD61543346D74EC20B81 /* KingfisherError.swift */, + 611BACC53E77BA8F425E243BF2B85747 /* KingfisherManager.swift */, + D0F815E176CFF4358A741576FC6261B4 /* KingfisherOptionsInfo.swift */, + 86BB7362A7F94E6674FBA969CE6F1193 /* MemoryStorage.swift */, + 191AC4F4AB5BD56DFD263E48E1AB2B8E /* NSButton+Kingfisher.swift */, + 75D2F1F4AEA67AEFDC563FCA98B4EBDF /* Placeholder.swift */, + 1962990E7F16E9A519C7FD45C1A848AE /* RedirectHandler.swift */, + F0107BDA4259CD8AD54654045C68A522 /* RequestModifier.swift */, + 2FB0C07A7647943777785C6F7A0A4211 /* Resource.swift */, + BFCBF0F60B9C342FE48428BE78CB41B8 /* Result.swift */, + 990228538A4AEABE2D0621D996709F47 /* RetryStrategy.swift */, + 26936794D1DB66B45A2D862EA320F37F /* Runtime.swift */, + A73DF35D76323C984D36C30A76BF3662 /* SessionDataTask.swift */, + 9AAC2E3B34AD921C4DD4E9F20888BD8F /* SessionDelegate.swift */, + 7E45F3DDA76A18F2A034B475FEFC0A25 /* SizeExtensions.swift */, + 224251C3803F296E4A9EB47ED35DEABB /* Source.swift */, + 499EE1D4E6FC3579CCC4972A318B056B /* Storage.swift */, + A4DD61BE537D88D61F14AD36AEAAAF56 /* String+MD5.swift */, + EF8DF24A1958904B77D9775354DD684D /* UIButton+Kingfisher.swift */, + E949103FD36DE87EF284F00703F63E76 /* WKInterfaceImage+Kingfisher.swift */, + ); + name = Core; + sourceTree = ""; + }; + 130C80E682CDA1C7DA04232E3706B0E6 /* Alamofire */ = { + isa = PBXGroup; + children = ( + 7B2FE69DD8F204BABC508F0960865E11 /* AFError.swift */, + C4CC56DB2EFDFFFA75E3AF86CC70144A /* Alamofire.swift */, + CFB3861A0A35150D2E2794B059B009EF /* AlamofireExtended.swift */, + BB6C53D40AFB85133C5BD4F3EF6247A9 /* AuthenticationInterceptor.swift */, + AB8D8BABED2806E0E981C83CA88DF724 /* CachedResponseHandler.swift */, + 959DC66AA00C5F5D78EE2694B6B94991 /* Combine.swift */, + 033D48EB997314056439AF54C5624E73 /* DispatchQueue+Alamofire.swift */, + DC2315E02B5261A21CD77A2ED9458182 /* EventMonitor.swift */, + DA8647F675FA167A44DF26ECE1202680 /* HTTPHeaders.swift */, + 16307324F2D97556F5663C1EF3F95C21 /* HTTPMethod.swift */, + 0816990BD0B647AF5164D6E6455F3234 /* MultipartFormData.swift */, + 32B4E6D659A35EBDB998712E84645779 /* MultipartUpload.swift */, + 0CBA85CA17C1A3024B7628C885ECFA77 /* NetworkReachabilityManager.swift */, + 1FAA7A0AA8B61FAF0B63596361D1DD85 /* Notifications.swift */, + 6C9B05237DDBB04D89F523B57A2882D4 /* OperationQueue+Alamofire.swift */, + EDBF0F688E6A4CD6FBEE0D1743CBBA50 /* ParameterEncoder.swift */, + C04AF88A6948CF1AC7B1536ED334704A /* ParameterEncoding.swift */, + 45E7F430910C80A083FE82FE3D00ED5A /* Protected.swift */, + C6BA79D4E0DDFE0B71562D24CB6F8F3A /* RedirectHandler.swift */, + CA7EE75418928B44E4CB6F49E367D780 /* Request.swift */, + B039F96FDDEA436B0073B14E48456A1B /* RequestInterceptor.swift */, + B4A24C974707ED0CDB350DE6BBE5A06C /* RequestTaskMap.swift */, + 983AC7EFF94E1DD2CE81AFC3C566CCB0 /* Response.swift */, + 8E4B6CBE9137985EBA69A31705F63360 /* ResponseSerialization.swift */, + 821D74ADF0234940ED98AA4468E72292 /* Result+Alamofire.swift */, + A7EA148ECCDA9A1E40339417AE013699 /* RetryPolicy.swift */, + 4188BE4EED13391A64998B7B06C5A5E6 /* ServerTrustEvaluation.swift */, + 17C6926A88CA28D8CF5B4ACF2EC35275 /* Session.swift */, + AB4B735751392F4AAD11CB1047C85047 /* SessionDelegate.swift */, + D4001B299A45DC7FDA921BDEEFA26E56 /* StringEncoding+Alamofire.swift */, + 1255257C12D9B24FA466C9EF40218D59 /* URLConvertible+URLRequestConvertible.swift */, + E34187EC0B0E5221A5215B62239AE3A5 /* URLEncodedFormEncoder.swift */, + 7395E4F40EBB212BF7591C8BB3B2324B /* URLRequest+Alamofire.swift */, + 003512BFB651C42047495A9CBDE2F773 /* URLSessionConfiguration+Alamofire.swift */, + 93A7692D1C5ACCC47AA5BB9E8AD30CEF /* Validation.swift */, + 1EC1147FDC48B6D08D4C7AF8E3D7177E /* Support Files */, + ); + name = Alamofire; + path = Alamofire; + sourceTree = ""; + }; + 1B2EE9E7A8DFE36BF53BF982DE0570E0 /* RxAlamofire */ = { + isa = PBXGroup; + children = ( + BD7537A59888CFFAB91BB039A92E6EBA /* Core */, + 4A18C40414A34CA5256573FCB18A863B /* Support Files */, + ); + name = RxAlamofire; + path = RxAlamofire; + sourceTree = ""; + }; + 1EC1147FDC48B6D08D4C7AF8E3D7177E /* Support Files */ = { + isa = PBXGroup; + children = ( + 9FF19B8AC8BA3F0AE260F8022B4FD622 /* Alamofire.modulemap */, + 7931779C1BB2C10D2765E7EFF85AAF5A /* Alamofire-dummy.m */, + 78A7BAD672685269AC67907327DA460C /* Alamofire-Info.plist */, + E43E429BB6A8864E8DBD3BCAD845A229 /* Alamofire-prefix.pch */, + A04C4F43B9777A2414B11DEEC8A58F9E /* Alamofire-umbrella.h */, + 8BD5A4A0F520D7F44B09D4D7C4E71436 /* Alamofire.debug.xcconfig */, + 7F9539204CF012E6654FF52214BF2EAF /* Alamofire.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/Alamofire"; + sourceTree = ""; + }; + 2D400A02B4082EC536E30D5A3CF7F703 /* iOS */ = { + isa = PBXGroup; + children = ( + E636324FF512D5534685DA16D0A9F36D /* Accelerate.framework */, + D038366E3788022B2F31A117C064C204 /* CFNetwork.framework */, + F16DE93868A621D529E6F58B590A52F6 /* Foundation.framework */, + ); + name = iOS; + sourceTree = ""; + }; + 325530B17B41CF70B1817C7E0E5D8920 /* Pods */ = { + isa = PBXGroup; + children = ( + 130C80E682CDA1C7DA04232E3706B0E6 /* Alamofire */, + A1D7C989B3CDDA2CE43F0B893B9052D6 /* KeychainAccess */, + 04AD93950ED190ABF8FE343328234686 /* Kingfisher */, + 1B2EE9E7A8DFE36BF53BF982DE0570E0 /* RxAlamofire */, + BF66C26F25613D87C76D8663C5A8A850 /* RxSwift */, + ); + name = Pods; + sourceTree = ""; + }; + 3CC928FA4886A6EFABD1525EFBD65814 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests */ = { isa = PBXGroup; children = ( - 0C91FA78C95C3EC496F244C22B95B391 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.modulemap */, - C32A9CC20041EA73B140D2D1D3C0668A /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.markdown */, - 0B0ABF9F2F9BCE165A823DCE7CBBC407 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.plist */, - A35D144A2A827E3093DBF7ACFA83FD08 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-dummy.m */, - F924769908C01233B6AD1A1CE9381219 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-Info.plist */, - 1948AFEC898E25BA832E04F4A208574D /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-umbrella.h */, - E59F433F8DFE3257CF592642FB4A172B /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.debug.xcconfig */, - B02EBCC0F574FB26E202E16AA0F135A2 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.release.xcconfig */, + DB3FC4F6BA974BE61AC9EE45258BE35B /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.modulemap */, + EBD4157159E2FB1C0414CD4D6C0128C6 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.markdown */, + 668B5EF350CBA0BC77C647E9B9CE41FE /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.plist */, + 1CC385D9A0D2447390EFA8694C4B30A3 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-dummy.m */, + D2F088FFF504CE9AC13BD899F651C0EA /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-frameworks.sh */, + 1D16A4A1B47ADC3E128041B0E67F1C8E /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-Info.plist */, + D8C50F82EF8C4858E5C5D2EFF937B3B7 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-umbrella.h */, + 4E285C79D6D0EED2A23D067825F5BB3D /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.debug.xcconfig */, + C2E668B83F834DA175518604CF39505C /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.release.xcconfig */, ); name = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests"; path = "Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests"; sourceTree = ""; }; - 8E9BB67280FABAC1DA808CBFDC51354F /* Pods-ZarinPal-ChallengeTests */ = { + 4A18C40414A34CA5256573FCB18A863B /* Support Files */ = { + isa = PBXGroup; + children = ( + 77DFF13F2B81549F9DD38C73E89EA10C /* RxAlamofire.modulemap */, + C442203F47CADC5AC901C0F9F97DA865 /* RxAlamofire-dummy.m */, + 71BFEB65345E8645CC3562C4A6B5C629 /* RxAlamofire-Info.plist */, + 5BDD8B483A5826851D9CBBB5F961A53C /* RxAlamofire-prefix.pch */, + BE52E3390F764B4330C86E439E7F5DCE /* RxAlamofire-umbrella.h */, + 4194C92095E70BE84C226A97A345190D /* RxAlamofire.debug.xcconfig */, + 4BD55471CDDBEFB856C2C4A3DFB92AF2 /* RxAlamofire.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/RxAlamofire"; + sourceTree = ""; + }; + 56B80FEB3AEB41BD65F6EB79E3E2B4E4 /* Support Files */ = { isa = PBXGroup; children = ( - 284E0AE441EB6C425742D433DEDF9F55 /* Pods-ZarinPal-ChallengeTests.modulemap */, - 804D79F783479FF1E143EF9AD9215823 /* Pods-ZarinPal-ChallengeTests-acknowledgements.markdown */, - 6A058E279EA05AF8E63FE25EF8D890A2 /* Pods-ZarinPal-ChallengeTests-acknowledgements.plist */, - 929150D77AAB71741A9E9FCADCD08D8F /* Pods-ZarinPal-ChallengeTests-dummy.m */, - 5B72014EE182AFF18E61C039EB8B1B50 /* Pods-ZarinPal-ChallengeTests-Info.plist */, - 56EAC788B05D9880ABB8F56146B1719E /* Pods-ZarinPal-ChallengeTests-umbrella.h */, - C8DEEA5207995F84B221CD03C3C6AEFC /* Pods-ZarinPal-ChallengeTests.debug.xcconfig */, - F1BC30C98D8B4051D36FEE679FA91FF1 /* Pods-ZarinPal-ChallengeTests.release.xcconfig */, + DFD08DC1DB36B66ABDC8604D0CEC4780 /* RxSwift.modulemap */, + 6322AC0EEA5B5127CD6BD565BB71AC8A /* RxSwift-dummy.m */, + 783D248D632226E588DDC9279F79ECA7 /* RxSwift-Info.plist */, + 7FD43A4D2098C5F88D34781D52645C62 /* RxSwift-prefix.pch */, + D9BAE6364F1F56E36F54E6B7A544B1A1 /* RxSwift-umbrella.h */, + CB80E135AD3BFA2FC07C83876E5912D3 /* RxSwift.debug.xcconfig */, + A30716C79782F65418DB4BAF64AF01F2 /* RxSwift.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/RxSwift"; + sourceTree = ""; + }; + 772DFACEB45BE620E2CE85B8B2E6C8A8 /* Pods-ZarinPal-ChallengeTests */ = { + isa = PBXGroup; + children = ( + 4C8D0E13D3F067492B9E8207389F24BC /* Pods-ZarinPal-ChallengeTests.modulemap */, + 4EB609DC6A4EC7EEFEE3742842A4889E /* Pods-ZarinPal-ChallengeTests-acknowledgements.markdown */, + 138A16EFF3D4B96475E0F28D47F7C0B8 /* Pods-ZarinPal-ChallengeTests-acknowledgements.plist */, + 41432D3DEDE04E12AF060D6AF670DBFB /* Pods-ZarinPal-ChallengeTests-dummy.m */, + B498806F037717F133D6EC31F49677A5 /* Pods-ZarinPal-ChallengeTests-Info.plist */, + CFF197B432FA90A17243B0025D2E1949 /* Pods-ZarinPal-ChallengeTests-umbrella.h */, + A21656C83B0771ED29EF71B73F5AE5A7 /* Pods-ZarinPal-ChallengeTests.debug.xcconfig */, + 49A69E12774D4B9ABA6256B7E1B7F681 /* Pods-ZarinPal-ChallengeTests.release.xcconfig */, ); name = "Pods-ZarinPal-ChallengeTests"; path = "Target Support Files/Pods-ZarinPal-ChallengeTests"; sourceTree = ""; }; - 95EFAC8D71C4743DD624ABD86C886622 /* Products */ = { + 80B6BA3E267005015E310DC222877837 /* Support Files */ = { + isa = PBXGroup; + children = ( + 2758E7E37F4B367F8FDC32BC2BD165A6 /* Kingfisher.modulemap */, + D857181C4673CEF0F9B67620B473D5A9 /* Kingfisher-dummy.m */, + 8745E70DA5DDFA43561CF26761E4ADA2 /* Kingfisher-Info.plist */, + 9DC52BCA7ED71CD24EC349C7D3AEE386 /* Kingfisher-prefix.pch */, + 596E21E4DC96E5D01738479FD5E0B374 /* Kingfisher-umbrella.h */, + 796162A58C7D71468DDBCA974A78FCE6 /* Kingfisher.debug.xcconfig */, + 585FE8397D179AEA53F2D8642F76DD12 /* Kingfisher.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/Kingfisher"; + sourceTree = ""; + }; + A1D7C989B3CDDA2CE43F0B893B9052D6 /* KeychainAccess */ = { + isa = PBXGroup; + children = ( + 411678192EDF82B2E1D3E6765E8378E7 /* Keychain.swift */, + 005BC2A9D3AB91C0D793321FBF5C3BF4 /* Support Files */, + ); + name = KeychainAccess; + path = KeychainAccess; + sourceTree = ""; + }; + A3D1A8C400BA37C0DD8E5EBE3496EB29 /* Products */ = { isa = PBXGroup; children = ( + 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire.framework */, + E8EE7F078656FABB8F6821D10FF994BB /* KeychainAccess.framework */, + C3F44C782D64D7EB20B61CE3844EBFAD /* Kingfisher.framework */, 9D18D3EFD64979CC9E51244495894E68 /* Pods_ZarinPal_Challenge.framework */, 00FB01FED72F213D4108B2DA7E79F146 /* Pods_ZarinPal_Challenge_ZarinPal_ChallengeUITests.framework */, 8F0FD7C85D23FD1B911114D3FD8FAF99 /* Pods_ZarinPal_ChallengeTests.framework */, + 82F1475AA0F9C33F7EA4A1459305D2AB /* RxAlamofire.framework */, + 809C5FAB588354C9BA37DC3EAB8CB45C /* RxSwift.framework */, ); name = Products; sourceTree = ""; }; - 9826BC3CC5F26A9B51A6563D9408EAF5 /* Targets Support Files */ = { + A752C639D622B74E83BC94AE1051C498 /* Frameworks */ = { isa = PBXGroup; children = ( - A9857F3FC5375900893D95F3590E10ED /* Pods-ZarinPal-Challenge */, - 8336BCDE33DFB3D6B6791090D8B86F03 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests */, - 8E9BB67280FABAC1DA808CBFDC51354F /* Pods-ZarinPal-ChallengeTests */, + 625C043AAFD384945066C53E7213CA28 /* Alamofire.framework */, + D066BEE9AB7B657DB9333F2B25FEB75E /* RxSwift.framework */, + 2D400A02B4082EC536E30D5A3CF7F703 /* iOS */, ); - name = "Targets Support Files"; + name = Frameworks; sourceTree = ""; }; - A9857F3FC5375900893D95F3590E10ED /* Pods-ZarinPal-Challenge */ = { + B59E63C04579E972E6B305CD5DBC109B /* Pods-ZarinPal-Challenge */ = { isa = PBXGroup; children = ( - FBDDF7A57DCEDA30DDF609DA5286FA56 /* Pods-ZarinPal-Challenge.modulemap */, - 10A80CBE3B571F8ACCBDD3177BC66F2E /* Pods-ZarinPal-Challenge-acknowledgements.markdown */, - DBC198BF4A0654FD9E522AD044C4B50E /* Pods-ZarinPal-Challenge-acknowledgements.plist */, - 6BE70C650FDB60FC8863F68F7453D797 /* Pods-ZarinPal-Challenge-dummy.m */, - EDE3D976A20897ED29659CFD88C80464 /* Pods-ZarinPal-Challenge-Info.plist */, - 4728D22E0B97E533341E7DB8392B6F7C /* Pods-ZarinPal-Challenge-umbrella.h */, - DD50DB8F66C7CD185621AECCE59A51E4 /* Pods-ZarinPal-Challenge.debug.xcconfig */, - 76F9E8516DD08D023112D21337D25B01 /* Pods-ZarinPal-Challenge.release.xcconfig */, + C2F494138BA732DB78601BA92401098B /* Pods-ZarinPal-Challenge.modulemap */, + 1EC2FADB12DB2D36DD25CF92065944BE /* Pods-ZarinPal-Challenge-acknowledgements.markdown */, + 49E39F59A2838E494DB264D2EBD454E9 /* Pods-ZarinPal-Challenge-acknowledgements.plist */, + D25297CDF54F662FA70E497145DD101C /* Pods-ZarinPal-Challenge-dummy.m */, + B0A97D55EBC1DEFCAA7F8900959EB353 /* Pods-ZarinPal-Challenge-frameworks.sh */, + A8AA98D83F767BBB50C079B5F6E2C12C /* Pods-ZarinPal-Challenge-Info.plist */, + 6DB31277BAA8C023523621013FF67E0A /* Pods-ZarinPal-Challenge-umbrella.h */, + 15DB35DD9697244A12950FC1B67DB0F1 /* Pods-ZarinPal-Challenge.debug.xcconfig */, + 0C4A54FA7A143556993AD19B5EADBFAC /* Pods-ZarinPal-Challenge.release.xcconfig */, ); name = "Pods-ZarinPal-Challenge"; path = "Target Support Files/Pods-ZarinPal-Challenge"; sourceTree = ""; }; - C0834CEBB1379A84116EF29F93051C60 /* iOS */ = { + BD7537A59888CFFAB91BB039A92E6EBA /* Core */ = { isa = PBXGroup; children = ( - 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */, + 06D782CA9C5B920E27943C1253E7A91C /* RxAlamofire.swift */, ); - name = iOS; + name = Core; + sourceTree = ""; + }; + BF66C26F25613D87C76D8663C5A8A850 /* RxSwift */ = { + isa = PBXGroup; + children = ( + 0163A1A23827FD076DAAFF8643F5F4EB /* AddRef.swift */, + E5F8051790E0C8D6A5CD49B339F13AC1 /* Amb.swift */, + 14DF196F359C86C4037554CDB65CCC22 /* AnonymousDisposable.swift */, + 542070D748C492FE013B67268A1149BA /* AnonymousObserver.swift */, + D0D9B6ED1A957C3A83CCBDA87AAC2F56 /* AnyObserver.swift */, + 7883D1C1517EA40EF4F9D39A31AFA589 /* AsMaybe.swift */, + FAE2F30A262E7E176C3AF43C07417BCE /* AsSingle.swift */, + F358AF61F9B33D43FFA1B8F9C5B2CD0D /* AsyncLock.swift */, + 10383D568E058B336D2E0BCDF8FC7183 /* AsyncSubject.swift */, + 0219F877DE8FB5B8390B716F32C04945 /* AtomicInt.swift */, + B5D58610939EE493575A600EA4955385 /* Bag.swift */, + A3E66B958F6C34F5FE2FAF7ACFA5D3FC /* Bag+Rx.swift */, + 595DC02CD608D79E79AA7581A772F381 /* BehaviorSubject.swift */, + 78314C24026D355F2120A42FF58645BB /* BinaryDisposable.swift */, + 00B0934841EF469285C479DC89F819A3 /* BooleanDisposable.swift */, + 1518C616F78424562879952E20839BFF /* Buffer.swift */, + 9A897ECCF10FBEE07F46FACDCFB00377 /* Cancelable.swift */, + 1C420C7B75B0C01159361D7D6B45FB73 /* Catch.swift */, + F29C80DD5DC50DFFDE37AD9335ACA535 /* CombineLatest.swift */, + A22DB6847FFD3AC7CD964EDAE1B93C2F /* CombineLatest+arity.swift */, + 7FCCA4D3DE137F71ED26397453C864F4 /* CombineLatest+Collection.swift */, + A99BDA0F275A32954C7FE17CE3971217 /* CompactMap.swift */, + A40520DFE818B7A2724B53A8B45F725C /* Completable.swift */, + D46142DB79B9FA3A8E4B410DC9C7D684 /* Completable+AndThen.swift */, + B3EC94BDC15D866EAD35E792E357CD33 /* CompositeDisposable.swift */, + 2CCEC5EC3875D020AC32E4DA3EFD7122 /* Concat.swift */, + AC2071B5879AC831074F017B1C906A36 /* ConcurrentDispatchQueueScheduler.swift */, + DAE1D3DB03DB076DBFAAD5DAA48ED42D /* ConcurrentMainScheduler.swift */, + 779429C210EDC0C06EBD930C6BBD7EE8 /* ConnectableObservableType.swift */, + D990B2F2A1AFFA9189D6DBED281674E7 /* Create.swift */, + 8873416F0C46F0D3F62AC5B0E190ECF8 /* CurrentThreadScheduler.swift */, + 15D9BC62D6D57370EFEFEFD5DDE897C2 /* Date+Dispatch.swift */, + 6EB7A1B7B33664FCBB2BBAEF74F39520 /* Debounce.swift */, + 1BBE48394B7DEB868314A28A14C013A0 /* Debug.swift */, + CD08AEC2992892DBC79FBB65549D497A /* DefaultIfEmpty.swift */, + 9C3B1942F281B93DA5D5F54340E1C5B4 /* Deferred.swift */, + 5C7589BDA048239577D612E858FF653E /* Delay.swift */, + 90E6DDADC786F2FC74E5285DB0A1FA57 /* DelaySubscription.swift */, + CBCFCF079BADA708A65B7579149D4EFA /* Dematerialize.swift */, + AA912BF88C514FF679F066AD58E83BE9 /* Deprecated.swift */, + 3C3D043CE78177A8BF13D17D4D59A0CF /* DispatchQueue+Extensions.swift */, + 7A62FAB858F3CC04CB87BE6E46917A2D /* DispatchQueueConfiguration.swift */, + C3234010256E666332F10F54559E9C62 /* Disposable.swift */, + 55045F0AA9C2253109330A0D09A8788B /* Disposables.swift */, + 3B30026AA233413FC84ADC996DE22F01 /* DisposeBag.swift */, + 6EA51507F94CDAA42B238B03E0695740 /* DisposeBase.swift */, + A20555107FDA9102C5AA9893640EFE06 /* DistinctUntilChanged.swift */, + E7BD7E88DB95EBAA1FEEABFFFE01689D /* Do.swift */, + 5C202705BBEDDA6B392126B8E7D0A090 /* ElementAt.swift */, + 7EC61B634F24D93EF78D589CE18B259F /* Empty.swift */, + 74F638687F4F370F858B0DEF3E0DCA20 /* Enumerated.swift */, + B02348A70D0B199DB8AD5E7E33F3DF32 /* Error.swift */, + 2F935AC1A23CB48A9D36A15A31529B8B /* Errors.swift */, + 88DEE843952EBE6C6762EAF82B046C9D /* Event.swift */, + 74BCBABA22721DDE14E1DF04A4A9B197 /* Filter.swift */, + 30A54D4C1F92B629B4B4E893C18E627B /* First.swift */, + B4C1BAF37F9B5A72B54646194DBE04A0 /* Generate.swift */, + 0B7244FA93A7E9CFF252783CAAC1AAE9 /* GroupBy.swift */, + 398E251A70A8FF37C40141988FD7B439 /* GroupedObservable.swift */, + C7F048C09A51B3D2E3C39209D49325F9 /* HistoricalScheduler.swift */, + 505BAAA69882749C4B39978C45E5071F /* HistoricalSchedulerTimeConverter.swift */, + 52B36DBA18B85701C079296C85F81DD0 /* ImmediateSchedulerType.swift */, + 9CBE438A20AB015176E28AEB53889F99 /* InfiniteSequence.swift */, + 22DE75871201BB99F6D9A90E05FEF721 /* InvocableScheduledItem.swift */, + 8BD4796079AEAA1770BB626C3E2F3C1F /* InvocableType.swift */, + B1215EA13A41048DD10EDE77B642C47A /* Just.swift */, + 2051B1D402139C1AC8CE76A86FC9B296 /* Lock.swift */, + 8ECF395E7136282FABAAE9C22A38CA65 /* LockOwnerType.swift */, + D75E745C30B234F8BD7943A9C517EDD2 /* MainScheduler.swift */, + 1C99CF11179ADC96B280669E661C33C8 /* Map.swift */, + 0619C9B50A883817FECE679E29B77B8D /* Materialize.swift */, + 7C72FE3611A3540C95FAA9190B252430 /* Maybe.swift */, + 4E97A696DA30A54EDAF4DB2AC1197E24 /* Merge.swift */, + 896EF46C4260C706795EE477D84B92C5 /* Multicast.swift */, + DADC46AA65EE33A1A024A0F501992328 /* Never.swift */, + 7817B6DBD169C012BE328C62A192F536 /* NopDisposable.swift */, + 2E9CCD3A70426E65B698489963A19CE8 /* Observable.swift */, + 4E2134B59F30BCAF295A3382063C81FB /* ObservableConvertibleType.swift */, + AEA283DF8684AD5C7856CEB1019F2A80 /* ObservableType.swift */, + F54ABB135FCDACF873EC52CF0CEE48EF /* ObservableType+Extensions.swift */, + F10E9FF23A84E8D3A2B4F09416BF85A5 /* ObservableType+PrimitiveSequence.swift */, + E2B54AA5756D9BA9B3589B7A8893283E /* ObserveOn.swift */, + D42BD27C7C772F2DD09FD373D6429701 /* ObserverBase.swift */, + 929A0F24C55E82B06835285648FDA85C /* ObserverType.swift */, + E384C262E7B0083A152C2E3D41DE348E /* OperationQueueScheduler.swift */, + 70279BF6B621244FD4E99E3FA969BF84 /* Optional.swift */, + 1FE5A7D0621A9048C3A4C6D5976C1276 /* Platform.Darwin.swift */, + 709A6D5EB16F39F8619358C0CA8E2CEF /* Platform.Linux.swift */, + C75700F5626DBF25E789E328CD7CAD68 /* PrimitiveSequence.swift */, + 46D4B0D1884B1BA92269E97FE75BA80D /* PrimitiveSequence+Zip+arity.swift */, + 37F077A69ECCFDFA2FE01BB9DA090632 /* PriorityQueue.swift */, + 0011C6B1E7E4642848AC91AF9D110B8E /* Producer.swift */, + 8EF246C1C14FDA286E4114E521736804 /* PublishSubject.swift */, + 0C23D1FA69B75625AD041D49B5D3DF31 /* Queue.swift */, + 9EBAB60C5897051C2316213F5F7142A1 /* Range.swift */, + 5192029C2A3AB595BCB93B5B25BA3C1B /* Reactive.swift */, + FABE8CCE388DC9968112EB40C89D3526 /* RecursiveLock.swift */, + D62F09D0BF6DD4046AC49E3950E9A8E3 /* RecursiveScheduler.swift */, + E4D93B0C8D66F269E61F2D75BE5E7355 /* Reduce.swift */, + 9262D50865B81A98A03B217562B46E36 /* RefCountDisposable.swift */, + 06A4AE1E6EC369DA7ADF37D8EE493622 /* Repeat.swift */, + E62F4618DFBEA45C47CF9FC8C300E8CC /* ReplaySubject.swift */, + 452D7A95615ED2D8C0D6D848304B8993 /* RetryWhen.swift */, + 85255EDEC8EAC6DD99F50FC3DB6E987A /* Rx.swift */, + B37E6C41F532D8A6247B754478250788 /* RxMutableBox.swift */, + D71FFD5BF89C5C539EB89EF5FB9D34F9 /* Sample.swift */, + 5F7479F086E4965ABA7EC3B3402C602A /* Scan.swift */, + B10FD73F6398B956B80ED1FE9B3F4669 /* ScheduledDisposable.swift */, + 3E30DAA1566530999AF15C1051FB55E5 /* ScheduledItem.swift */, + 263551EF170EE4E8E6D14A53C7DECCF1 /* ScheduledItemType.swift */, + 80E74EF4893B488FF857A8CE4FDC1EE9 /* SchedulerServices+Emulation.swift */, + E8845B45D7EAEAB167EB6CD70BB0A460 /* SchedulerType.swift */, + 27A44183300B3E3DA1B191EF6640DB12 /* Sequence.swift */, + 3EF30F7C629856BCC6C696EF97B97FB3 /* SerialDispatchQueueScheduler.swift */, + 548451D1CD8130451C5B6920CB276AAE /* SerialDisposable.swift */, + 18969F8C7C53F2B0400640CA17BFDF84 /* ShareReplayScope.swift */, + 3F07C439F4BA0E8755636317C360D87C /* Single.swift */, + B3840916AD62D98AFC86B38968F5C3E2 /* SingleAssignmentDisposable.swift */, + C27B3571E69AA88981466646F0799CCB /* SingleAsync.swift */, + 3724C9716235E3349686B3673358041A /* Sink.swift */, + CA5D170F0740DBB4909BFF9ED18B53E2 /* Skip.swift */, + B98F850673BC787FD8DDA161AE59E8B5 /* SkipUntil.swift */, + AAD1EAB246F0E9C0550C6B4E79D567C3 /* SkipWhile.swift */, + 1832BC12CCF01A67A35FCE20F63011F9 /* StartWith.swift */, + 711E4C6C8201883EF21BBB65E1CEAC3A /* SubjectType.swift */, + 3A8EB607FBF31872ED7B39A5A11C2267 /* SubscribeOn.swift */, + 3CFDAD9A08A708221B30DBF88A10AC4A /* SubscriptionDisposable.swift */, + 37C5773E0BD3DF72FAF60DC234A4F508 /* SwiftSupport.swift */, + FF2D1B246D817AD1EDC63039FE3AB168 /* Switch.swift */, + 5D245CE9081855A2718101C3021DC33A /* SwitchIfEmpty.swift */, + 66572EED79FE2C5D0F72ED42197B47E2 /* SynchronizedDisposeType.swift */, + 1E467AA243CBC53964425C936D3C3745 /* SynchronizedOnType.swift */, + 09361BA8E6E6E82C50B7BCC6CBCAEEB5 /* SynchronizedUnsubscribeType.swift */, + 8EBC04A2929D255B059B8CC2703D7914 /* TailRecursiveSink.swift */, + 067D90F0CEB95D96E30D1284A3E5784D /* Take.swift */, + 89D56CAC2344B9B4CAE2ED6EFA61B765 /* TakeLast.swift */, + 7690DCA3815B4ED5896D32F4B3DCCEA9 /* TakeUntil.swift */, + 15C3C06DBF0CA2E5A0A2DE9923E46CF6 /* TakeWhile.swift */, + 9A816703105738BA6F33BA20E63E3B50 /* Throttle.swift */, + C455780032C7F86376EB849CBC98D115 /* Timeout.swift */, + 647050628C3D31651EA46C7FD32DFDC3 /* Timer.swift */, + 376C376AD22B84530024BD485AA0B630 /* ToArray.swift */, + 047EC44A0A9520988020CA0DD05BB0B9 /* Using.swift */, + 2DD65F1925A20337FF64BAC0F9E630E6 /* VirtualTimeConverterType.swift */, + 4C15D4198D93510C817FD2B25F88F5DD /* VirtualTimeScheduler.swift */, + 7C75C99593AD1C9F5E331A6DFD0316A9 /* Window.swift */, + 67A7F1E7E5785B9807E4F78D56A5F4BF /* WithLatestFrom.swift */, + 6EFE49B6A3F2ACACA53EDC9B6BA55FFB /* Zip.swift */, + E140F9C6C1574D1F421E8537B08D642F /* Zip+arity.swift */, + 898992236FDF6CE427D1877E0CCA7BE1 /* Zip+Collection.swift */, + 56B80FEB3AEB41BD65F6EB79E3E2B4E4 /* Support Files */, + ); + name = RxSwift; + path = RxSwift; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, - 95EFAC8D71C4743DD624ABD86C886622 /* Products */, - 9826BC3CC5F26A9B51A6563D9408EAF5 /* Targets Support Files */, + A752C639D622B74E83BC94AE1051C498 /* Frameworks */, + 325530B17B41CF70B1817C7E0E5D8920 /* Pods */, + A3D1A8C400BA37C0DD8E5EBE3496EB29 /* Products */, + D79F7D985162229765F2AEEC6BB30759 /* Targets Support Files */, ); sourceTree = ""; }; - D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = { + D79F7D985162229765F2AEEC6BB30759 /* Targets Support Files */ = { isa = PBXGroup; children = ( - C0834CEBB1379A84116EF29F93051C60 /* iOS */, + B59E63C04579E972E6B305CD5DBC109B /* Pods-ZarinPal-Challenge */, + 3CC928FA4886A6EFABD1525EFBD65814 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests */, + 772DFACEB45BE620E2CE85B8B2E6C8A8 /* Pods-ZarinPal-ChallengeTests */, ); - name = Frameworks; + name = "Targets Support Files"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 84A12490584C402104847F079901E08F /* Headers */ = { + 39CC3E71CEA7805FCA03E3A1CC052EEA /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + EEADFC5C1C5EC6E3E20506B8E069931D /* KeychainAccess-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 49C2E9EC1AD5683F6B721191920A1BAE /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + B9F473D757984B46946C217CF4D0BB6F /* RxAlamofire-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5C893F4B0D1CE3A9A90AF0BA22AE561B /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + B92AA4636470D82BFB22BDDDC8FA4950 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 79FAB3CEA271FE7927839A85DD6BD95B /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D89D6F7695104E270DBEC916123DEF43 /* Kingfisher-umbrella.h in Headers */, + 39C07DB1B30E5DDCCE16B39185E8DDD9 /* Kingfisher.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8070B01910C64B9AFD0DB550EDE38D6B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 67D421D70ADBE3B367E24D2681185E3C /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-umbrella.h in Headers */, + 7D3DD4A8BB36733BA15868F7FB8C56CE /* Alamofire-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -201,17 +1297,45 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - EE3DA158E9FD4C300BF7361D69EC583D /* Headers */ = { + E19A875EC77CBB61B574CCD9F4BE388E /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + E83CF16789783F9BAA743F164005E251 /* Pods-ZarinPal-Challenge-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E80A954FBE535B6F5DDBBB3E490A22F6 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4315B3875B1E77A83836B03EF2F86EE9 /* Pods-ZarinPal-Challenge-umbrella.h in Headers */, + B3F3418383835F5795F21789582430D7 /* RxSwift-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 1A538A5499B1706F0983D6826042657B /* RxAlamofire */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0ECAF1957DD0C8EBF5638C382274283A /* Build configuration list for PBXNativeTarget "RxAlamofire" */; + buildPhases = ( + 49C2E9EC1AD5683F6B721191920A1BAE /* Headers */, + EB15DC60FBAEF8DC4BF7AE7F935449D9 /* Sources */, + 03A376BED47431245EB81E8F36A77229 /* Frameworks */, + EA37028B40ED707EC26AA52C841590F8 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 2D0B4036591387C395E646F18586B9D6 /* PBXTargetDependency */, + 940FD46132DF4F39579B74E124168B36 /* PBXTargetDependency */, + ); + name = RxAlamofire; + productName = RxAlamofire; + productReference = 82F1475AA0F9C33F7EA4A1459305D2AB /* RxAlamofire.framework */; + productType = "com.apple.product-type.framework"; + }; 2B82272F0A623397BFFADBCE03695162 /* Pods-ZarinPal-ChallengeTests */ = { isa = PBXNativeTarget; buildConfigurationList = 87C87EA3587049786BE570EDAD5D33AC /* Build configuration list for PBXNativeTarget "Pods-ZarinPal-ChallengeTests" */; @@ -231,18 +1355,41 @@ productReference = 8F0FD7C85D23FD1B911114D3FD8FAF99 /* Pods_ZarinPal_ChallengeTests.framework */; productType = "com.apple.product-type.framework"; }; + 615C831BCE925ED486B225B87E44926D /* KeychainAccess */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4BEE926243448802ACA6F07A75D9C025 /* Build configuration list for PBXNativeTarget "KeychainAccess" */; + buildPhases = ( + 39CC3E71CEA7805FCA03E3A1CC052EEA /* Headers */, + C4DE4004EE1661FE4BC4E6C40415F599 /* Sources */, + 7668D0A8468B5894E555ECAA4EC50BC1 /* Frameworks */, + AE292B4411627ABE21EB769134C1E8BB /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = KeychainAccess; + productName = KeychainAccess; + productReference = E8EE7F078656FABB8F6821D10FF994BB /* KeychainAccess.framework */; + productType = "com.apple.product-type.framework"; + }; 88BE9EE64421AA70EFFB01FADBD15BCA /* Pods-ZarinPal-Challenge */ = { isa = PBXNativeTarget; - buildConfigurationList = 9E73B20C613871A5032785B7B0FF9748 /* Build configuration list for PBXNativeTarget "Pods-ZarinPal-Challenge" */; + buildConfigurationList = 5F8C9203B10A2C27AF11A01DA608514A /* Build configuration list for PBXNativeTarget "Pods-ZarinPal-Challenge" */; buildPhases = ( - EE3DA158E9FD4C300BF7361D69EC583D /* Headers */, - 124A6CEAECBB656408C599A6C3415E52 /* Sources */, - E94005EB199A5B040AA30B45504AF801 /* Frameworks */, - 18A39D09B1FA0EB0F264601BD2ECB0FF /* Resources */, + E19A875EC77CBB61B574CCD9F4BE388E /* Headers */, + 38C53B169F27D634C8BFEA9444E6BED5 /* Sources */, + 618A9B04115B6657C3EC9B0BD947BB76 /* Frameworks */, + 00D70C80820680393B0B8AB97274595C /* Resources */, ); buildRules = ( ); dependencies = ( + 379FCB3FB58792588DBFBD6CF6D63C1A /* PBXTargetDependency */, + 4333C48FD710293D776CCE2371F71CB5 /* PBXTargetDependency */, + C3864D9444E7DEED2C8B5DDBE8B484D4 /* PBXTargetDependency */, + 37A06A74D5C79A69137130D2BB953285 /* PBXTargetDependency */, + BB07E561B5C053A13ED1B9580298E4EE /* PBXTargetDependency */, ); name = "Pods-ZarinPal-Challenge"; productName = "Pods-ZarinPal-Challenge"; @@ -251,22 +1398,81 @@ }; DD2D0C2BB9FF9D25E37763F98CFF1E8D /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests */ = { isa = PBXNativeTarget; - buildConfigurationList = E239C2964F3F799B363606E831049451 /* Build configuration list for PBXNativeTarget "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests" */; + buildConfigurationList = 6AE1A30D01462B13FECC39E916075840 /* Build configuration list for PBXNativeTarget "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests" */; buildPhases = ( - 84A12490584C402104847F079901E08F /* Headers */, - 6156274DC2F07012CA031783451BEFAA /* Sources */, - 98B07ED56002580CC8C6E1282BC96E3D /* Frameworks */, - D0F55A55B651564B591E01B005BC757D /* Resources */, + 5C893F4B0D1CE3A9A90AF0BA22AE561B /* Headers */, + 813DBC721B5AE0F17BDE64C50092DD4F /* Sources */, + 0CAE36019D77469B2BBCD8E084F02FFC /* Frameworks */, + D7E1A5607ED28E2F11688A3B04219CFA /* Resources */, ); buildRules = ( ); dependencies = ( + 93500DFB4C8FEA013685BE6E8865D2B4 /* PBXTargetDependency */, + F896434E07EA391FA12E00EA2D0D08C6 /* PBXTargetDependency */, + EC87BDC1CC9308651B94666954F5387B /* PBXTargetDependency */, + A26B84A3BC0E67D4DCAC5CEEC3E0ACB8 /* PBXTargetDependency */, + 51155F0044207A5154E04A6DC4613158 /* PBXTargetDependency */, ); name = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests"; productName = "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests"; productReference = 00FB01FED72F213D4108B2DA7E79F146 /* Pods_ZarinPal_Challenge_ZarinPal_ChallengeUITests.framework */; productType = "com.apple.product-type.framework"; }; + E8022D22FAA6690B5E1C379C1BCE1491 /* Kingfisher */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6C869AF63A76CFF19E814182B57A6BD1 /* Build configuration list for PBXNativeTarget "Kingfisher" */; + buildPhases = ( + 79FAB3CEA271FE7927839A85DD6BD95B /* Headers */, + AB1DE24E2C83D928FDF04817FD2A6AEE /* Sources */, + F7EEE2AED53D95FF81F503CF71ECAAAB /* Frameworks */, + E0DF076205BF8EC7C6B7E2040C56A4DE /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Kingfisher; + productName = Kingfisher; + productReference = C3F44C782D64D7EB20B61CE3844EBFAD /* Kingfisher.framework */; + productType = "com.apple.product-type.framework"; + }; + EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9AEAC4E9F48CD50122BB28686D7F7726 /* Build configuration list for PBXNativeTarget "RxSwift" */; + buildPhases = ( + E80A954FBE535B6F5DDBBB3E490A22F6 /* Headers */, + 5F7727C29276E26C51AC3A079EF0A96A /* Sources */, + F121F1729DCD8D2E657B8346424BD5E8 /* Frameworks */, + AA7ABA110412B5FCF65D81E6C5D57DE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = RxSwift; + productName = RxSwift; + productReference = 809C5FAB588354C9BA37DC3EAB8CB45C /* RxSwift.framework */; + productType = "com.apple.product-type.framework"; + }; + EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */ = { + isa = PBXNativeTarget; + buildConfigurationList = 78E219AC01CD5AFED663C9AB28280801 /* Build configuration list for PBXNativeTarget "Alamofire" */; + buildPhases = ( + 8070B01910C64B9AFD0DB550EDE38D6B /* Headers */, + 2C8326877F6A9617C2FBE9BD15D95B59 /* Sources */, + 9590D3FE7A79CD7CBEE3F346E8C19D4D /* Frameworks */, + 9BCA7D105D531AE5DAF34FB86A2E623A /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Alamofire; + productName = Alamofire; + productReference = 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire.framework */; + productType = "com.apple.product-type.framework"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -277,7 +1483,7 @@ LastUpgradeCheck = 1100; }; buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 9.3"; + compatibilityVersion = "Xcode 10.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -285,19 +1491,24 @@ Base, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 95EFAC8D71C4743DD624ABD86C886622 /* Products */; + productRefGroup = A3D1A8C400BA37C0DD8E5EBE3496EB29 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( + EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */, + 615C831BCE925ED486B225B87E44926D /* KeychainAccess */, + E8022D22FAA6690B5E1C379C1BCE1491 /* Kingfisher */, 88BE9EE64421AA70EFFB01FADBD15BCA /* Pods-ZarinPal-Challenge */, DD2D0C2BB9FF9D25E37763F98CFF1E8D /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests */, 2B82272F0A623397BFFADBCE03695162 /* Pods-ZarinPal-ChallengeTests */, + 1A538A5499B1706F0983D6826042657B /* RxAlamofire */, + EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 18A39D09B1FA0EB0F264601BD2ECB0FF /* Resources */ = { + 00D70C80820680393B0B8AB97274595C /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -311,7 +1522,42 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - D0F55A55B651564B591E01B005BC757D /* Resources */ = { + 9BCA7D105D531AE5DAF34FB86A2E623A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA7ABA110412B5FCF65D81E6C5D57DE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AE292B4411627ABE21EB769134C1E8BB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D7E1A5607ED28E2F11688A3B04219CFA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E0DF076205BF8EC7C6B7E2040C56A4DE /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EA37028B40ED707EC26AA52C841590F8 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -321,19 +1567,285 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 124A6CEAECBB656408C599A6C3415E52 /* Sources */ = { + 2C8326877F6A9617C2FBE9BD15D95B59 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 57FDC7B37A2A3894D1F45ACC53820755 /* Pods-ZarinPal-Challenge-dummy.m in Sources */, + 1208E81DA8B532D0646D627B50290EB6 /* AFError.swift in Sources */, + C6D5A4B4028B2C43380C9FA58BD5C8CA /* Alamofire-dummy.m in Sources */, + C1F1DB6A9CBDE584D09BA1613AAD4F9D /* Alamofire.swift in Sources */, + 72EC2712926E6D28B52360D9AC41668F /* AlamofireExtended.swift in Sources */, + DC627AFC5B585686898B014184AFCABD /* AuthenticationInterceptor.swift in Sources */, + ABA85887A41495358C83CE3F3030EDEA /* CachedResponseHandler.swift in Sources */, + 0A1849775CF90D514963187D3A771CF8 /* Combine.swift in Sources */, + 27E59A11A2743B0595CDE3A08675EAE1 /* DispatchQueue+Alamofire.swift in Sources */, + 6546D728B69398F93B506845141EBD61 /* EventMonitor.swift in Sources */, + 91B837CE0DCD8EDB300FCDFFA1279162 /* HTTPHeaders.swift in Sources */, + 013BAC24F7AC722E59517CB110A9E685 /* HTTPMethod.swift in Sources */, + 45B8CC1C61E7A0BB28CFA8CE7C12FEBC /* MultipartFormData.swift in Sources */, + D03F1F02DE8606E6057D57866611BEBF /* MultipartUpload.swift in Sources */, + 19D605A3233499828FB6B790869F3E9C /* NetworkReachabilityManager.swift in Sources */, + 8AA937910F87915DE700CAB6C868689E /* Notifications.swift in Sources */, + 0A900DF17E3B64F08AF673E9A0DDD697 /* OperationQueue+Alamofire.swift in Sources */, + 4AEC050FA7D5ED52FDA9DF50EA3560DF /* ParameterEncoder.swift in Sources */, + D14066FAE94E304798E43651E5886D13 /* ParameterEncoding.swift in Sources */, + 218C14EAE5AA31C30314AE0289B732A0 /* Protected.swift in Sources */, + 666EC5C8356E6D4448A2FE7BEE77AD88 /* RedirectHandler.swift in Sources */, + EDC93BD7B9262119AE145E4C7A9D0212 /* Request.swift in Sources */, + 6E54F64E8DA73F4B0B46C216F9F93F63 /* RequestInterceptor.swift in Sources */, + 6C08F6A77889651626583100F560153D /* RequestTaskMap.swift in Sources */, + C1C5B050B55C15103ABC81769551A283 /* Response.swift in Sources */, + 911448B2EDA2FF880108F77642797A88 /* ResponseSerialization.swift in Sources */, + 66B26C6CAE737EC21F4BA1F1851B69C5 /* Result+Alamofire.swift in Sources */, + 9FED70D1E1FBFB80E974E999EF732258 /* RetryPolicy.swift in Sources */, + 47FDBBBD2704901588C3A7C56BBC502D /* ServerTrustEvaluation.swift in Sources */, + 6AE407A4FB6C3D6ADD862CC6E3067A17 /* Session.swift in Sources */, + 381FF05F8B4F611EE9C2FDBE4457BB89 /* SessionDelegate.swift in Sources */, + 212EDC48B68107BEA9247F3464CE696E /* StringEncoding+Alamofire.swift in Sources */, + 9B1D8A7798D8A6F518FC9AF9725431D0 /* URLConvertible+URLRequestConvertible.swift in Sources */, + D31FC7FDD450C4CDD633ECBAD27C6221 /* URLEncodedFormEncoder.swift in Sources */, + D5EAAFB6FAD77A8F0699345149BA3CBB /* URLRequest+Alamofire.swift in Sources */, + F70EF854395CDE981A8336E4FF0310FE /* URLSessionConfiguration+Alamofire.swift in Sources */, + F0F3224FF592F9BA2A044A2FC2BD4CCD /* Validation.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 6156274DC2F07012CA031783451BEFAA /* Sources */ = { + 38C53B169F27D634C8BFEA9444E6BED5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 217EB1C586F2254EB685B005F550FA05 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-dummy.m in Sources */, + 7D942177C32597E1B9B6DA9E2F878B6E /* Pods-ZarinPal-Challenge-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5F7727C29276E26C51AC3A079EF0A96A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 362273CEE6198B2A9943EDB204774E0C /* AddRef.swift in Sources */, + 200080F909B0D344E3CE80F74B03ECC5 /* Amb.swift in Sources */, + 85BC3DF15F95BC9BB8985A3CE520250D /* AnonymousDisposable.swift in Sources */, + D79218E9447AFB6964801AFB76AE9F88 /* AnonymousObserver.swift in Sources */, + 378968E21A878D10E59EDE9D6E5CD2A8 /* AnyObserver.swift in Sources */, + 3F4DF4517D1059BE482E602E134A5BA2 /* AsMaybe.swift in Sources */, + 4836AC5421118D6CD767EA7FEA236190 /* AsSingle.swift in Sources */, + EC4D53B1BC4EB5390F74BDE60EDAE214 /* AsyncLock.swift in Sources */, + 2AB0908DB89DC0346534B731071023E9 /* AsyncSubject.swift in Sources */, + EC23F29D2C7B9152F3233DF049A1EE39 /* AtomicInt.swift in Sources */, + FF50AA7746ABDF3E94BD1401903B8F2C /* Bag+Rx.swift in Sources */, + B1B3801DF32AB2D77B6577A96EA33239 /* Bag.swift in Sources */, + DF5EE39834598701885BF91B8DA3F4FC /* BehaviorSubject.swift in Sources */, + 244F0DE7DDA46F7605FE1295B0C23940 /* BinaryDisposable.swift in Sources */, + A20AE360A512A67895C91CB28DF6B6C1 /* BooleanDisposable.swift in Sources */, + 445B3E9800D7F3C32FB3677643980451 /* Buffer.swift in Sources */, + 8F33CA5B6335C2B684BE10CC74275754 /* Cancelable.swift in Sources */, + CB9E545E5E59F4F994F92F71584E7DBA /* Catch.swift in Sources */, + EE90ED93B7DA1077B2719ACD0F5C3190 /* CombineLatest+arity.swift in Sources */, + 532B18B72A872D358410EDFDF45C4372 /* CombineLatest+Collection.swift in Sources */, + F19E2530F8D6A2E77237F8EF833CDC3F /* CombineLatest.swift in Sources */, + 6C0E45AB1E295621D97BE9531892442B /* CompactMap.swift in Sources */, + A0320089ED98A5622FCCB1AAC4F4AC25 /* Completable+AndThen.swift in Sources */, + F824D8B4E40E8CD1DECD73091700F6E1 /* Completable.swift in Sources */, + CB56EC7BD0DA2060EA8FAAE0062B18B5 /* CompositeDisposable.swift in Sources */, + 5FC220D00A9E77B0BC2692FA3ADDC91F /* Concat.swift in Sources */, + 42647EEE57B042DAB0C7CEE7BCF64EC0 /* ConcurrentDispatchQueueScheduler.swift in Sources */, + 1551A1F11A0CD69969A09432459680AB /* ConcurrentMainScheduler.swift in Sources */, + 67E69E300EE6181E0B20EC86B03AA675 /* ConnectableObservableType.swift in Sources */, + 402F0DBB21DF2E7B25044A0B33DB5EF2 /* Create.swift in Sources */, + D923DDA4528407F75DB495279D07D4D7 /* CurrentThreadScheduler.swift in Sources */, + 3042057ECA913E5C78A350B2E2FF822F /* Date+Dispatch.swift in Sources */, + 2A80579B7147B18AB18CF737B8A20653 /* Debounce.swift in Sources */, + 80393ECBF62D8B951CC84B8D6F8AF72F /* Debug.swift in Sources */, + 278C391F914E5369B466166B047457EC /* DefaultIfEmpty.swift in Sources */, + B75AD9511D1B3B1E0B08513B2C3E2796 /* Deferred.swift in Sources */, + 4AD3326FA91CD559FC19A975A464045C /* Delay.swift in Sources */, + 251D4E658F69C420B89BDB6EA623A58E /* DelaySubscription.swift in Sources */, + 6A42DF7F22F13782A12CB39D27154210 /* Dematerialize.swift in Sources */, + B92281396F6448036664F8939B350A67 /* Deprecated.swift in Sources */, + 958C357B713AECA31632AB439CFDA258 /* DispatchQueue+Extensions.swift in Sources */, + 1A361DDEBA9D315A978044784D4EDDDD /* DispatchQueueConfiguration.swift in Sources */, + 1F8B5F5424AF7BF4F316EC397254DC7D /* Disposable.swift in Sources */, + 90BD253B4E9EDDC45CEF9E4D793B4EEF /* Disposables.swift in Sources */, + 17CC4FFFA725523CD333A6DD694F2282 /* DisposeBag.swift in Sources */, + 78BB80F440AB317CB32EE1EA942DDCDA /* DisposeBase.swift in Sources */, + 7AEDED167CE0CF8DA2D28A8164D536FD /* DistinctUntilChanged.swift in Sources */, + 582440200A0588E93F90DFD5932E9D7B /* Do.swift in Sources */, + E08FECB666202EFED71715190199E69C /* ElementAt.swift in Sources */, + 43B93B810B94AAD8487786B9A41C5FD7 /* Empty.swift in Sources */, + 0AB71AF65247418102DB179E57D88F3A /* Enumerated.swift in Sources */, + 94F4DAC20B2201C47D1ED7B0E7D77C6C /* Error.swift in Sources */, + DE2A5AB7398EBDD08BABC124E9665F92 /* Errors.swift in Sources */, + 54D3CC0DC1A5947741E4A38DC6607ED9 /* Event.swift in Sources */, + 37F4E4415F535C015875E7D805FFCBDB /* Filter.swift in Sources */, + F1543EC3846F2E15359F430E948DDF4E /* First.swift in Sources */, + A1D6D2E007627C790B556F7BAC2242D7 /* Generate.swift in Sources */, + C1757CF4A9E70F5D77CDD107E90C4EC1 /* GroupBy.swift in Sources */, + 20D9273F69B4400E82CA2B7490AC86B8 /* GroupedObservable.swift in Sources */, + A73D2C10F7050940A457BBF0520CC254 /* HistoricalScheduler.swift in Sources */, + 37AB7998EDB4785059E5AE357BE4E5C9 /* HistoricalSchedulerTimeConverter.swift in Sources */, + 21098700BAE16F27074144E1A1E87058 /* ImmediateSchedulerType.swift in Sources */, + FEAF8F3D9F922D73FEE7B2EE8E02C74F /* InfiniteSequence.swift in Sources */, + 2C55083149398A707C6DEB531A79FA68 /* InvocableScheduledItem.swift in Sources */, + 3CDC916FB54AD7FB3B09493AF85A9701 /* InvocableType.swift in Sources */, + 6DB679FAC0D49C31AB6DEBDB924B9D2A /* Just.swift in Sources */, + C6E3928D0C0A0AE738527490941D0231 /* Lock.swift in Sources */, + 8AC553BABF1F773BB7D7300E57B2C079 /* LockOwnerType.swift in Sources */, + 3D728B246C8B0E212964F5DF12D847E7 /* MainScheduler.swift in Sources */, + B690AD6B2A18313576F26178C23A304B /* Map.swift in Sources */, + 000C38BD26FC114912F5614E23D2AADB /* Materialize.swift in Sources */, + FC7C6C4F25A77710D646A2B8D1ED4737 /* Maybe.swift in Sources */, + F9CCB1BC57BA36F85953C081C8473456 /* Merge.swift in Sources */, + EA377F55280BB4DB0977C6B851E76C2C /* Multicast.swift in Sources */, + 1B16F30BCA7395D43CDA1614D72FF4FD /* Never.swift in Sources */, + 63136E19EACBC3161488B6B884ABA696 /* NopDisposable.swift in Sources */, + 22A3E0815D8E49A485754A7D78ED80B1 /* Observable.swift in Sources */, + 8562C26109739EAD1B4917504D363371 /* ObservableConvertibleType.swift in Sources */, + 556F95F5C8A393118AD02C0B3D2CD0FA /* ObservableType+Extensions.swift in Sources */, + E892C063BD7E9C2E9C5F661A1C7F0385 /* ObservableType+PrimitiveSequence.swift in Sources */, + C5AEBA560DADF30E2AF41613A3A40287 /* ObservableType.swift in Sources */, + A8CA4F9987AE6E7A9EBC9944E5559730 /* ObserveOn.swift in Sources */, + 4F324195DB9715761578C9BB6C959581 /* ObserverBase.swift in Sources */, + 380E926A87908F8A64A7F8E0616C5F04 /* ObserverType.swift in Sources */, + 964F19AF6D0884583EDAF7B485311CC3 /* OperationQueueScheduler.swift in Sources */, + 3BB69FBC9B4043D8F9C2182D9A408215 /* Optional.swift in Sources */, + 23893EBD37112E3260FD0039C6D934D2 /* Platform.Darwin.swift in Sources */, + F73CDB9658982F89437A1F4CDC144821 /* Platform.Linux.swift in Sources */, + 590A62CC64098FA33EBE9E7C80252AEA /* PrimitiveSequence+Zip+arity.swift in Sources */, + A19BDE1BF90D364A40FC0B9B298BA904 /* PrimitiveSequence.swift in Sources */, + 9636E11CF444B5E3BD2A3352301BE5AD /* PriorityQueue.swift in Sources */, + C5053041C41069386FEFB068B2F2592D /* Producer.swift in Sources */, + 2383DC5D50035FE086DDDACDB50EC9EE /* PublishSubject.swift in Sources */, + AE183A07F8F15318E296BB2FA9E93208 /* Queue.swift in Sources */, + 633A738C2CE3EA5A17BEB50A455E003E /* Range.swift in Sources */, + C59B03D6B3761A1639F360584CCD937C /* Reactive.swift in Sources */, + B7737F84659155FBF39EF9D3A5B17E2D /* RecursiveLock.swift in Sources */, + 87FDC793BD71B3BBAA9A1FB2DAF72390 /* RecursiveScheduler.swift in Sources */, + A64E1D9D0CA42B550F568EFB870D9984 /* Reduce.swift in Sources */, + 39B1ACDAFFF0F087BD5683911CB5230D /* RefCountDisposable.swift in Sources */, + BE0B30B8B0C36D3D9DC9CE8FD3FC9270 /* Repeat.swift in Sources */, + DED03AFE23DB113D32230604E77249CE /* ReplaySubject.swift in Sources */, + 4EFE36DF9F9729C26B8E18C8286C59AE /* RetryWhen.swift in Sources */, + 448BD1677C0CBD4901638A3F4AC2C584 /* Rx.swift in Sources */, + A3C87B0E42879746015BEB545A0F2911 /* RxMutableBox.swift in Sources */, + 2AAE4EC8CBDAAE6806ECAAA1E3BA6A9C /* RxSwift-dummy.m in Sources */, + CEA7813B92D78FCFB724C33EE0986706 /* Sample.swift in Sources */, + 1A909DA95F2CD6258B509441E8D3E8DD /* Scan.swift in Sources */, + 585D6BBB3A5B389B9C70A97F4B70FC97 /* ScheduledDisposable.swift in Sources */, + 82DEA99839D2880247BA18D89E5F9BD2 /* ScheduledItem.swift in Sources */, + C1B55D63F80D507704962D4541723BF9 /* ScheduledItemType.swift in Sources */, + 78F729E34F9C452364DD7361DDE0DC39 /* SchedulerServices+Emulation.swift in Sources */, + FD0C2FD8AF7C9B0704B9D5143E0ABD35 /* SchedulerType.swift in Sources */, + 2ADE4D81B153C3C15E72222B215715A7 /* Sequence.swift in Sources */, + D44F078796D03389385A9DD7F217B1D6 /* SerialDispatchQueueScheduler.swift in Sources */, + 240EF0FF0F201B2F7F3C661B2078865B /* SerialDisposable.swift in Sources */, + 7AE4E0F90BD0EA42A97F982A52B7A4F1 /* ShareReplayScope.swift in Sources */, + DE6DA36B51EBC21B11E6248A468DFADC /* Single.swift in Sources */, + DD81AB9BF82BFE0952A930F2A52C0852 /* SingleAssignmentDisposable.swift in Sources */, + 38414C27340BAA4B6E00079E75730168 /* SingleAsync.swift in Sources */, + 7307C336843B0FB44EAD3D1BC2619616 /* Sink.swift in Sources */, + D1F8033E0AD4B56664E739ACCD2112A4 /* Skip.swift in Sources */, + 22E3593402DFAC73BAFA6307677BBF49 /* SkipUntil.swift in Sources */, + D032F06A647A94DF048FE619D7CDB272 /* SkipWhile.swift in Sources */, + CA2E1CDCD21BB8C3311BC778CD040C07 /* StartWith.swift in Sources */, + C13E5F031FD8FEEB5E18F4E60304A975 /* SubjectType.swift in Sources */, + FF50B50E6D4965F1CC418B00A8C8C42C /* SubscribeOn.swift in Sources */, + 3692F6E79192C7C0F0734A0764688555 /* SubscriptionDisposable.swift in Sources */, + DEA77F6D339E0B35012BF98B8CB52443 /* SwiftSupport.swift in Sources */, + AA4527ED7942734D4DCE293A7FBB893C /* Switch.swift in Sources */, + 7F2769AABD3176553E569502FD2AAD21 /* SwitchIfEmpty.swift in Sources */, + 81D70A63ECE90CEC6C1006265C325F43 /* SynchronizedDisposeType.swift in Sources */, + C8B51CA7C1F4582EE520BFBD51B46EBF /* SynchronizedOnType.swift in Sources */, + 36880F928C91B20C440FD6A2992E1015 /* SynchronizedUnsubscribeType.swift in Sources */, + 2E26660DBED28E86214D536BF15B125C /* TailRecursiveSink.swift in Sources */, + 257E2F3365C158D467A2BD2D2275421F /* Take.swift in Sources */, + B6CE1FAD5C0B24594682854E29E99771 /* TakeLast.swift in Sources */, + 79C0E6867C42B4169225F2A8C770632F /* TakeUntil.swift in Sources */, + 7AC1EAE913A2CC4FF6A5273A8AD62766 /* TakeWhile.swift in Sources */, + 909F37979BBA1E170AF88E167159472B /* Throttle.swift in Sources */, + FBBA65DCD3D997437F8293CD97880D84 /* Timeout.swift in Sources */, + 6BBEF75DB6945785D3CD3CDBDD2D326E /* Timer.swift in Sources */, + EC956D27982D69BF6B130038DE212367 /* ToArray.swift in Sources */, + F44F054D9ED0F79A2779274CA3CF51A1 /* Using.swift in Sources */, + 7F90E304EC83E2D4BC3C674662FE19C5 /* VirtualTimeConverterType.swift in Sources */, + 573EDF8B91E14694D54B5BE83975E9D5 /* VirtualTimeScheduler.swift in Sources */, + DF6658C44F6B22D44A16800F9AC8EEF6 /* Window.swift in Sources */, + EDB130D89644C795A4A2E17CE0305303 /* WithLatestFrom.swift in Sources */, + E1A6590BCB3BA54410D5B3FC2629CD28 /* Zip+arity.swift in Sources */, + 1AD75F47FE3BC2920DD31132A54690B0 /* Zip+Collection.swift in Sources */, + 4E7FE4FF235AB5843E61A30E9A5587BD /* Zip.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 813DBC721B5AE0F17BDE64C50092DD4F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 987EEB1A1ACD67D5B17AE94B89250DCF /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AB1DE24E2C83D928FDF04817FD2A6AEE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2169973D7461954F47AE2E4B2FC29AFC /* AnimatedImageView.swift in Sources */, + 9F4859AA0B7FF10EBFCE500D05E97F22 /* AuthenticationChallengeResponsable.swift in Sources */, + 52AFC373558EA66A36978ACA2A59C208 /* Box.swift in Sources */, + D2F623D1BA8366959E5B4B28EE8C74A3 /* CacheSerializer.swift in Sources */, + 2F39AC009FDCDC6395456DF9C6F73B2E /* CallbackQueue.swift in Sources */, + A1D1489ADDDD3ACD02AC9AED719208B5 /* Delegate.swift in Sources */, + 2A946D64F55D1483CD914783D0CDBCF1 /* Deprecated.swift in Sources */, + 413419D5EAF49981F1126220D949998D /* DiskStorage.swift in Sources */, + 4A125BC9435C0689EFC9083C4D6AD1F1 /* ExtensionHelpers.swift in Sources */, + 3BE14D60B48F7A168E30B6035A6679D8 /* Filter.swift in Sources */, + 57E809146DE1D795AB566D582C5BD4FB /* FormatIndicatedCacheSerializer.swift in Sources */, + EF57BD189600FEFBA65A04F840192612 /* GIFAnimatedImage.swift in Sources */, + DE2FE634CA168C76E6F6EAECCCF2CB25 /* Image.swift in Sources */, + 76FB3FD4AD9C576C030C1E0637C9F33E /* ImageCache.swift in Sources */, + 82CC5117492096336ACEDE1124567CE1 /* ImageDataProcessor.swift in Sources */, + D33A41A088CFD8CDEF093B81473ABC24 /* ImageDataProvider.swift in Sources */, + 0A6B5DD01688D2909B123872D28BA244 /* ImageDownloader.swift in Sources */, + D120E1076F09BC2B6EB04DFB77B4337E /* ImageDownloaderDelegate.swift in Sources */, + 27AC73ECEA22469300D0C84082D5A11A /* ImageDrawing.swift in Sources */, + AA32E60194E22BD7D63996982953B254 /* ImageFormat.swift in Sources */, + DEE0BD97F8CD350B96FA108DEAD01DB5 /* ImageModifier.swift in Sources */, + 643A62B599350B4B53DDD1410723A9F5 /* ImagePrefetcher.swift in Sources */, + D01F65F0FB64651347BE071B40D9137C /* ImageProcessor.swift in Sources */, + 45C53EBA8D54ABBD03AFABA40AA04526 /* ImageProgressive.swift in Sources */, + 1271D16ED09C3A7F1C8B59FB5E8F4C4A /* ImageTransition.swift in Sources */, + EA5568FD865CDC270C7FDF9D07C12A3A /* ImageView+Kingfisher.swift in Sources */, + A9F52292CD73CC7BC667BC6BFB13F76E /* Indicator.swift in Sources */, + 4B11223B7E84D678CC7DCE06E7DA4F2D /* Kingfisher-dummy.m in Sources */, + 6C4240E6A28A56C7EABA3E403BCCE73B /* Kingfisher.swift in Sources */, + 59E1831DBFE51C03F59EB2494505179B /* KingfisherError.swift in Sources */, + 7D2186484ADCDD14DE414F8416E78009 /* KingfisherManager.swift in Sources */, + D2A1BADA7775EB86BE54E76DD5287DCC /* KingfisherOptionsInfo.swift in Sources */, + 392B550454354027A95860A24F373493 /* MemoryStorage.swift in Sources */, + 53573D140ED2FF4625595921244E9F83 /* NSButton+Kingfisher.swift in Sources */, + BD311F47ACB85AC1BEECFD5A2EB97DAD /* Placeholder.swift in Sources */, + CDE6E025EB7814166FE10729FD8ECD99 /* RedirectHandler.swift in Sources */, + BF5D7A588E42170704DE3CE387810002 /* RequestModifier.swift in Sources */, + 76C605C95842AAD9EC43BEAB6C6FD3B3 /* Resource.swift in Sources */, + D06D1ECF0F83459B30344E72D5BD80C0 /* Result.swift in Sources */, + D3B6C7CC81054A15944438950930B466 /* RetryStrategy.swift in Sources */, + 157C093553DEA8090A5EDB594C7A10EF /* Runtime.swift in Sources */, + 7DA111BA28D2ABAF0127448656A91BA1 /* SessionDataTask.swift in Sources */, + E931E4B7ED6AC4EE078413311FD623FC /* SessionDelegate.swift in Sources */, + 9433A37319050AECED47A83CC1AB2411 /* SizeExtensions.swift in Sources */, + 7D59B085FB0A678C50F49C942F9CDAE5 /* Source.swift in Sources */, + 218E9683CDC3DCB849CB22E6ADDD5C4F /* Storage.swift in Sources */, + FB38D9498D76115C61C207652A90140B /* String+MD5.swift in Sources */, + CBF8F66AAE972CB75436EE640DB403DF /* UIButton+Kingfisher.swift in Sources */, + EF3991B6151D1EAD5C4B87ADBA8CE991 /* WKInterfaceImage+Kingfisher.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C4DE4004EE1661FE4BC4E6C40415F599 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0441B3E976E5F55E22731AECFF0DBA88 /* Keychain.swift in Sources */, + 4AEB48FE18565A59266480250E7C3FEA /* KeychainAccess-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -345,6 +1857,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + EB15DC60FBAEF8DC4BF7AE7F935449D9 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4B57A516324CA2AA6404752841979F26 /* RxAlamofire-dummy.m in Sources */, + 9EC48C10940C6FFC240828C6C81660CE /* RxAlamofire.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -354,12 +1875,327 @@ target = 88BE9EE64421AA70EFFB01FADBD15BCA /* Pods-ZarinPal-Challenge */; targetProxy = 0AC6C753A2B7F41276942CCDAB7A6976 /* PBXContainerItemProxy */; }; + 2D0B4036591387C395E646F18586B9D6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Alamofire; + target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; + targetProxy = EF2FD7A8BFFD7B1EAE6A98C8451F20AC /* PBXContainerItemProxy */; + }; + 379FCB3FB58792588DBFBD6CF6D63C1A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Alamofire; + target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; + targetProxy = 07F9227876E96A5D6B07CA1733513A53 /* PBXContainerItemProxy */; + }; + 37A06A74D5C79A69137130D2BB953285 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RxAlamofire; + target = 1A538A5499B1706F0983D6826042657B /* RxAlamofire */; + targetProxy = 8C360A8D883901B9ACEE2AD664DAEC1C /* PBXContainerItemProxy */; + }; + 4333C48FD710293D776CCE2371F71CB5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = KeychainAccess; + target = 615C831BCE925ED486B225B87E44926D /* KeychainAccess */; + targetProxy = 3313AACA06A2C66FD2320270AE628F0E /* PBXContainerItemProxy */; + }; + 51155F0044207A5154E04A6DC4613158 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RxSwift; + target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; + targetProxy = 9D6E5DC2920F80289DA1ECD0A7444F07 /* PBXContainerItemProxy */; + }; + 93500DFB4C8FEA013685BE6E8865D2B4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Alamofire; + target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; + targetProxy = 20F6A8C47FD84D1FDCE8077CF4C04FC8 /* PBXContainerItemProxy */; + }; + 940FD46132DF4F39579B74E124168B36 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RxSwift; + target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; + targetProxy = B4FA3FA5BF35DC5C0C1CC3B0BFEB2D48 /* PBXContainerItemProxy */; + }; + A26B84A3BC0E67D4DCAC5CEEC3E0ACB8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RxAlamofire; + target = 1A538A5499B1706F0983D6826042657B /* RxAlamofire */; + targetProxy = 85B9500BA13D9556E5B2C293F44C9D1D /* PBXContainerItemProxy */; + }; + BB07E561B5C053A13ED1B9580298E4EE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RxSwift; + target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; + targetProxy = DD07ED53F211BF68E0369A587EB2414E /* PBXContainerItemProxy */; + }; + C3864D9444E7DEED2C8B5DDBE8B484D4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Kingfisher; + target = E8022D22FAA6690B5E1C379C1BCE1491 /* Kingfisher */; + targetProxy = 6CDC0D90057EA0191C186AD1D563CD78 /* PBXContainerItemProxy */; + }; + EC87BDC1CC9308651B94666954F5387B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Kingfisher; + target = E8022D22FAA6690B5E1C379C1BCE1491 /* Kingfisher */; + targetProxy = B7408713D836E3C1A3BF0D064CDE3C32 /* PBXContainerItemProxy */; + }; + F896434E07EA391FA12E00EA2D0D08C6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = KeychainAccess; + target = 615C831BCE925ED486B225B87E44926D /* KeychainAccess */; + targetProxy = 6A8F6219296DF86CCF2A225506DB86EA /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 685747AEBDC44D6AF0041C5468C3FCEB /* Release */ = { + 08695874A6EA63E28F783629336E9798 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 49A69E12774D4B9ABA6256B7E1B7F681 /* Pods-ZarinPal-ChallengeTests.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-ZarinPal-ChallengeTests/Pods-ZarinPal-ChallengeTests-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-ZarinPal-ChallengeTests/Pods-ZarinPal-ChallengeTests.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 0E731E52D0459BF539B596DAB34781E4 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4BD55471CDDBEFB856C2C4A3DFB92AF2 /* RxAlamofire.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/RxAlamofire/RxAlamofire-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RxAlamofire/RxAlamofire-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/RxAlamofire/RxAlamofire.modulemap"; + PRODUCT_MODULE_NAME = RxAlamofire; + PRODUCT_NAME = RxAlamofire; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 1422B121EAEAEA11307496903FA623C6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Release; + }; + 18979CD75B5D6DDE2C7B652BECACBAFC /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CB80E135AD3BFA2FC07C83876E5912D3 /* RxSwift.debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/RxSwift/RxSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RxSwift/RxSwift-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/RxSwift/RxSwift.modulemap"; + PRODUCT_MODULE_NAME = RxSwift; + PRODUCT_NAME = RxSwift; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 42D67077D86F7C7F26B88AD7DA3F2448 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A30716C79782F65418DB4BAF64AF01F2 /* RxSwift.release.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/RxSwift/RxSwift-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RxSwift/RxSwift-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/RxSwift/RxSwift.modulemap"; + PRODUCT_MODULE_NAME = RxSwift; + PRODUCT_NAME = RxSwift; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 437BC8BE00365738124A171E31186183 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 796162A58C7D71468DDBCA974A78FCE6 /* Kingfisher.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Kingfisher/Kingfisher-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Kingfisher/Kingfisher-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/Kingfisher/Kingfisher.modulemap"; + PRODUCT_MODULE_NAME = Kingfisher; + PRODUCT_NAME = Kingfisher; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 471DA74002E1D4AB71803AE6FAC893C7 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B02EBCC0F574FB26E202E16AA0F135A2 /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.release.xcconfig */; + baseConfigurationReference = 4E285C79D6D0EED2A23D067825F5BB3D /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; @@ -374,7 +2210,7 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.2; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -390,15 +2226,87 @@ SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 48FD2B4E815CEB933B18D313E9E9EF64 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7F9539204CF012E6654FF52214BF2EAF /* Alamofire.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Alamofire/Alamofire-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/Alamofire/Alamofire.modulemap"; + PRODUCT_MODULE_NAME = Alamofire; + PRODUCT_NAME = Alamofire; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.2; + TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - 69E4E7EC671A6781516D9E0BA734FAEF /* Debug */ = { + 803BD9EFFB299825A7B41BC6082C3481 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4194C92095E70BE84C226A97A345190D /* RxAlamofire.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/RxAlamofire/RxAlamofire-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RxAlamofire/RxAlamofire-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/RxAlamofire/RxAlamofire.modulemap"; + PRODUCT_MODULE_NAME = RxAlamofire; + PRODUCT_NAME = RxAlamofire; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 8A22C3F4F473AEAC413FE89A364922B7 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C8DEEA5207995F84B221CD03C3C6AEFC /* Pods-ZarinPal-ChallengeTests.debug.xcconfig */; + baseConfigurationReference = 0C4A54FA7A143556993AD19B5EADBFAC /* Pods-ZarinPal-Challenge.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; @@ -411,16 +2319,16 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-ZarinPal-ChallengeTests/Pods-ZarinPal-ChallengeTests-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.2; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-ZarinPal-ChallengeTests/Pods-ZarinPal-ChallengeTests.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -429,14 +2337,15 @@ SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 6EC06A08E04B391D21F98668C33686E7 /* Release */ = { + 8ECD880A91E7C9B3A75F9BC77563C05C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 76F9E8516DD08D023112D21337D25B01 /* Pods-ZarinPal-Challenge.release.xcconfig */; + baseConfigurationReference = C2E668B83F834DA175518604CF39505C /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; @@ -449,16 +2358,16 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.2; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -473,73 +2382,82 @@ }; name = Release; }; - 939F1A8F6BCEB7F9F64D9EEE50CAE014 /* Debug */ = { + A1D46061F9AB05E74A44DCF5B3150C16 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = AC5D4B0DBB44587D19C8C65883F09863 /* KeychainAccess.release.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/KeychainAccess/KeychainAccess-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/KeychainAccess/KeychainAccess-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.2; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + MODULEMAP_FILE = "Target Support Files/KeychainAccess/KeychainAccess.modulemap"; + PRODUCT_MODULE_NAME = KeychainAccess; + PRODUCT_NAME = KeychainAccess; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + A540060AEDCAD31DBBFD1214F7C8DCBE /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 585FE8397D179AEA53F2D8642F76DD12 /* Kingfisher.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Kingfisher/Kingfisher-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Kingfisher/Kingfisher-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/Kingfisher/Kingfisher.modulemap"; + PRODUCT_MODULE_NAME = Kingfisher; + PRODUCT_NAME = Kingfisher; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 943ADDF33533229B0472E158D25AEB95 /* Debug */ = { + D3EFEA6D5014AA66B2D5A7CB42903F13 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E59F433F8DFE3257CF592642FB4A172B /* Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.debug.xcconfig */; + baseConfigurationReference = A21656C83B0771ED29EF71B73F5AE5A7 /* Pods-ZarinPal-ChallengeTests.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; @@ -552,16 +2470,16 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-ZarinPal-ChallengeTests/Pods-ZarinPal-ChallengeTests-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.2; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-ZarinPal-ChallengeTests/Pods-ZarinPal-ChallengeTests.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; @@ -575,9 +2493,44 @@ }; name = Debug; }; - 9DE97F848B06B5CA150B71B36272F3F3 /* Debug */ = { + DEB8E3370A0E0579DAB70D0FF2444BCB /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 50EF3ABA5EE474E545B5598E9AC8388B /* KeychainAccess.debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/KeychainAccess/KeychainAccess-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/KeychainAccess/KeychainAccess-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/KeychainAccess/KeychainAccess.modulemap"; + PRODUCT_MODULE_NAME = KeychainAccess; + PRODUCT_NAME = KeychainAccess; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.1; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + E48A3CBC4DD7398B781486B2A4B6B370 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DD50DB8F66C7CD185621AECCE59A51E4 /* Pods-ZarinPal-Challenge.debug.xcconfig */; + baseConfigurationReference = 15DB35DD9697244A12950FC1B67DB0F1 /* Pods-ZarinPal-Challenge.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; @@ -592,7 +2545,7 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.2; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -613,11 +2566,10 @@ }; name = Debug; }; - DFE7627DE97D8AEE50D5F506ABCF2EFB /* Release */ = { + E73BFB7433831CF292FADF6B2CB7AC3B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F1BC30C98D8B4051D36FEE679FA91FF1 /* Pods-ZarinPal-ChallengeTests.release.xcconfig */; + baseConfigurationReference = 8BD5A4A0F520D7F44B09D4D7C4E71436 /* Alamofire.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -628,31 +2580,29 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-ZarinPal-ChallengeTests/Pods-ZarinPal-ChallengeTests-Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Alamofire/Alamofire-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 13.2; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-ZarinPal-ChallengeTests/Pods-ZarinPal-ChallengeTests.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + MODULEMAP_FILE = "Target Support Files/Alamofire/Alamofire.modulemap"; + PRODUCT_MODULE_NAME = Alamofire; + PRODUCT_NAME = Alamofire; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.2; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - ECB437504DF805BD96CAABF97400B526 /* Release */ = { + ED7888FA6713EABBF66D26A8003AD1CA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -685,13 +2635,16 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; + DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -700,53 +2653,99 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 13.2; - MTL_ENABLE_DEBUG_INFO = NO; + IPHONEOS_DEPLOYMENT_TARGET = 13.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; SYMROOT = "${SRCROOT}/../build"; }; - name = Release; + name = Debug; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 0ECAF1957DD0C8EBF5638C382274283A /* Build configuration list for PBXNativeTarget "RxAlamofire" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 803BD9EFFB299825A7B41BC6082C3481 /* Debug */, + 0E731E52D0459BF539B596DAB34781E4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 939F1A8F6BCEB7F9F64D9EEE50CAE014 /* Debug */, - ECB437504DF805BD96CAABF97400B526 /* Release */, + ED7888FA6713EABBF66D26A8003AD1CA /* Debug */, + 1422B121EAEAEA11307496903FA623C6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 87C87EA3587049786BE570EDAD5D33AC /* Build configuration list for PBXNativeTarget "Pods-ZarinPal-ChallengeTests" */ = { + 4BEE926243448802ACA6F07A75D9C025 /* Build configuration list for PBXNativeTarget "KeychainAccess" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DEB8E3370A0E0579DAB70D0FF2444BCB /* Debug */, + A1D46061F9AB05E74A44DCF5B3150C16 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5F8C9203B10A2C27AF11A01DA608514A /* Build configuration list for PBXNativeTarget "Pods-ZarinPal-Challenge" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E48A3CBC4DD7398B781486B2A4B6B370 /* Debug */, + 8A22C3F4F473AEAC413FE89A364922B7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6AE1A30D01462B13FECC39E916075840 /* Build configuration list for PBXNativeTarget "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 471DA74002E1D4AB71803AE6FAC893C7 /* Debug */, + 8ECD880A91E7C9B3A75F9BC77563C05C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6C869AF63A76CFF19E814182B57A6BD1 /* Build configuration list for PBXNativeTarget "Kingfisher" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 437BC8BE00365738124A171E31186183 /* Debug */, + A540060AEDCAD31DBBFD1214F7C8DCBE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 78E219AC01CD5AFED663C9AB28280801 /* Build configuration list for PBXNativeTarget "Alamofire" */ = { isa = XCConfigurationList; buildConfigurations = ( - 69E4E7EC671A6781516D9E0BA734FAEF /* Debug */, - DFE7627DE97D8AEE50D5F506ABCF2EFB /* Release */, + E73BFB7433831CF292FADF6B2CB7AC3B /* Debug */, + 48FD2B4E815CEB933B18D313E9E9EF64 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9E73B20C613871A5032785B7B0FF9748 /* Build configuration list for PBXNativeTarget "Pods-ZarinPal-Challenge" */ = { + 87C87EA3587049786BE570EDAD5D33AC /* Build configuration list for PBXNativeTarget "Pods-ZarinPal-ChallengeTests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9DE97F848B06B5CA150B71B36272F3F3 /* Debug */, - 6EC06A08E04B391D21F98668C33686E7 /* Release */, + D3EFEA6D5014AA66B2D5A7CB42903F13 /* Debug */, + 08695874A6EA63E28F783629336E9798 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E239C2964F3F799B363606E831049451 /* Build configuration list for PBXNativeTarget "Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests" */ = { + 9AEAC4E9F48CD50122BB28686D7F7726 /* Build configuration list for PBXNativeTarget "RxSwift" */ = { isa = XCConfigurationList; buildConfigurations = ( - 943ADDF33533229B0472E158D25AEB95 /* Debug */, - 685747AEBDC44D6AF0041C5468C3FCEB /* Release */, + 18979CD75B5D6DDE2C7B652BECACBAFC /* Debug */, + 42D67077D86F7C7F26B88AD7DA3F2448 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Pods/Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.markdown b/Pods/Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.markdown index 102af75..deddd7a 100644 --- a/Pods/Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.markdown @@ -1,3 +1,114 @@ # Acknowledgements This application makes use of the following third party libraries: + +## Alamofire + +Copyright (c) 2014-2020 Alamofire Software Foundation (http://alamofire.org/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +## KeychainAccess + +The MIT License (MIT) + +Copyright (c) 2014 kishikawa katsumi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +## Kingfisher + +The MIT License (MIT) + +Copyright (c) 2019 Wei Wang + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +## RxAlamofire + +The MIT License (MIT) + +Copyright (c) 2015 Junior B. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +## RxSwift + +**The MIT License** +**Copyright © 2015 Krunoslav Zaher** +**All rights reserved.** + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.plist b/Pods/Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.plist index 7acbad1..8df7f9f 100644 --- a/Pods/Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-acknowledgements.plist @@ -12,6 +12,147 @@ Type PSGroupSpecifier + + FooterText + Copyright (c) 2014-2020 Alamofire Software Foundation (http://alamofire.org/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + License + MIT + Title + Alamofire + Type + PSGroupSpecifier + + + FooterText + The MIT License (MIT) + +Copyright (c) 2014 kishikawa katsumi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + License + MIT + Title + KeychainAccess + Type + PSGroupSpecifier + + + FooterText + The MIT License (MIT) + +Copyright (c) 2019 Wei Wang + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + License + MIT + Title + Kingfisher + Type + PSGroupSpecifier + + + FooterText + The MIT License (MIT) + +Copyright (c) 2015 Junior B. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + License + MIT + Title + RxAlamofire + Type + PSGroupSpecifier + + + FooterText + **The MIT License** +**Copyright © 2015 Krunoslav Zaher** +**All rights reserved.** + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + License + MIT + Title + RxSwift + Type + PSGroupSpecifier + FooterText Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.debug.xcconfig b/Pods/Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.debug.xcconfig index b52088a..7b8cc7f 100644 --- a/Pods/Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.debug.xcconfig +++ b/Pods/Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.debug.xcconfig @@ -1,4 +1,10 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/RxAlamofire" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess/KeychainAccess.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxAlamofire/RxAlamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "Foundation" -framework "KeychainAccess" -framework "Kingfisher" -framework "RxAlamofire" -framework "RxSwift" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.release.xcconfig b/Pods/Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.release.xcconfig index b52088a..7b8cc7f 100644 --- a/Pods/Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.release.xcconfig +++ b/Pods/Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests.release.xcconfig @@ -1,4 +1,10 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/RxAlamofire" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess/KeychainAccess.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxAlamofire/RxAlamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "Foundation" -framework "KeychainAccess" -framework "Kingfisher" -framework "RxAlamofire" -framework "RxSwift" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge-acknowledgements.markdown b/Pods/Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge-acknowledgements.markdown index 102af75..deddd7a 100644 --- a/Pods/Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge-acknowledgements.markdown @@ -1,3 +1,114 @@ # Acknowledgements This application makes use of the following third party libraries: + +## Alamofire + +Copyright (c) 2014-2020 Alamofire Software Foundation (http://alamofire.org/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +## KeychainAccess + +The MIT License (MIT) + +Copyright (c) 2014 kishikawa katsumi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +## Kingfisher + +The MIT License (MIT) + +Copyright (c) 2019 Wei Wang + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +## RxAlamofire + +The MIT License (MIT) + +Copyright (c) 2015 Junior B. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +## RxSwift + +**The MIT License** +**Copyright © 2015 Krunoslav Zaher** +**All rights reserved.** + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge-acknowledgements.plist b/Pods/Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge-acknowledgements.plist index 7acbad1..8df7f9f 100644 --- a/Pods/Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge-acknowledgements.plist @@ -12,6 +12,147 @@ Type PSGroupSpecifier + + FooterText + Copyright (c) 2014-2020 Alamofire Software Foundation (http://alamofire.org/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + License + MIT + Title + Alamofire + Type + PSGroupSpecifier + + + FooterText + The MIT License (MIT) + +Copyright (c) 2014 kishikawa katsumi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + License + MIT + Title + KeychainAccess + Type + PSGroupSpecifier + + + FooterText + The MIT License (MIT) + +Copyright (c) 2019 Wei Wang + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + License + MIT + Title + Kingfisher + Type + PSGroupSpecifier + + + FooterText + The MIT License (MIT) + +Copyright (c) 2015 Junior B. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + License + MIT + Title + RxAlamofire + Type + PSGroupSpecifier + + + FooterText + **The MIT License** +**Copyright © 2015 Krunoslav Zaher** +**All rights reserved.** + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + License + MIT + Title + RxSwift + Type + PSGroupSpecifier + FooterText Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge.debug.xcconfig b/Pods/Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge.debug.xcconfig index b52088a..7b8cc7f 100644 --- a/Pods/Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge.debug.xcconfig +++ b/Pods/Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge.debug.xcconfig @@ -1,4 +1,10 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/RxAlamofire" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess/KeychainAccess.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxAlamofire/RxAlamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "Foundation" -framework "KeychainAccess" -framework "Kingfisher" -framework "RxAlamofire" -framework "RxSwift" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge.release.xcconfig b/Pods/Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge.release.xcconfig index b52088a..7b8cc7f 100644 --- a/Pods/Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge.release.xcconfig +++ b/Pods/Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge.release.xcconfig @@ -1,4 +1,10 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/RxAlamofire" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess/KeychainAccess.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxAlamofire/RxAlamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_LDFLAGS = $(inherited) -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "Foundation" -framework "KeychainAccess" -framework "Kingfisher" -framework "RxAlamofire" -framework "RxSwift" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-ZarinPal-ChallengeTests/Pods-ZarinPal-ChallengeTests.debug.xcconfig b/Pods/Target Support Files/Pods-ZarinPal-ChallengeTests/Pods-ZarinPal-ChallengeTests.debug.xcconfig index b52088a..a2898de 100644 --- a/Pods/Target Support Files/Pods-ZarinPal-ChallengeTests/Pods-ZarinPal-ChallengeTests.debug.xcconfig +++ b/Pods/Target Support Files/Pods-ZarinPal-ChallengeTests/Pods-ZarinPal-ChallengeTests.debug.xcconfig @@ -1,4 +1,7 @@ +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/RxAlamofire" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess/KeychainAccess.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxAlamofire/RxAlamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "Foundation" -framework "KeychainAccess" -framework "Kingfisher" -framework "RxAlamofire" -framework "RxSwift" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Pods/Target Support Files/Pods-ZarinPal-ChallengeTests/Pods-ZarinPal-ChallengeTests.release.xcconfig b/Pods/Target Support Files/Pods-ZarinPal-ChallengeTests/Pods-ZarinPal-ChallengeTests.release.xcconfig index b52088a..a2898de 100644 --- a/Pods/Target Support Files/Pods-ZarinPal-ChallengeTests/Pods-ZarinPal-ChallengeTests.release.xcconfig +++ b/Pods/Target Support Files/Pods-ZarinPal-ChallengeTests/Pods-ZarinPal-ChallengeTests.release.xcconfig @@ -1,4 +1,7 @@ +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/RxAlamofire" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess/KeychainAccess.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxAlamofire/RxAlamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "Foundation" -framework "KeychainAccess" -framework "Kingfisher" -framework "RxAlamofire" -framework "RxSwift" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/ZarinPal-Challenge.xcodeproj/project.pbxproj b/ZarinPal-Challenge.xcodeproj/project.pbxproj index 09a12a8..e4ff3e8 100644 --- a/ZarinPal-Challenge.xcodeproj/project.pbxproj +++ b/ZarinPal-Challenge.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 51; objects = { /* Begin PBXBuildFile section */ @@ -18,6 +18,21 @@ F82103D22499697D00B1A211 /* ZarinPal_ChallengeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82103D12499697D00B1A211 /* ZarinPal_ChallengeTests.swift */; }; F82103DD2499697D00B1A211 /* ZarinPal_ChallengeUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F82103DC2499697D00B1A211 /* ZarinPal_ChallengeUITests.swift */; }; F84D0AC62499BD0600B88CA0 /* UserProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84D0AC52499BD0600B88CA0 /* UserProfileView.swift */; }; + F85513BD2499E566006F309D /* NetworkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85513BC2499E566006F309D /* NetworkService.swift */; }; + F85513BF2499E5F6006F309D /* IGraphQLQueryRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85513BE2499E5F6006F309D /* IGraphQLQueryRequest.swift */; }; + F85513C12499EC0C006F309D /* APIClientService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85513C02499EC0C006F309D /* APIClientService.swift */; }; + F85513C42499ED5B006F309D /* AppConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85513C32499ED5B006F309D /* AppConfig.swift */; }; + F85513C62499F71B006F309D /* INetworkServiceEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85513C52499F71B006F309D /* INetworkServiceEndpoint.swift */; }; + F85513C9249A04F4006F309D /* Storable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85513C8249A04F4006F309D /* Storable.swift */; }; + F85513CB249A04FD006F309D /* Storage.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85513CA249A04FD006F309D /* Storage.swift */; }; + F85513CD249A06E9006F309D /* KeyChainStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85513CC249A06E9006F309D /* KeyChainStorage.swift */; }; + F85513CF249A0F7F006F309D /* OAuthCredential.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85513CE249A0F7F006F309D /* OAuthCredential.swift */; }; + F85513D1249A1080006F309D /* OAuthCredential+AuthenticationCredential.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85513D0249A1080006F309D /* OAuthCredential+AuthenticationCredential.swift */; }; + F85513D3249A126D006F309D /* AuthenticationService+Authentictor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85513D2249A126D006F309D /* AuthenticationService+Authentictor.swift */; }; + F85513D5249A1436006F309D /* Authentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85513D4249A1436006F309D /* Authentication.swift */; }; + F85513D7249A162D006F309D /* AppClientCredential.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85513D6249A162D006F309D /* AppClientCredential.swift */; }; + F85513D9249A2660006F309D /* XCAuthenticationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85513D8249A2660006F309D /* XCAuthenticationService.swift */; }; + F85513DB249A2697006F309D /* AuthenticationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85513DA249A2697006F309D /* AuthenticationService.swift */; }; F87C13F424997779002170B9 /* AuthenticationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87C13F324997779002170B9 /* AuthenticationView.swift */; }; F8C97437249989F800D6C0EF /* UserRepositoryListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8C97436249989F800D6C0EF /* UserRepositoryListView.swift */; }; F8C9743924998A0600D6C0EF /* UserRepositoryRowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8C9743824998A0600D6C0EF /* UserRepositoryRowView.swift */; }; @@ -69,6 +84,21 @@ F82103DC2499697D00B1A211 /* ZarinPal_ChallengeUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZarinPal_ChallengeUITests.swift; sourceTree = ""; }; F82103DE2499697D00B1A211 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; F84D0AC52499BD0600B88CA0 /* UserProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProfileView.swift; sourceTree = ""; }; + F85513BC2499E566006F309D /* NetworkService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkService.swift; sourceTree = ""; }; + F85513BE2499E5F6006F309D /* IGraphQLQueryRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IGraphQLQueryRequest.swift; sourceTree = ""; }; + F85513C02499EC0C006F309D /* APIClientService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIClientService.swift; sourceTree = ""; }; + F85513C32499ED5B006F309D /* AppConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppConfig.swift; sourceTree = ""; }; + F85513C52499F71B006F309D /* INetworkServiceEndpoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = INetworkServiceEndpoint.swift; sourceTree = ""; }; + F85513C8249A04F4006F309D /* Storable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Storable.swift; sourceTree = ""; }; + F85513CA249A04FD006F309D /* Storage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Storage.swift; sourceTree = ""; }; + F85513CC249A06E9006F309D /* KeyChainStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyChainStorage.swift; sourceTree = ""; }; + F85513CE249A0F7F006F309D /* OAuthCredential.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OAuthCredential.swift; sourceTree = ""; }; + F85513D0249A1080006F309D /* OAuthCredential+AuthenticationCredential.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OAuthCredential+AuthenticationCredential.swift"; sourceTree = ""; }; + F85513D2249A126D006F309D /* AuthenticationService+Authentictor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AuthenticationService+Authentictor.swift"; sourceTree = ""; }; + F85513D4249A1436006F309D /* Authentication.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Authentication.swift; sourceTree = ""; }; + F85513D6249A162D006F309D /* AppClientCredential.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppClientCredential.swift; sourceTree = ""; }; + F85513D8249A2660006F309D /* XCAuthenticationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XCAuthenticationService.swift; sourceTree = ""; }; + F85513DA249A2697006F309D /* AuthenticationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationService.swift; sourceTree = ""; }; F87C13F324997779002170B9 /* AuthenticationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationView.swift; sourceTree = ""; }; F8C97436249989F800D6C0EF /* UserRepositoryListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserRepositoryListView.swift; sourceTree = ""; }; F8C9743824998A0600D6C0EF /* UserRepositoryRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserRepositoryRowView.swift; sourceTree = ""; }; @@ -155,14 +185,17 @@ F82103B92499697B00B1A211 /* ZarinPal-Challenge */ = { isa = PBXGroup; children = ( + F85513C22499ED50006F309D /* Constant */, F875B8D024996B420052C1DC /* Views */, + F85513B92499E069006F309D /* Models */, + F85513B82499D136006F309D /* Service */, F82103BA2499697B00B1A211 /* AppDelegate.swift */, - F82103BC2499697B00B1A211 /* SceneDelegate.swift */, F82103C02499697D00B1A211 /* Assets.xcassets */, - F82103C52499697D00B1A211 /* LaunchScreen.storyboard */, F82103C82499697D00B1A211 /* Info.plist */, + F82103C52499697D00B1A211 /* LaunchScreen.storyboard */, F82103C22499697D00B1A211 /* Preview Content */, F8CF16C424998FBD00464F90 /* RepositoryData.swift */, + F82103BC2499697B00B1A211 /* SceneDelegate.swift */, ); path = "ZarinPal-Challenge"; sourceTree = ""; @@ -180,6 +213,7 @@ children = ( F82103D12499697D00B1A211 /* ZarinPal_ChallengeTests.swift */, F82103D32499697D00B1A211 /* Info.plist */, + F85513D8249A2660006F309D /* XCAuthenticationService.swift */, ); path = "ZarinPal-ChallengeTests"; sourceTree = ""; @@ -193,6 +227,65 @@ path = "ZarinPal-ChallengeUITests"; sourceTree = ""; }; + F85513B82499D136006F309D /* Service */ = { + isa = PBXGroup; + children = ( + F85513C7249A04D0006F309D /* Storage */, + F85513BB2499E40B006F309D /* Network */, + F85513BA2499E34F006F309D /* Authentication */, + ); + path = Service; + sourceTree = ""; + }; + F85513B92499E069006F309D /* Models */ = { + isa = PBXGroup; + children = ( + ); + path = Models; + sourceTree = ""; + }; + F85513BA2499E34F006F309D /* Authentication */ = { + isa = PBXGroup; + children = ( + F85513D4249A1436006F309D /* Authentication.swift */, + F85513DA249A2697006F309D /* AuthenticationService.swift */, + F85513D2249A126D006F309D /* AuthenticationService+Authentictor.swift */, + F85513CE249A0F7F006F309D /* OAuthCredential.swift */, + F85513D0249A1080006F309D /* OAuthCredential+AuthenticationCredential.swift */, + ); + path = Authentication; + sourceTree = ""; + }; + F85513BB2499E40B006F309D /* Network */ = { + isa = PBXGroup; + children = ( + F85513BC2499E566006F309D /* NetworkService.swift */, + F85513BE2499E5F6006F309D /* IGraphQLQueryRequest.swift */, + F85513C52499F71B006F309D /* INetworkServiceEndpoint.swift */, + F85513C02499EC0C006F309D /* APIClientService.swift */, + ); + path = Network; + sourceTree = ""; + }; + F85513C22499ED50006F309D /* Constant */ = { + isa = PBXGroup; + children = ( + F85513D6249A162D006F309D /* AppClientCredential.swift */, + F85513C32499ED5B006F309D /* AppConfig.swift */, + ); + path = Constant; + sourceTree = ""; + }; + F85513C7249A04D0006F309D /* Storage */ = { + isa = PBXGroup; + children = ( + F85513C8249A04F4006F309D /* Storable.swift */, + F85513CA249A04FD006F309D /* Storage.swift */, + F85513CC249A06E9006F309D /* KeyChainStorage.swift */, + ); + path = Storage; + sourceTree = ""; + }; F875B8D024996B420052C1DC /* Views */ = { isa = PBXGroup; children = ( @@ -219,6 +312,7 @@ F82103B32499697B00B1A211 /* Sources */, F82103B42499697B00B1A211 /* Frameworks */, F82103B52499697B00B1A211 /* Resources */, + 0A09E625E6CAF030614FFD4E /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -256,6 +350,7 @@ F82103D42499697D00B1A211 /* Sources */, F82103D52499697D00B1A211 /* Frameworks */, F82103D62499697D00B1A211 /* Resources */, + 94C294ECA6C35C9EFCEF3280 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -338,6 +433,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 0A09E625E6CAF030614FFD4E /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ZarinPal-Challenge/Pods-ZarinPal-Challenge-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 130565AA3D8541D872E4341B /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -404,6 +516,23 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + 94C294ECA6C35C9EFCEF3280 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests/Pods-ZarinPal-Challenge-ZarinPal-ChallengeUITests-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -413,14 +542,28 @@ files = ( F8E588922499B33F0083BD93 /* UserRepositoryPullRequestListView.swift in Sources */, F8E588902499B3290083BD93 /* UserRepositoryIssueListView.swift in Sources */, + F85513DB249A2697006F309D /* AuthenticationService.swift in Sources */, + F85513BF2499E5F6006F309D /* IGraphQLQueryRequest.swift in Sources */, F8C9743924998A0600D6C0EF /* UserRepositoryRowView.swift in Sources */, F8E5888C2499A3070083BD93 /* UserRepositoryDetailView.swift in Sources */, + F85513D3249A126D006F309D /* AuthenticationService+Authentictor.swift in Sources */, + F85513CB249A04FD006F309D /* Storage.swift in Sources */, + F85513C12499EC0C006F309D /* APIClientService.swift in Sources */, + F85513D5249A1436006F309D /* Authentication.swift in Sources */, + F85513C42499ED5B006F309D /* AppConfig.swift in Sources */, F82103BB2499697B00B1A211 /* AppDelegate.swift in Sources */, + F85513D1249A1080006F309D /* OAuthCredential+AuthenticationCredential.swift in Sources */, F8C97437249989F800D6C0EF /* UserRepositoryListView.swift in Sources */, F82103BD2499697B00B1A211 /* SceneDelegate.swift in Sources */, F84D0AC62499BD0600B88CA0 /* UserProfileView.swift in Sources */, + F85513D7249A162D006F309D /* AppClientCredential.swift in Sources */, F8E5888E2499B3130083BD93 /* UserRepositoryBranchListView.swift in Sources */, F87C13F424997779002170B9 /* AuthenticationView.swift in Sources */, + F85513CD249A06E9006F309D /* KeyChainStorage.swift in Sources */, + F85513C9249A04F4006F309D /* Storable.swift in Sources */, + F85513CF249A0F7F006F309D /* OAuthCredential.swift in Sources */, + F85513C62499F71B006F309D /* INetworkServiceEndpoint.swift in Sources */, + F85513BD2499E566006F309D /* NetworkService.swift in Sources */, F8CF16C524998FBD00464F90 /* RepositoryData.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -429,6 +572,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + F85513D9249A2660006F309D /* XCAuthenticationService.swift in Sources */, F82103D22499697D00B1A211 /* ZarinPal_ChallengeTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -589,7 +733,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_ASSET_PATHS = "\"ZarinPal-Challenge/Preview Content\""; - DEVELOPMENT_TEAM = 638B4QA28J; + DEVELOPMENT_TEAM = ""; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = "ZarinPal-Challenge/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 13.0; @@ -611,7 +755,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_ASSET_PATHS = "\"ZarinPal-Challenge/Preview Content\""; - DEVELOPMENT_TEAM = 638B4QA28J; + DEVELOPMENT_TEAM = ""; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = "ZarinPal-Challenge/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 13.0; diff --git a/ZarinPal-Challenge/Constant/AppClientCredential.swift b/ZarinPal-Challenge/Constant/AppClientCredential.swift new file mode 100644 index 0000000..e2a5e45 --- /dev/null +++ b/ZarinPal-Challenge/Constant/AppClientCredential.swift @@ -0,0 +1,37 @@ +// +// AppClientCredential.swift +// ZarinPal-Challenge +// +// Created by Farshad Mousalou on 6/17/20. +// Copyright © 2020 Farshad Mousalou. All rights reserved. +// + +import Foundation + +protocol GitClientCredential: Encodable { + var id: String { get } + var secret: String { get } + var scope: String { get } + var state: Int { get } + var redirectURL: String { get } +} + +struct AppClientCredential: Encodable, GitClientCredential { + + var id: String + var secret: String + var scope: String + var state: Int + var redirectURL: String + var code: String? = nil + + enum CodingKeys: String, CodingKey { + case id = "client_id" + case secret = "client_secret" + case scope + case state + case redirectURL = "redirect_url" + case code + } + +} diff --git a/ZarinPal-Challenge/Constant/AppConfig.swift b/ZarinPal-Challenge/Constant/AppConfig.swift new file mode 100644 index 0000000..9634e06 --- /dev/null +++ b/ZarinPal-Challenge/Constant/AppConfig.swift @@ -0,0 +1,27 @@ +// +// AppConfig.swift +// ZarinPal-Challenge +// +// Created by Farshad Mousalou on 6/17/20. +// Copyright © 2020 Farshad Mousalou. All rights reserved. +// + +import Foundation + +struct AppConfig { + + static let baseURL: URL = { + + guard let baseURL = URL(string: "https://api.github.com") else { + fatalError("Can not build baseURL") + } + + return baseURL + }() + + static let clientCredetianl = AppClientCredential(id: "c226bed88f3a6f151e69", + secret: "ec1aaeac6f1544259e9bf83632a8405fc3195ce6", + scope: "repo read:user", state: 0, + redirectURL: "zp-challenge://oauth/callback") + +} diff --git a/ZarinPal-Challenge/Info.plist b/ZarinPal-Challenge/Info.plist index 9742bf0..5dcfb97 100644 --- a/ZarinPal-Challenge/Info.plist +++ b/ZarinPal-Challenge/Info.plist @@ -16,6 +16,19 @@ $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString 1.0 + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLName + com.ifashad.github-callback + CFBundleURLSchemes + + zp-challenge + + + CFBundleVersion 1 LSRequiresIPhoneOS diff --git a/ZarinPal-Challenge/SceneDelegate.swift b/ZarinPal-Challenge/SceneDelegate.swift index cfb7196..e1483a5 100644 --- a/ZarinPal-Challenge/SceneDelegate.swift +++ b/ZarinPal-Challenge/SceneDelegate.swift @@ -13,6 +13,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? + let authentication = AuthenticationService() func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. @@ -20,6 +21,9 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). // Create the SwiftUI view that provides the window contents. + + print(#function,connectionOptions) + var items = [RepositoryData]() let fakeBranche = RepositoryData.BranchData(title: "Branch", createdDate: Date(timeIntervalSinceNow: -100), updateDate: Date()) let fakeIssue = RepositoryData.IssueData(number: "1", title: "Issue", date: Date(timeIntervalSinceNow: -50), description: "Issue Description") @@ -44,6 +48,10 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { self.window = window window.makeKeyAndVisible() } + + DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(5)) { + _ = self.authentication.requestClientAuthorize(credential: AppConfig.clientCredetianl) + } } func sceneDidDisconnect(_ scene: UIScene) { @@ -73,6 +81,29 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { // Use this method to save data, release shared resources, and store enough scene-specific state information // to restore the scene back to its current state. } + + func scene(_ scene: UIScene, openURLContexts URLContexts: Set) { + print(#function,URLContexts) + guard let url = URLContexts.first?.url else { return } + + let queryItems = URLComponents(url: url, resolvingAgainstBaseURL: false)?.queryItems + print(queryItems) + if queryItems?.contains(where: { $0.name == "error" }) == true { + + let alert = UIAlertController(title: queryItems?.first(where: { $0.name == "error" })?.value, + message: queryItems?.first(where: { $0.name == "error_description" })?.value, + preferredStyle: .alert) + alert.addAction(UIAlertAction(title: "OK", style: .cancel, handler: { (action) in + alert.dismiss(animated: true, completion: nil) + })) + + UIApplication.shared.windows.first(where: { $0.isKeyWindow })? + .rootViewController?.present(alert, animated: true, completion: nil) + + }else if let code = queryItems?.first(where: { $0.name == "code"}), let codeValue = code.value { + _ = authentication.requestAccessToken(with: codeValue, client: AppConfig.clientCredetianl).subscribe() + } + } } diff --git a/ZarinPal-Challenge/Service/Authentication/Authentication.swift b/ZarinPal-Challenge/Service/Authentication/Authentication.swift new file mode 100644 index 0000000..233d49e --- /dev/null +++ b/ZarinPal-Challenge/Service/Authentication/Authentication.swift @@ -0,0 +1,25 @@ +// +// Authentication.swift +// ZarinPal-Challenge +// +// Created by Farshad Mousalou on 6/17/20. +// Copyright © 2020 Farshad Mousalou. All rights reserved. +// + +import Foundation +import RxSwift +import Alamofire + +protocol Authentication { + + var isAuthenticated: Observable { get } + + func requestClientAuthorize(credential: AppClientCredential) -> Observable + + func requestAccessToken(with code: String, client credential: AppClientCredential) -> Observable + +} + +protocol AuthenticationInterceptable : RequestInterceptor { + +} diff --git a/ZarinPal-Challenge/Service/Authentication/AuthenticationService+Authentictor.swift b/ZarinPal-Challenge/Service/Authentication/AuthenticationService+Authentictor.swift new file mode 100644 index 0000000..2998cc4 --- /dev/null +++ b/ZarinPal-Challenge/Service/Authentication/AuthenticationService+Authentictor.swift @@ -0,0 +1,49 @@ +// +// OAuthAuthenticator.swift +// ZarinPal-Challenge +// +// Created by Farshad Mousalou on 6/17/20. +// Copyright © 2020 Farshad Mousalou. All rights reserved. +// + +import Foundation +import Alamofire + +extension AuthenticationService : Authenticator { + + + func apply(_ credential: OAuthCredential, to urlRequest: inout URLRequest) { + urlRequest.headers.add(.authorization(credential.header)) + } + + func refresh(_ credential: OAuthCredential, + for session: Session, + completion: @escaping (Result) -> Void) { + // Refresh the credential using the refresh token...then call completion with the new credential. + // + // The new credential will automatically be stored within the `AuthenticationInterceptor`. Future requests will + // be authenticated using the `apply(_:to:)` method using the new credential. + } + + func didRequest(_ urlRequest: URLRequest, + with response: HTTPURLResponse, + failDueToAuthenticationError error: Error) -> Bool { + // If authentication server CANNOT invalidate credentials, return `false` + return false + + // If authentication server CAN invalidate credentials, then inspect the response matching against what the + // authentication server returns as an authentication failure. This is generally a 401 along with a custom + // header value. + // return response.statusCode == 401 + } + + func isRequest(_ urlRequest: URLRequest, authenticatedWith credential: OAuthCredential) -> Bool { + // If authentication server CANNOT invalidate credentials, return `true` + return true + + // If authentication server CAN invalidate credentials, then compare the "Authorization" header value in the + // `URLRequest` against the Bearer token generated with the access token of the `Credential`. + // let bearerToken = HTTPHeader.authorization(bearerToken: credential.accessToken).value + // return urlRequest.headers["Authorization"] == bearerToken + } +} diff --git a/ZarinPal-Challenge/Service/Authentication/AuthenticationService.swift b/ZarinPal-Challenge/Service/Authentication/AuthenticationService.swift new file mode 100644 index 0000000..2f16737 --- /dev/null +++ b/ZarinPal-Challenge/Service/Authentication/AuthenticationService.swift @@ -0,0 +1,118 @@ +// +// AuthenticationLayer.swift +// ZarinPal-Challenge +// +// Created by Farshad Mousalou on 6/17/20. +// Copyright © 2020 Farshad Mousalou. All rights reserved. +// + +import Foundation +import RxAlamofire +import Alamofire +import RxSwift + +private let credentialKey = "github-token" + +final class AuthenticationService : AuthenticationInterceptable { + + private let authenticated = BehaviorSubject(value: false) + + var isAuthenticated: Observable { + return authenticated.asObservable() + } + + let networkService: NetworkService + let storage: SecureStorage + + private let disposeBag = DisposeBag() + + private var internalRequestInterceptor: AuthenticationInterceptor! + + deinit { + internalRequestInterceptor = nil + } + + init(networkService: NetworkService = APIClient.instance, + storage: SecureStorage = KeyChainStorage(supportsSecureStore: true)) { + self.networkService = networkService + self.storage = storage + + self.internalRequestInterceptor = AuthenticationInterceptor(authenticator: self) + authenticated.onNext(loadCredentialFromDisk() != nil) + } + + func requestClientAuthorize(credential: AppClientCredential) -> Observable { + + guard let url = URL(string:"https://github.com/login/oauth/authorize") else { + return .just(false) + } + + do { + let urlRequest = try URLRequest(url: url, method: .get) + + let request = try URLEncodedFormParameterEncoder.default.encode(credential, into: urlRequest) + + UIApplication.shared.open(request.url!, + options: [:]) { (result) in + print(result) + } + + return .just(true) + } + catch let error { + return .error(error) + } + } + + func requestAccessToken(with code: String, client credential: AppClientCredential) -> Observable { + + let endpoint = "https://github.com/login/oauth/access_token" + let newCredential = AppClientCredential(id: credential.id, + secret: credential.secret, + scope: credential.scope, state: credential.state, + redirectURL: credential.redirectURL, code: code) + + let source = networkService.executeRequest(endpoint: endpoint, + parameter:newCredential, + headers: ["Accept":"application/json"]) + + .map { (value: Result) -> OAuthCredential in + switch value { + case .success(let mapped): + print(mapped) + return mapped + case .failure(let error): + throw error + } + + } + .map(save(tokenInfo:)) + return source + } + + private func save(tokenInfo: OAuthCredential) -> Bool { + internalRequestInterceptor.credential = tokenInfo + authenticated.onNext(true) + return self.storage.store(object: tokenInfo, forKey: credentialKey) + } + + private func loadCredentialFromDisk() -> OAuthCredential? { + internalRequestInterceptor.credential = storage.retreive(type: OAuthCredential.self, forKey:credentialKey) + return internalRequestInterceptor.credential + } + +} + +extension AuthenticationService { + + func adapt(_ urlRequest: URLRequest, + for session: Session, + completion: @escaping (Result) -> Void) { + internalRequestInterceptor.adapt(urlRequest, for: session, completion: completion) + } + + func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) { + internalRequestInterceptor.retry(request, for: session, dueTo: error, completion: completion) + } + +} diff --git a/ZarinPal-Challenge/Service/Authentication/OAuthCredential+AuthenticationCredential.swift b/ZarinPal-Challenge/Service/Authentication/OAuthCredential+AuthenticationCredential.swift new file mode 100644 index 0000000..32d2f5b --- /dev/null +++ b/ZarinPal-Challenge/Service/Authentication/OAuthCredential+AuthenticationCredential.swift @@ -0,0 +1,12 @@ +// +// OAuthCredential+AuthenticationCredential.swift +// ZarinPal-Challenge +// +// Created by Farshad Mousalou on 6/17/20. +// Copyright © 2020 Farshad Mousalou. All rights reserved. +// + +import Foundation +import Alamofire + +extension OAuthCredential: AuthenticationCredential {} diff --git a/ZarinPal-Challenge/Service/Authentication/OAuthCredential.swift b/ZarinPal-Challenge/Service/Authentication/OAuthCredential.swift new file mode 100644 index 0000000..5b1cd58 --- /dev/null +++ b/ZarinPal-Challenge/Service/Authentication/OAuthCredential.swift @@ -0,0 +1,36 @@ +// +// OAuthCredential.swift +// ZarinPal-Challenge +// +// Created by Farshad Mousalou on 6/17/20. +// Copyright © 2020 Farshad Mousalou. All rights reserved. +// + +import Foundation + +struct OAuthCredential: Storable { + + let accessToken: String + let refreshToken: String? + + let tokenType: String + let scope: String? + let userId: String? + let expiration: Date? + + enum CodingKeys: String, CodingKey { + case accessToken = "access_token" + case refreshToken = "refresh_token" + case tokenType = "token_type" + case scope = "scope" + case userId = "userId" + case expiration = "expiration" + } + + // Require refresh if within 5 minutes of expiration + var requiresRefresh: Bool { Date(timeIntervalSinceNow: 60 * 5) > expiration ?? Date() } + + var header: String { + return "\(tokenType.capitalized) \(accessToken)" + } +} diff --git a/ZarinPal-Challenge/Service/Network/APIClientService.swift b/ZarinPal-Challenge/Service/Network/APIClientService.swift new file mode 100644 index 0000000..859c48b --- /dev/null +++ b/ZarinPal-Challenge/Service/Network/APIClientService.swift @@ -0,0 +1,160 @@ +// +// APIClientService.swift +// ZarinPal-Challenge +// +// Created by Farshad Mousalou on 6/17/20. +// Copyright © 2020 Farshad Mousalou. All rights reserved. +// + +import Foundation +import RxSwift +import RxAlamofire +import Alamofire + +private let queueName = "com.ifarshad.zarinpal-challenge.network.queue" + +fileprivate extension DispatchQueue { + + /// <#Description#> + static let networkResponseQueue = DispatchQueue(label: queueName, qos: .background, attributes: .concurrent, autoreleaseFrequency: .workItem) +} + + +final class APIClient: NetworkServiceInterceptable { + + + typealias SessionManager = Session + + static let `default` = APIClient(decoder: { + var decoder = JSONDecoder() + decoder.dateDecodingStrategy = .iso8601 + return decoder + }()) + + static var instance : APIClient { + return APIClient(baseURL: AppConfig.baseURL, + session: SessionManager(), + queue: .networkResponseQueue, + decoder: { + let decoder = JSONDecoder() + decoder.dateDecodingStrategy = .iso8601 + return decoder + }()) + } + + /// <#Description#> + let baseURL: URL + + /// <#Description#> + private(set) var session: SessionManager + + /// <#Description#> + let workQueue: DispatchQueue + + private var interceptor: RequestInterceptor? + + let decoder: DataDecoder + + /// <#Description#> + /// + /// - Parameters: + /// - baseURL: <#baseURL description#> + /// - session: <#session description#> + /// - queue: <#queue description#> + init(baseURL: URL = AppConfig.baseURL, + session: SessionManager = .default, + queue: DispatchQueue = .networkResponseQueue, + decoder: @autoclosure () -> DataDecoder) { + self.baseURL = baseURL + self.session = session + self.workQueue = queue + self.decoder = decoder() + + } + + func addingRequest(interceptor: RequestInterceptor) { + let locker = NSLock() + locker.lock() + defer { + locker.unlock() + } + + self.interceptor = interceptor + } + + func executeRequest(endpoint: INetworkServiceEndpoint, + query: IGraphQLQueryRequest, + headers: NetworkHeadersType) -> Observable> where T : Decodable { + + let httpBody = query.query.data(using: .utf8, allowLossyConversion: false) + + let dataRequest = session.request(attachBaseURL(into: endpoint), + method: .post, + headers: HTTPHeaders(headers), + interceptor: interceptor, + requestModifier: { (request) in + request.httpBody = httpBody + }) + .validate() + + return map(dataRequest: dataRequest, decoder: decoder) + } + + func executeRequest(endpoint: INetworkServiceEndpoint, + parameters: Parameters, + method: HTTPMethod, + headers: NetworkHeadersType) -> Observable> where T : Decodable { + + let headers = headers.compactMap { HTTPHeader(name: $0.key, value: $0.value) } + let dataRequest = session.request(attachBaseURL(into: endpoint), + method: method, + parameters: parameters, + headers: HTTPHeaders(headers), + interceptor: interceptor) + .validate() + + return map(dataRequest: dataRequest, decoder: decoder) + } + + func executeRequest(endpoint: INetworkServiceEndpoint, + parameter: P, + headers: NetworkHeadersType) -> Observable> where T : Decodable, P : Encodable { + + let headers = headers.compactMap { HTTPHeader(name: $0.key, value: $0.value) } + let dataRequest = session.request(attachBaseURL(into: endpoint), + method: .post, + parameters: parameter, + encoder: JSONParameterEncoder.prettyPrinted, + headers: HTTPHeaders(headers), + interceptor: interceptor) + .validate() + .responseString { (response) in + print(try? response.result.get()) + } + return map(dataRequest: dataRequest, decoder: decoder) + } + + /// <#Description#> + /// - Parameter endpoint: <#endpoint description#> + private func attachBaseURL(into endpoint: INetworkServiceEndpoint) -> URLConvertible { + guard let endpointURL = URL(string: endpoint.path, relativeTo: baseURL) else { + return "" + } + + return endpointURL + } + + /// <#Description#> + /// - Parameters: + /// - dataRequest: <#dataRequest description#> + /// - decoder: <#decoder description#> + private func map (dataRequest: DataRequest, decoder: DataDecoder) -> Observable> { + dataRequest.rx.decodable(decoder: decoder) + .map { value in + return Result { value } + }.catchError { (error) -> Observable> in + .just(.failure(error)) + } + } + +} diff --git a/ZarinPal-Challenge/Service/Network/IGraphQLQueryRequest.swift b/ZarinPal-Challenge/Service/Network/IGraphQLQueryRequest.swift new file mode 100644 index 0000000..886b025 --- /dev/null +++ b/ZarinPal-Challenge/Service/Network/IGraphQLQueryRequest.swift @@ -0,0 +1,13 @@ +// +// IGraphQLQueryRequest.swift +// ZarinPal-Challenge +// +// Created by Farshad Mousalou on 6/17/20. +// Copyright © 2020 Farshad Mousalou. All rights reserved. +// + +import Foundation + +protocol IGraphQLQueryRequest { + var query: String { get } +} diff --git a/ZarinPal-Challenge/Service/Network/INetworkServiceEndpoint.swift b/ZarinPal-Challenge/Service/Network/INetworkServiceEndpoint.swift new file mode 100644 index 0000000..e63fe7c --- /dev/null +++ b/ZarinPal-Challenge/Service/Network/INetworkServiceEndpoint.swift @@ -0,0 +1,24 @@ +// +// INetworkServiceEndpoint.swift +// ZarinPal-Challenge +// +// Created by Farshad Mousalou on 6/17/20. +// Copyright © 2020 Farshad Mousalou. All rights reserved. +// + +import Foundation + +/// <#Description#> +protocol INetworkServiceEndpoint { + + /// <#Description#> + var path : String { get } +} + +extension String: INetworkServiceEndpoint { + var path: String { + return self + } +} + +extension URL: INetworkServiceEndpoint {} diff --git a/ZarinPal-Challenge/Service/Network/NetworkService.swift b/ZarinPal-Challenge/Service/Network/NetworkService.swift new file mode 100644 index 0000000..ad42d54 --- /dev/null +++ b/ZarinPal-Challenge/Service/Network/NetworkService.swift @@ -0,0 +1,80 @@ +// +// NetworkService.swift +// ZarinPal-Challenge +// +// Created by Farshad Mousalou on 6/17/20. +// Copyright © 2020 Farshad Mousalou. All rights reserved. +// + +import Foundation +import RxSwift +import Alamofire + +/// `NetworkService` Abstract +protocol NetworkService { + + /// <#Description#> + typealias NetworkHeadersType = [String : String] + + /// <#Description#> + typealias NetworkParametersType = Parameters + + /// <#Description#> + typealias ResponseResult = Swift.Result + + typealias Parameters = [String: Any] + + /// <#Description#> + /// - Parameters: + /// - request: <#request description#> + /// - query: <#query description#> + /// - headers: <#headers description#> + func executeRequest(endpoint: INetworkServiceEndpoint, query:IGraphQLQueryRequest, headers:NetworkHeadersType) -> Observable> + + + /// <#Description#> + /// - Parameters: + /// - request: <#request description#> + /// - parameters: <#parameters description#> + /// - method: <#method description#> + /// - headers: <#headers description#> + func executeRequest(endpoint: INetworkServiceEndpoint, + parameters: Parameters, method: HTTPMethod, headers: NetworkHeadersType) -> Observable> + + + /// <#Description#> + /// - Parameters: + /// - request: <#request description#> + /// - parameter: <#parameter description#> + /// - method: <#method description#> + /// - headers: <#headers description#> + func executeRequest(endpoint: INetworkServiceEndpoint, + parameter: P, headers: NetworkHeadersType) -> Observable> + +} + +protocol NetworkServiceInterceptable: NetworkService { + + /// <#Description#> + /// - Parameter interceptor: <#interceptor description#> + func addingRequest(interceptor: RequestInterceptor) +} + + +extension NetworkService { + + func executeRequest(endpoint: INetworkServiceEndpoint, + query:IGraphQLQueryRequest, headers:NetworkHeadersType) -> Observable> { + return .empty() + } + + func executeRequest(endpoint: INetworkServiceEndpoint, + parameters: Parameters, method: HTTPMethod, headers: NetworkHeadersType) -> Observable> { + return .empty() + } + + func executeRequest(endpoint:INetworkServiceEndpoint, + parameter: P, headers: NetworkHeadersType) -> Observable> { + return .empty() + } +} diff --git a/ZarinPal-Challenge/Service/Storage/KeyChainStorage.swift b/ZarinPal-Challenge/Service/Storage/KeyChainStorage.swift new file mode 100644 index 0000000..5bc8ada --- /dev/null +++ b/ZarinPal-Challenge/Service/Storage/KeyChainStorage.swift @@ -0,0 +1,71 @@ +// +// KeyChainStorage.swift +// ZarinPal-Challenge +// +// Created by Farshad Mousalou on 6/17/20. +// Copyright © 2020 Farshad Mousalou. All rights reserved. +// + +import Foundation +import KeychainAccess + +fileprivate let serviceName = "com.ifarshad.ZarinPal-Challenge" + +struct KeyChainStorage: SecureStorage { + + private(set)var supportsSecureStore: Bool + + private var keychain : Keychain + + init(supportsSecureStore: Bool, keychain : Keychain = Keychain(server: serviceName, protocolType: .https)) { + self.keychain = keychain.synchronizable(true) + self.supportsSecureStore = supportsSecureStore + } + + func store(object: T, forKey key: String) -> Bool where T : Storable { + do { + let encoder = PropertyListEncoder() + let data = try encoder.encode(object) + + guard supportsSecureStore else { + UserDefaults.standard.setValue(object, forKey:key) + return UserDefaults.standard.synchronize() + } + + try keychain.set(data, key: key) + + return true + }catch let error { + print("#function ->",error) + return false + } + } + + func retreive(type: T.Type, forKey key: String) -> T? where T : Storable { + + do { + let data : Data? + + if supportsSecureStore { + data = try keychain.getData(key) + }else { + data = UserDefaults.standard.data(forKey: key) + } + + guard let objectData = data else { + return nil + } + + let decoder = PropertyListDecoder() + let object = try decoder.decode(T.self, from: objectData) + + return object + + }catch { + print("#function ->",error) + return nil + } + + } + +} diff --git a/ZarinPal-Challenge/Service/Storage/Storable.swift b/ZarinPal-Challenge/Service/Storage/Storable.swift new file mode 100644 index 0000000..44efc62 --- /dev/null +++ b/ZarinPal-Challenge/Service/Storage/Storable.swift @@ -0,0 +1,13 @@ +// +// Storable.swift +// ZarinPal-Challenge +// +// Created by Farshad Mousalou on 6/17/20. +// Copyright © 2020 Farshad Mousalou. All rights reserved. +// + +import Foundation + +protocol Storable: Codable { + +} diff --git a/ZarinPal-Challenge/Service/Storage/Storage.swift b/ZarinPal-Challenge/Service/Storage/Storage.swift new file mode 100644 index 0000000..8303ecd --- /dev/null +++ b/ZarinPal-Challenge/Service/Storage/Storage.swift @@ -0,0 +1,30 @@ +// +// Storage.swift +// ZarinPal-Challenge +// +// Created by Farshad Mousalou on 6/17/20. +// Copyright © 2020 Farshad Mousalou. All rights reserved. +// + +import Foundation + +protocol Storage { + + /// <#Description#> + /// - Parameters: + /// - object: <#object description#> + /// - forKey: <#forKey description#> + func store (object: T, forKey key: String) -> Bool + + /// <#Description#> + /// - Parameters: + /// - type: <#type description#> + /// - forKey: <#forKey description#> + func retreive(type:T.Type, forKey key: String) -> T? + +} + +protocol SecureStorage: Storage { + + var supportsSecureStore: Bool { get } +} diff --git a/ZarinPal-ChallengeTests/XCAuthenticationService.swift b/ZarinPal-ChallengeTests/XCAuthenticationService.swift new file mode 100644 index 0000000..c755172 --- /dev/null +++ b/ZarinPal-ChallengeTests/XCAuthenticationService.swift @@ -0,0 +1,56 @@ +// +// XCAuthenticationService.swift +// ZarinPal-ChallengeTests +// +// Created by Farshad Mousalou on 6/17/20. +// Copyright © 2020 Farshad Mousalou. All rights reserved. +// + +import XCTest +@testable import ZarinPal_Challenge +import RxSwift + +class XCAuthenticationService: XCTestCase { + + var authentication: Authentication! + var disposeBag : DisposeBag! + override func setUp() { + authentication = AuthenticationService() + disposeBag = DisposeBag() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + authentication = nil + disposeBag = nil + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testExample() { + // This is an example of a functional test case. + // Use XCTAssert and related functions to verify your tests produce the correct results. + } + + func testPerformanceExample() { + // This is an example of a performance test case. + self.measure { + // Put the code you want to measure the time of here. + } + } + + func testGetCodeFromGitHub() { + let expectation = self.expectation(description: "Getting Code Response") + authentication.requestClientAuthorize(credential: AppConfig.clientCredetianl) + .subscribe(onNext: { (result) in + expectation.fulfill() + }, + onError: { (error) in + print(error) + }).disposed(by: disposeBag) + + self.wait(for: [expectation], timeout: 60.0) + + + } + +}