[
  {
    "path": ".gitignore",
    "content": "Pods\nWhoToFollow.xcworkspace/xcuserdata/DTVD.xcuserdatad/\n.DS_Store\n.swp\n.swo\n"
  },
  {
    "path": "Podfile",
    "content": "# Uncomment this line to define a global platform for your project\nplatform :ios, '8.0'\n# Uncomment this line if you're using Swift\nuse_frameworks!\n\ntarget 'WhoToFollow' do\n    pod 'RxSwift', '~> 2.0'\n    pod 'RxCocoa', '~> 2.0'\n    pod 'Moya/RxSwift'\n    pod 'Moya-ModelMapper/RxSwift'\n    pod 'RxOptional'\n    pod 'SwiftyJSON', :git => 'https://github.com/SwiftyJSON/SwiftyJSON.git'\nend\n\ntarget 'WhoToFollowTests' do\n  pod 'Quick', '~> 0.8.0'\n  pod 'Nimble', '3.0.0'\n  pod 'RxBlocking', '~> 2.0'\n  pod 'RxTests', '~> 2.2'\nend\n"
  },
  {
    "path": "README.md",
    "content": "# The introduction to RxSwift you've been missing\n\nThis work is inspired by [The introduction to Reactive Programming you've been missing](https://gist.github.com/staltz/868e7e9bc2a7b8c1f754) from [@andrestaltz](https://twitter.com/andrestaltz). I recreated his RxJS sample code in RxSwift with a step-by-step walkthrough for those struggling with learning RxSwift due to lack of good references (as I did).\n\n<img src=\"https://i.gyazo.com/60f3a1b7dc9384b7400a6780cd82e727.gif\" width=\"400\">\n\n---\n\nSo you're finding yourself having trouble with learning this new Swift trend? You are not alone. \n\nRxSwift is hard, especially with the lack of good references. \nEvery tutorial out there is either too general or too specific, and ReactiveX documents just don't help:\n\n> Rx.Observable.prototype.flatMapLatest(selector, [thisArg])\n\n> Projects each element of an observable sequence into a new sequence of observable sequences \n> by incorporating the element's index and then transforms an observable sequence of observable sequences \n> into an observable sequence producing values only from the most recent observable sequence.\n\n![Imgur](http://i.imgur.com/hLF5F3K.png)\n\nI ended up digging into RxSwift examples and some [open source apps](https://github.com/devxoul/RxTodo).\nThe RxSwift's [very first document](https://github.com/ReactiveX/RxSwift/blob/master/Documentation/Why.md) \nbrings in RxSwift's `Binding` or `Retry` - things that I haven't got a clue about. \nAlso, reading the code is not easy, since it introduces RxSwift in great detail with `RxDataSources` and `Moya/RxSwift` *at the same time*.\n\nSo I decided to code a sample app that presents exactly \"Who to Follow\" pattern with step-by-step explanations. This is equivalent to Andre's work, but is written in Swift instead and I hope this can help you learn RxSwift easier than me :smile:\n\n# What is Reactive Programming?\nTapping a button, typing one character inside a text field, etc, every occurrence triggered by user can be considered as a typical asynchronous event.\nWhat if our user repeatedly taps an element, or is continuously typing in a search bar? \nThis time we have *asynchronous event streams*.\n\n```\n--a---b-c---d---X---|->\n\na, b, c, d are events\nX is an error event\n| is the 'completed' signal\n---> is the timeline\n```\n\nYou are able to create data streams out of anything, not just from tap or typing events. \nStreams are cheap and ubiquitous. Anything can be a stream: variables, user inputs, properties, caches, data structures, etc. \nFor example, imagine your Twitter feed would be a data stream in the same fashion that tap events are. \nYou can listen to that stream and react accordingly.\n\nOn top of that, you are given an amazing toolbox of functions to combine, create and filter any of those streams. \nThat's where the \"functional\" magic kicks in. \nA stream can be used as an input to another one. \nEven multiple streams can be used as inputs to another stream. \nYou can merge two streams. \nYou can filter a stream to get another one that has only those events you are interested in. \nYou can map data values from one stream to another new one.\n\n```\nbuttonTapStream: ---t----t--t----t------t-->\n                 vvvvv map(t becomes 1) vvvv\n                 ---1----1--1----1------1-->\n                 vvvvvvvvv scan(+) vvvvvvvvv\ncounterStream:   ---1----2--3----4------5-->\n```\n\nIn Reactive World streams are called **Observables**, represented by a timeline with ongoing events in chronological order.\nEvery Observable is **immutable**, which means that each stream composition will create a completely new Observable.\n \nReactive Programming(RP) introduced a whole new paradigm in development for reactive applications. \nMobile apps today are highly interactive with UI events related to the flow of data from the back-end. \nNo screen transitions are made but a user can see search results while typing in search bar, or pull down for instant refresh, etc.\n \n# Implementing a \"Who to follow\" suggestions box\nLet's dive into a real-world example. This is Twitter's UI element that suggests other accounts you may want to follow\n\n![Who To Follow](https://camo.githubusercontent.com/81e5d63c69768e1b04447d2e246f47540dd83fbd/687474703a2f2f692e696d6775722e636f6d2f65416c4e62306a2e706e67)\n\nI am going to the implement core features below\n* On startup, load accounts data from the API and display 3 suggestions\n* On tapping \"Refresh\", load 3 other account suggestions into the 3 rows\n* On tapping 'x' button on an account row, clear only that current account and display another\n* Each row displays the account's avatar and their name.\n\nBecause Twitter doesn't provide its API for unauthorized public use, I will use Github's API instead. \nThere's a [Github API](https://developer.github.com/v3/users/#get-all-users) for getting users with a `since` offset parameter.\nYou can check the working code by cloning this repo.\n\n# Request and Response\nLet's start with the easiest feature: \"On startup, load accounts data from the API and display 3 suggestions\". This is simply:\n\n1. Doing a request\n2. Getting response\n3. Rendering response data to UITableView\n\nDoing a request is the most basic part in this project. \nWe already know some great libraries for requests, such as Alamofire, but let's think in Rx first. \nConsider that request's URL is a string, in this case `https://api.github.com/users`, then we can create our very first *Observable object*: `Observable<String>`\n```Swift\nlet requestStream: Observable<String> = Observable.just(\"https://api.github.com/users\")\n```\n\nThis is a *stream* of URLs, in this case only one event (the URL string) will be emitted.\n\n```\n--a------|->\n\nWhere a is the string \"https://api.github.com/users\"\n```\n\n`requestStream` is just a stream of strings, it does nothing else. We need to make the \"real\" request happen when the event is emmited by *subscribing* to it\n```Swift\nrequestStream.subscribeNext { url in \n  // Do the real request to Github API, get back a `User` model\n  let responseStream: Observable<[User]> = UserModel().findUsers(url)\n}\n```\n\nNote that `responseStream` is also an `Observable`. \nYou can find the implementation details of `UserModel().findUsers(url)` later on in this repo, but for now just consider it as a method which returns a list of Users from the Github response, wrapped inside an `Observable` type.\n\nSo the next step is rendering this list of Users to UITableView, which can be done by subcribing to the `responseStream` again\n```Swift\nrequestStream.subscribeNext { url in \n  let responseStream: Observable<[User]> = UserModel().findUsers(url)\n  responseStream.subscribeNext { users in\n    // ...\n  }\n}\n```\n\nIf you were quick to notice, we have one `subscribeNext` call inside another, which is somewhat akin to callback hell. \nIn Rx there are simple mechanisms for transforming and creating new streams out of others, and the corresponding method here is `map(f)`.\n\n```Swift\nlet responseStream = requestStream.map { url in \n  return UserModel().findUsers(url)\n}\n```\nWe just created a beast called \"metastream\": a stream of streams. \nDon't panic just yet. \nA metastream is a stream where each emitted value is yet another stream. \nYou can think of it as [pointers](https://en.wikipedia.org/wiki/Pointer_(computer_programming)): each emitted value is a pointer to another stream. \nIn our example, each request URL is mapped to a pointer to the stream containing the corresponding response.\n\n![MetaStream](https://camo.githubusercontent.com/2a8a9cc75acd13443f588fd7f386bd7a6dcb271a/687474703a2f2f692e696d6775722e636f6d2f48486e6d6c61632e706e67)\n\nA metastream looks confusing and we just want a simple stream of responses where each emitted value is just a `[User]`, not stream of `[User]`. \nSay hi to `flatMap(f)`, a version of map() that \"flattens\" a metastream by emitting on the \"trunk\" stream everything that will be emitted on \"branch\" streams. \n`flatmap` is not a \"fix\" and metastreams are not a bug; these are really the tools for dealing with asynchronous responses in Rx.\n\n```Swift\nlet responseStream = requestStream.flatMap { url in \n  return UserModel().findUsers(url)\n}\n```\n\n![flatMap](https://camo.githubusercontent.com/0b0ac4a249e1c15d7520c220957acfece1af3e95/687474703a2f2f692e696d6775722e636f6d2f4869337a4e7a4a2e706e67)\n\nNice. If we have more events happenning in `requestStream` (like continuous tapping of a button or typing text), we will have the corresponding response results on `responseStream`, as expected:\n\n```\nrequestStream:  --url-------url----------url------------|->\nresponseStream: -----[User]-----[User]-----[User]-------|->\n```\n\nJoining all the code until now, we have:\n```Swift\nlet requestStream: Observable<String> = Observable.just(\"https://api.github.com/users\")\nlet responseStream = requestStream.flatMap { url in \n  return UserModel().findUsers(url)\n}\nresponseStream.subscribeNext { users in\n  // users is a normal [User] list, here comes the UI Rendering part\n}\n```\n\n# The refresh button\nWe will want a set of 3 new users every time a user taps the \"refresh\" button. How do we achieve this scenario?\n\nWe need 2 streams: a stream of tap events on the refresh button, and a stream of API URLs transformed from that stream. \nIn RxSwift, the stream of tap events can be created with method `rx_tap`\n```Swift\nlet refreshStream = refresh.rx_tap\nlet requestStream: Observable<String> = refreshStream.map { _ in\n  let random = Array(1...1000).random()\n  return \"https://api.github.com/users/\" + String(random)\n}\n```\n*`refresh` is an outlet for a Refresh button in our class, and random() is a custom extension*\n\nBecause I'm dumb and I don't have automated tests, I just broke one of our previously built features: a request doesn't happen anymore on startup, it happens only when the refresh button is tapped.\nUrgh. I need both behaviors: a request when either the refresh button is tapped or the UITableVIew has just loaded.\n\nWe know how to make a separate streams for each one of those cases:\n```Swift\nlet refreshStream = refresh.rx_tap\nlet requestStream: Observable<String> = refreshStream.map { _ in\n  let random = Array(1...1000).random()\n  return \"https://api.github.com/users/\" + String(random)\n}\nlet beginningStream: Observable<String> = Observable.just(\"https://api.github.com/users\")\n```\n\nBut how can we \"merge\" these two into one? Well, there's `merge()`. \n```\nstream A: ---a--------e-----o----->\nstream B: -----B---C-----D-------->\n          vvvvvvvvv merge vvvvvvvvv\n          ---a-B---C--e--D--o----->\n```\n\nIn detail:\n```Swift\nlet requestStream = Observable.of(refreshStream, beginningStream).merge()\n```\n\nAnd there is a cleaner way without the intermediate streams:\n```Swift\nlet refreshStream = refresh.rx_tap.startWith(()) // Here\nlet requestStream: Observable<String> = refreshStream.map { _ in\n  let random = Array(1...1000).random()\n  return \"https://api.github.com/users/\" + String(random)\n}\n```\nThe `startWith()` function does exactly what you think it does. No matter how your input stream looks like, the output stream resulting of `startWith(x)` will have x at the beginning. By adding `startWith()` to `refreshStream`, we \"emulate\" a refresh tap on startup.\n\n# 3 suggestions streams\nAs soons as we received 'users' data from `responseStream`, we will want to show it immmediately on the 3 UITableVIewCells. \nLet's think about Reactive mantra: \"Everything is a stream\"\n\n![Mantra](https://camo.githubusercontent.com/e581baffb3db3e4f749350326af32de8d5ba4363/687474703a2f2f692e696d6775722e636f6d2f4149696d5138432e6a7067)\n\nSo let's create a seperate stream *for each cell*.\n```Swift\n// Inside func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)\nlet userStream: Observable<User?> = responseStream.map { users in\n  guard users.count > 0 else {return nil}\n  return users.random()\n}\n```\n\nWith the refresh button we have a problem: as soon as user taps 'Refresh', the current 3 suggestions are not cleared. \nNew suggestions come in only after a response has arrived, but to make the UI look nice, we need to clean out the current suggestions when refresh is tapped. \nWe can do that by mapping Refresh tap to a nil stream, and merge to above `userStream` as such:\n```Swift\nlet nilOnRefreshTapStream: Observable<User?> = refresh.rx_tap\n  .map {_ in return nil}\nlet suggestionStream = Observable.of(userStream, nilOnRefreshTapStream)\n  .merge()\n```\nAnd when rendering, we interpret `nil` as \"no data\", hence hiding cell's UI element:\n```Swift\nsuggestionStream.subscribeNext{ op in\n  guard let u = op else { return self.clearCell(cell) }\n  return self.setCell(cell, user: u )\n}.addDisposableTo(cell.disposeBagCell)\n```\nThe big picture is now:\n```\n           refreshStream: ----------o--------o---->\n           requestStream: -r--------r--------r---->\n          responseStream: ----R---------R------R-->   \nsuggestionStream(Cell 1): ----s-----N---s----N-s-->\nsuggestionStream(Cell 2): ----q-----N---q----N-q-->\nsuggestionStream(Cell 3): ----t-----N---t----N-t-->\n```\nWhere N stands for nil.\nAs a bonus, we can also render \"empty\" suggestions on startup. \nThat is done by adding `.startWith(.None)` to the suggestion streams:\n```Swift\nlet nilOnRefreshTapStream: Observable<User?> = refresh.rx_tap\n  .map {_ in return nil}\nlet suggestionStream = Observable.of(userStream, nilOnRefreshTapStream)\n  .merge()\n  .startWith(.None)\n```\nWhich results in:\n```\n           refreshStream: ----------o--------o---->\n           requestStream: -r--------r--------r---->\n          responseStream: ----R---------R------R-->   \nsuggestionStream(Cell 1): -N--s-----N---s----N-s-->\nsuggestionStream(Cell 2): -N--q-----N---q----N-q-->\nsuggestionStream(Cell 3): -N--t-----N---t----N-t-->\n```\n\n# Closing a suggestion and using cached responses\nThere is one feature remaining to implement. \nEach suggestion should have its own 'x' button for closing it, and loading another in its place. \nAt first thought, you could say it's enough to make a new request when any close button is tapped\n```Swift\nlet closeStream = cell.cancel.rx_tap // \"cancel\" is outlet for cancel button\nlet requestStream = Observable.of(refreshStream, closeStream)\n  .merge()\n  .map { _ in\n  let random = Array(1...1000).random()\n  return \"https://api.github.com/users/\" + String(random)\n}\n```\nThis will close and reload *all suggestion*, rather than just only the one user tapped on. \nThere are a couple of different ways of solving this, and to keep it interesting, we will solve it by reusing previous responses. \nThe API's response page size is 100 users while we were using just 3 of those, so there is plenty of fresh data available. \nNo need to request more.\n\nAgain, let's think in streams. When a 'close' tap event happens, we want to use the most recently emitted (and cached) response on `responseStream` to get one random user from the list in the response. As such:\n\n```\n   requestStream: --r--------------->\n  responseStream: ------R----------->\ncloseClickStream: ------------c----->\nsuggestionStream: ------s-----s----->\n```\n\nIn Rx* there is a combinator function called `combineLatest(f)` that seems to do what we need. \nIt takes two streams A and B as inputs, and whenever either stream emits a value, combineLatest joins the two most recently emitted values a and b from both streams and outputs a value c = f(x,y), where f is a function you define. \nIt is better explained with a diagram:\n\n```\nstream A: --a-----------e--------i-------->\nstream B: -----b----c--------d-------q---->\n          vvvvvvvv combineLatest(f) vvvvvvv\n          ----AB---AC--EC---ED--ID--IQ---->\n\nwhere f is the uppercase function\n```\n\nWe can apply combineLatest() on `closeStream` and `responseStream`, so that whenever the close button is tapped, we get the latest response emitted and produce a new value on `suggestionStream`. \nOn the other hand, `combineLatest(f)` is symmetric: whenever a new response is emitted on `responseStream`, it will combine with the latest 'close' tap to produce a new suggestion. \n\n```Swift\nlet closeStream = cell.cancel.rx_tap\nlet userStream: Observable<User?> = Observable.combineLatest(closeStream, responseStream)\n{ (_, users) in\n  guard users.count > 0 else {return nil}\n  return users.random()\n}\nlet nilOnRefreshTapStream: Observable<User?> = refresh.rx_tap.map {_ in return nil}\nlet suggestionStream = Observable.of(userStream, nilOnRefreshTapStream)\n  .merge()\n  .startWith(.None)\n```\nOne piece is still missing in the puzzle. \nThe `combineLatest(f)` uses the most recent of the two sources, but if one of those sources hasn't emitted anything yet, `combineLatest(f)` cannot produce a data event on the output stream. \nIf you look at the ASCII diagram above, you will see that the output has nothing when the first stream emitted value a. \nOnly when the second stream emitted value b could it produce an output value.\n\nThere are different ways of solving this, and we will stay with the simplest one, which is simulating a tap to the 'close' button on startup:\n```Swift\nlet closeStream = cell.cancel.rx_tap.startWith(())\n```\n\n# Wrapping up\nWe are done. The complete code is below\n```Swift\nlet refreshStream = refresh.rx_tap.startWith(())\nlet requestStream: Observable<String> = refreshStream.map { _ in\n  let random = Array(1...1000).random()\n  return \"https://api.github.com/users/\" + String(random)\n}\nlet responseStream = requestStream.flatMap { url in \n  return UserModel().findUsers(url)\n}\n\n// Inside func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)\nlet closeStream = cell.cancel.rx_tap.startWith(())\nlet userStream: Observable<User?> = Observable.combineLatest(closeStream, responseStream)\n{ (_, users) in\n  guard users.count > 0 else {return nil}\n  return users.random()\n}\nlet nilOnRefreshTapStream: Observable<User?> = refresh.rx_tap.map {_ in return nil}\nlet suggestionStream = Observable.of(userStream, nilOnRefreshTapStream)\n  .merge()\n  .startWith(.None)\n\nsuggestionStream.subscribeNext{ op in\n  guard let u = op else { return self.clearCell(cell) }\n  return self.setCell(cell, user: u )\n}.addDisposableTo(cell.disposeBagCell)\n```\n\nYou can see the working example in this repo.\n\nThis example is small but dense: it features management of multiple events with proper separation of concerns, and even caching of responses. \nThe functional style made the code look more declarative than imperative: we are not giving a sequence of instructions to execute, we are just telling what something is by defining relationships between streams. \nFor instance, with Rx we told the computer that `suggestionStream` is the `closeStream` combined with one user from the latest response, besides being nil when a refresh happens or program startup happened.\n\nNotice also the impressive absence of control flow elements such as if, for, while, and the typical callback-based control flow that you expect from a Swift/IOS application. \nYou can even get rid of the if and else in the `subscribeNext()` above by using `filter()` if you want (I'll leave the implementation details to you as an exercise). \nIn Rx, we have stream functions such as `map`, `filter`, `scan`, `merge`, `combineLatest`, `startWith`, and many more to control the flow of an event-driven program. \nThis toolset of functions gives you more power in less code.\n\n# Where to go from here\nIf you think RxSwift will be your preferred library for IOS Programming, take some time to get acquainted with [RxSwift API](https://github.com/ReactiveX/RxSwift/blob/master/Documentation/API.md) for transforming, combining, and creating Observables. \nIf you want to understand those functions in diagrams of streams, take a look at [Marble diagrams](http://rxmarbles.com/). \nWhenever you get stuck trying to do something, draw those diagrams, think about them, look at the long list of functions, and think more. \nThis workflow has been effective in my experience.\n\nOnce you start getting the hang of programming with RxSwift, you will need to get used to libraries which are using it such as `RxCocoa`, `Moya/RxSwift`, `RxDataSources` and then [Driver](https://github.com/ReactiveX/RxSwift/blob/master/Documentation/Units.md), etc. \nFinally, sharpen your skills further by learning real functional programming, and getting acquainted with issues such as side effects that affect Rx.\n\nIf this tutorial helped you, [tweet it forward](https://twitter.com/intent/tweet?original_referer=https:%2F%2Fgithub.com%2FDTVD%2FThe-introduction-to-RxSwift-you-have-been-missing&amp;text=The%20introduction%20to%20RxSwift%20you%27ve%20been%20missing&amp;tw_p=tweetbutton&amp;url=https:%2F%2Fgithub.com%2FDTVD%2FThe-introduction-to-RxSwift-you-have-been-missing&amp;via=dtvd88).\n\n### Legal\nThis is primarily created by Andre Cesar de Souza Medeiros (alias \"Andre Staltz\"), 2014, and modified by Vu Nhat Minh (@Orakaro), 2016. \n\n<a rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc/4.0/\"><img alt=\"Creative Commons License\" style=\"border-width:0\" src=\"https://licensebuttons.net/l/by-nc/4.0/88x31.png\" /></a>\n\n\"Introduction to RxSwift you've been missing\" by Vu Nhat Minh is licensed under a [Creative Commons Attribution-NonCommercial 4.0 International License](\"Introduction to Reactive Programming you've been missing\" by Andre Staltz is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.).\n"
  },
  {
    "path": "WhoToFollow/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  WhoToFollow\n//\n//  Created by DTVD on 7/19/16.\n//  Copyright © 2016 DTVD. All rights reserved.\n//\n\nimport UIKit\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n    var window: UIWindow?\n\n\n    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {\n        // Override point for customization after application launch.\n        return true\n    }\n\n    func applicationWillResignActive(application: UIApplication) {\n        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n        // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n    }\n\n    func applicationDidEnterBackground(application: UIApplication) {\n        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n    }\n\n    func applicationWillEnterForeground(application: UIApplication) {\n        // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.\n    }\n\n    func applicationDidBecomeActive(application: UIApplication) {\n        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n    }\n\n    func applicationWillTerminate(application: UIApplication) {\n        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n    }\n\n\n}\n\n"
  },
  {
    "path": "WhoToFollow/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"83.5x83.5\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WhoToFollow/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WhoToFollow/Assets.xcassets/x.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"multiply.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WhoToFollow/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"10117\" systemVersion=\"15F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"10085\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Llm-lL-Icb\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xb3-aO-Qok\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "WhoToFollow/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"10117\" systemVersion=\"15G31\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" initialViewController=\"FJw-eV-t1e\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"10085\"/>\n        <capability name=\"Constraints to layout margins\" minToolsVersion=\"6.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Who To Follow-->\n        <scene sceneID=\"WT5-Da-Gny\">\n            <objects>\n                <tableViewController id=\"QNO-0y-IYo\" customClass=\"FollowTableViewController\" customModule=\"WhoToFollow\" customModuleProvider=\"target\" sceneMemberID=\"viewController\">\n                    <tableView key=\"view\" clipsSubviews=\"YES\" contentMode=\"scaleToFill\" alwaysBounceVertical=\"YES\" dataMode=\"prototypes\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"44\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"Ldo-61-Oz8\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                        <prototypes>\n                            <tableViewCell clipsSubviews=\"YES\" contentMode=\"scaleToFill\" selectionStyle=\"default\" indentationWidth=\"10\" reuseIdentifier=\"FollowCell\" rowHeight=\"70\" id=\"5Ih-yc-8Q0\" customClass=\"FollowTableViewCell\" customModule=\"WhoToFollow\" customModuleProvider=\"target\">\n                                <rect key=\"frame\" x=\"0.0\" y=\"92\" width=\"600\" height=\"70\"/>\n                                <autoresizingMask key=\"autoresizingMask\"/>\n                                <tableViewCellContentView key=\"contentView\" opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" tableViewCell=\"5Ih-yc-8Q0\" id=\"Pvr-6y-a58\">\n                                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"69\"/>\n                                    <autoresizingMask key=\"autoresizingMask\"/>\n                                    <subviews>\n                                        <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"Gdb-9T-KmK\">\n                                            <rect key=\"frame\" x=\"552\" y=\"20\" width=\"30\" height=\"30\"/>\n                                            <constraints>\n                                                <constraint firstAttribute=\"width\" constant=\"30\" id=\"0YL-9y-mFD\"/>\n                                                <constraint firstAttribute=\"height\" constant=\"30\" id=\"9qB-S6-ixU\"/>\n                                            </constraints>\n                                            <state key=\"normal\" backgroundImage=\"x\"/>\n                                        </button>\n                                        <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"ttG-8v-URR\">\n                                            <rect key=\"frame\" x=\"88\" y=\"10\" width=\"444\" height=\"50\"/>\n                                            <constraints>\n                                                <constraint firstAttribute=\"height\" constant=\"50\" id=\"mI0-dM-gau\"/>\n                                            </constraints>\n                                            <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                                            <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                                            <nil key=\"highlightedColor\"/>\n                                        </label>\n                                        <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"q9d-Bd-k24\">\n                                            <rect key=\"frame\" x=\"18\" y=\"10\" width=\"50\" height=\"50\"/>\n                                            <constraints>\n                                                <constraint firstAttribute=\"height\" constant=\"50\" id=\"7ct-cB-Eue\"/>\n                                                <constraint firstAttribute=\"width\" constant=\"50\" id=\"Prw-WN-05c\"/>\n                                            </constraints>\n                                        </imageView>\n                                    </subviews>\n                                    <constraints>\n                                        <constraint firstItem=\"ttG-8v-URR\" firstAttribute=\"centerY\" secondItem=\"q9d-Bd-k24\" secondAttribute=\"centerY\" id=\"5nv-hH-5dC\"/>\n                                        <constraint firstItem=\"Gdb-9T-KmK\" firstAttribute=\"centerY\" secondItem=\"ttG-8v-URR\" secondAttribute=\"centerY\" id=\"8JX-BU-vxj\"/>\n                                        <constraint firstItem=\"Gdb-9T-KmK\" firstAttribute=\"leading\" secondItem=\"ttG-8v-URR\" secondAttribute=\"trailing\" constant=\"20\" id=\"C5i-2s-fwh\"/>\n                                        <constraint firstItem=\"Gdb-9T-KmK\" firstAttribute=\"trailing\" secondItem=\"Pvr-6y-a58\" secondAttribute=\"trailingMargin\" constant=\"-10\" id=\"FKe-BT-7j5\"/>\n                                        <constraint firstItem=\"q9d-Bd-k24\" firstAttribute=\"leading\" secondItem=\"Pvr-6y-a58\" secondAttribute=\"leadingMargin\" constant=\"10\" id=\"MTG-1d-gnA\"/>\n                                        <constraint firstItem=\"ttG-8v-URR\" firstAttribute=\"leading\" secondItem=\"q9d-Bd-k24\" secondAttribute=\"trailing\" constant=\"20\" id=\"TVN-5u-EDf\"/>\n                                        <constraint firstItem=\"q9d-Bd-k24\" firstAttribute=\"centerY\" secondItem=\"Pvr-6y-a58\" secondAttribute=\"centerY\" id=\"tfC-8O-qdW\"/>\n                                    </constraints>\n                                </tableViewCellContentView>\n                                <connections>\n                                    <outlet property=\"avatar\" destination=\"q9d-Bd-k24\" id=\"lXa-cQ-vJV\"/>\n                                    <outlet property=\"cancel\" destination=\"Gdb-9T-KmK\" id=\"J4f-fi-RHA\"/>\n                                    <outlet property=\"name\" destination=\"ttG-8v-URR\" id=\"0p1-GD-mfg\"/>\n                                </connections>\n                            </tableViewCell>\n                        </prototypes>\n                        <connections>\n                            <outlet property=\"dataSource\" destination=\"QNO-0y-IYo\" id=\"y4n-k3-t6y\"/>\n                            <outlet property=\"delegate\" destination=\"QNO-0y-IYo\" id=\"7sJ-Vg-Zus\"/>\n                        </connections>\n                    </tableView>\n                    <navigationItem key=\"navigationItem\" title=\"Who To Follow\" id=\"LnE-FJ-uL6\">\n                        <barButtonItem key=\"rightBarButtonItem\" title=\"Refresh\" id=\"Zip-2G-yKY\"/>\n                    </navigationItem>\n                    <connections>\n                        <outlet property=\"refresh\" destination=\"Zip-2G-yKY\" id=\"g9M-8i-Grf\"/>\n                        <outlet property=\"tableView\" destination=\"Ldo-61-Oz8\" id=\"Iva-1t-w4i\"/>\n                    </connections>\n                </tableViewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"l6x-aB-acB\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"969\" y=\"319\"/>\n        </scene>\n        <!--Navigation Controller-->\n        <scene sceneID=\"j04-sR-UQX\">\n            <objects>\n                <navigationController automaticallyAdjustsScrollViewInsets=\"NO\" id=\"FJw-eV-t1e\" sceneMemberID=\"viewController\">\n                    <toolbarItems/>\n                    <navigationBar key=\"navigationBar\" contentMode=\"scaleToFill\" id=\"1lS-ZN-jLO\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"44\"/>\n                        <autoresizingMask key=\"autoresizingMask\"/>\n                    </navigationBar>\n                    <nil name=\"viewControllers\"/>\n                    <connections>\n                        <segue destination=\"QNO-0y-IYo\" kind=\"relationship\" relationship=\"rootViewController\" id=\"Wkn-A6-4Uv\"/>\n                    </connections>\n                </navigationController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"6gB-gG-oYc\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"157\" y=\"319\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"x\" width=\"50\" height=\"50\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "WhoToFollow/Extension.swift",
    "content": "import UIKit\n\nextension Array {\n    func random() -> Generator.Element {\n        let index = Int(arc4random_uniform(UInt32(count)))\n        return self[index]\n    }\n}\n"
  },
  {
    "path": "WhoToFollow/FollowTableViewCell.swift",
    "content": "import UIKit\nimport RxSwift\n\nclass FollowTableViewCell: UITableViewCell {\n    @IBOutlet weak var avatar: UIImageView!\n    @IBOutlet weak var name: UILabel!\n    @IBOutlet weak var cancel: UIButton!\n    var disposeBagCell:DisposeBag = DisposeBag()\n\n    override func prepareForReuse() {\n        disposeBagCell = DisposeBag()\n    }\n}\n"
  },
  {
    "path": "WhoToFollow/FollowTableViewController.swift",
    "content": "import UIKit\nimport RxSwift\nimport RxCocoa\nimport Moya\n\nclass FollowTableViewController: UIViewController {\n\n    @IBOutlet weak var refresh: UIBarButtonItem!\n    @IBOutlet weak var tableView: UITableView!\n    \n    var disposeBag = DisposeBag()\n    var provider: RxMoyaProvider<GitHub>! = RxMoyaProvider<GitHub>()\n    var dataSource = [User]()\n    var responseStream: Observable<[User]> = Observable.just([])\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        tableView.tableFooterView = UIView()\n        tableView.rowHeight = 70.0\n        rxBind()\n    }\n\n    func rxBind() {\n        let requestStream: Observable<Int> = refresh.rx_tap.startWith(())\n            .map { _ in\n                Array(1...1000).random()\n            }\n        responseStream = requestStream\n            .flatMap{ since in\n                UserModel(provider: self.provider).findUsers(since)\n            }\n    }\n\n}\n\nextension FollowTableViewController: UITableViewDataSource {\n\n    func numberOfSectionsInTableView(tableView: UITableView) -> Int {\n        return 1\n    }\n\n    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        return 3\n    }\n\n    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {\n        let cell = tableView.dequeueReusableCellWithIdentifier(\"FollowCell\", forIndexPath: indexPath) as! FollowTableViewCell\n        cell.cancel.showsTouchWhenHighlighted = true\n        cell.avatar.layer.cornerRadius = cell.avatar.frame.size.width / 2\n        cell.avatar.clipsToBounds = true\n\n        let closeStream = cell.cancel.rx_tap.startWith(())\n        let userStream: Observable<User?> = Observable.combineLatest(\n            closeStream,\n            responseStream)\n        { (_, users) in\n            guard users.count > 0 else {return nil}\n            return users.random()\n        }\n        let nilOnRefreshTapStream: Observable<User?> = refresh.rx_tap.map {_ in return nil}\n        let suggestionStream = Observable.of(userStream, nilOnRefreshTapStream)\n            .merge()\n            .startWith(.None)\n\n        suggestionStream.subscribeNext{ op in\n            guard let u = op else { return self.clearCell(cell) }\n            return self.setCell(cell, user: u )\n        }.addDisposableTo(cell.disposeBagCell)\n        \n        return cell\n    }\n\n    func clearCell(cell: FollowTableViewCell) {\n        cell.cancel.hidden = true\n        cell.avatar.image = nil\n        cell.name.text = nil\n    }\n\n    func setCell(cell: FollowTableViewCell, user: User) {\n        clearCell(cell)\n        guard let url = NSURL(string: user.avatarUrl) else {return}\n        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {\n            guard let data = NSData(contentsOfURL: url) else {return}\n            dispatch_async(dispatch_get_main_queue(), {\n                cell.cancel.hidden = false\n                cell.avatar.image = UIImage(data: data)\n                cell.name.text = user.name\n            })\n        }\n    }\n    \n    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {\n        tableView.deselectRowAtIndexPath(indexPath, animated: true)\n    }\n}"
  },
  {
    "path": "WhoToFollow/Github.swift",
    "content": "import Foundation\nimport Moya\n\nenum GitHub {\n    case Users(since: Int)\n}\n\nextension GitHub: TargetType {\n    var baseURL: NSURL { return NSURL(string: \"https://api.github.com\")! }\n    var path: String {\n        switch self {\n        case .Users:\n            return \"/users\"\n        }\n    }\n    var method: Moya.Method {\n        return .GET\n    }\n    var parameters: [String: AnyObject]? {\n        switch self {\n        case .Users(let since): return [\"since\": since]\n        }\n    }\n    var sampleData: NSData {\n        return \"\".dataUsingEncoding(NSUTF8StringEncoding)!\n    }\n}\n"
  },
  {
    "path": "WhoToFollow/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "WhoToFollow/User.swift",
    "content": "import Mapper\n\nstruct User: Mappable {\n    let id: Int\n    let name: String\n    let avatarUrl: String\n    \n    init(map: Mapper) throws {\n        try id = map.from(\"id\")\n        try name = map.from(\"login\")\n        try avatarUrl = map.from(\"avatar_url\")\n    }\n}\n"
  },
  {
    "path": "WhoToFollow/UserModel.swift",
    "content": "import Foundation\nimport RxSwift\nimport RxOptional\nimport Moya\nimport Moya_ModelMapper\n\nstruct UserModel {\n    let provider: RxMoyaProvider<GitHub>\n\n    func findUsers(since: Int) -> Observable<[User]> {\n        return self.provider\n            .request(GitHub.Users(since: since))\n            .debug()\n            .mapArrayOptional(User.self)\n            .replaceNilWith([])\n    }\n}\n"
  },
  {
    "path": "WhoToFollow.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t148612841D3DDF3100DF017B /* Github.swift in Sources */ = {isa = PBXBuildFile; fileRef = 148612831D3DDF3100DF017B /* Github.swift */; };\n\t\t148612861D3DE17800DF017B /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = 148612851D3DE17800DF017B /* User.swift */; };\n\t\t148612881D3DE4B300DF017B /* UserModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 148612871D3DE4B300DF017B /* UserModel.swift */; };\n\t\t1486128A1D3DF86000DF017B /* Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 148612891D3DF86000DF017B /* Extension.swift */; };\n\t\t3B7E031D1122C07FC6305327 /* Pods_WhoToFollowTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32E7CEC02C92DD0D5BA3833E /* Pods_WhoToFollowTests.framework */; };\n\t\t8FFA3362E6CE79F75508E8C1 /* Pods_WhoToFollow.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 911461D15DA8DDD2D1181B20 /* Pods_WhoToFollow.framework */; };\n\t\tB4DDDCFD1D3D26EB0050DAE0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4DDDCFC1D3D26EB0050DAE0 /* AppDelegate.swift */; };\n\t\tB4DDDD021D3D26EB0050DAE0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B4DDDD001D3D26EB0050DAE0 /* Main.storyboard */; };\n\t\tB4DDDD041D3D26EB0050DAE0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B4DDDD031D3D26EB0050DAE0 /* Assets.xcassets */; };\n\t\tB4DDDD071D3D26EB0050DAE0 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B4DDDD051D3D26EB0050DAE0 /* LaunchScreen.storyboard */; };\n\t\tB4DDDD121D3D26EB0050DAE0 /* WhoToFollowTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4DDDD111D3D26EB0050DAE0 /* WhoToFollowTests.swift */; };\n\t\tB4DDDD2B1D3D29140050DAE0 /* FollowTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4DDDD2A1D3D29140050DAE0 /* FollowTableViewController.swift */; };\n\t\tB4DDDD2D1D3D29700050DAE0 /* FollowTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4DDDD2C1D3D29700050DAE0 /* FollowTableViewCell.swift */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\tB4DDDD0E1D3D26EB0050DAE0 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = B4DDDCF11D3D26EB0050DAE0 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = B4DDDCF81D3D26EB0050DAE0;\n\t\t\tremoteInfo = WhoToFollow;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t148612831D3DDF3100DF017B /* Github.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Github.swift; sourceTree = \"<group>\"; };\n\t\t148612851D3DE17800DF017B /* User.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = \"<group>\"; };\n\t\t148612871D3DE4B300DF017B /* UserModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserModel.swift; sourceTree = \"<group>\"; };\n\t\t148612891D3DF86000DF017B /* Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Extension.swift; sourceTree = \"<group>\"; };\n\t\t32E7CEC02C92DD0D5BA3833E /* Pods_WhoToFollowTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_WhoToFollowTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t911461D15DA8DDD2D1181B20 /* Pods_WhoToFollow.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_WhoToFollow.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tA580DEB4690AACCE59A49962 /* Pods-WhoToFollowTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-WhoToFollowTests.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-WhoToFollowTests/Pods-WhoToFollowTests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tB4DDDCF91D3D26EB0050DAE0 /* WhoToFollow.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WhoToFollow.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tB4DDDCFC1D3D26EB0050DAE0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\tB4DDDD011D3D26EB0050DAE0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\tB4DDDD031D3D26EB0050DAE0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\tB4DDDD061D3D26EB0050DAE0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\tB4DDDD081D3D26EB0050DAE0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tB4DDDD0D1D3D26EB0050DAE0 /* WhoToFollowTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WhoToFollowTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\tB4DDDD111D3D26EB0050DAE0 /* WhoToFollowTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WhoToFollowTests.swift; sourceTree = \"<group>\"; };\n\t\tB4DDDD131D3D26EB0050DAE0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tB4DDDD2A1D3D29140050DAE0 /* FollowTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FollowTableViewController.swift; sourceTree = \"<group>\"; };\n\t\tB4DDDD2C1D3D29700050DAE0 /* FollowTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FollowTableViewCell.swift; sourceTree = \"<group>\"; };\n\t\tBF4C7FEC726F2A8DC87CE165 /* Pods-WhoToFollow.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-WhoToFollow.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-WhoToFollow/Pods-WhoToFollow.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tC78E3E8DA484E6DD5A3C8AAF /* Pods-WhoToFollowTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-WhoToFollowTests.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-WhoToFollowTests/Pods-WhoToFollowTests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tD3D2400B3852566FB54F323F /* Pods-WhoToFollow.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-WhoToFollow.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-WhoToFollow/Pods-WhoToFollow.debug.xcconfig\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\tB4DDDCF61D3D26EB0050DAE0 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t8FFA3362E6CE79F75508E8C1 /* Pods_WhoToFollow.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB4DDDD0A1D3D26EB0050DAE0 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t3B7E031D1122C07FC6305327 /* Pods_WhoToFollowTests.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t932A40A616BD85DA4971E7D8 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tD3D2400B3852566FB54F323F /* Pods-WhoToFollow.debug.xcconfig */,\n\t\t\t\tBF4C7FEC726F2A8DC87CE165 /* Pods-WhoToFollow.release.xcconfig */,\n\t\t\t\tA580DEB4690AACCE59A49962 /* Pods-WhoToFollowTests.debug.xcconfig */,\n\t\t\t\tC78E3E8DA484E6DD5A3C8AAF /* Pods-WhoToFollowTests.release.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t935C4CCAACADBEB1CB2817BE /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t911461D15DA8DDD2D1181B20 /* Pods_WhoToFollow.framework */,\n\t\t\t\t32E7CEC02C92DD0D5BA3833E /* Pods_WhoToFollowTests.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB4DDDCF01D3D26EB0050DAE0 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB4DDDCFB1D3D26EB0050DAE0 /* WhoToFollow */,\n\t\t\t\tB4DDDD101D3D26EB0050DAE0 /* WhoToFollowTests */,\n\t\t\t\tB4DDDCFA1D3D26EB0050DAE0 /* Products */,\n\t\t\t\t932A40A616BD85DA4971E7D8 /* Pods */,\n\t\t\t\t935C4CCAACADBEB1CB2817BE /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB4DDDCFA1D3D26EB0050DAE0 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB4DDDCF91D3D26EB0050DAE0 /* WhoToFollow.app */,\n\t\t\t\tB4DDDD0D1D3D26EB0050DAE0 /* WhoToFollowTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB4DDDCFB1D3D26EB0050DAE0 /* WhoToFollow */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB4DDDCFC1D3D26EB0050DAE0 /* AppDelegate.swift */,\n\t\t\t\tB4DDDD001D3D26EB0050DAE0 /* Main.storyboard */,\n\t\t\t\tB4DDDD031D3D26EB0050DAE0 /* Assets.xcassets */,\n\t\t\t\tB4DDDD051D3D26EB0050DAE0 /* LaunchScreen.storyboard */,\n\t\t\t\tB4DDDD081D3D26EB0050DAE0 /* Info.plist */,\n\t\t\t\tB4DDDD2A1D3D29140050DAE0 /* FollowTableViewController.swift */,\n\t\t\t\tB4DDDD2C1D3D29700050DAE0 /* FollowTableViewCell.swift */,\n\t\t\t\t148612831D3DDF3100DF017B /* Github.swift */,\n\t\t\t\t148612851D3DE17800DF017B /* User.swift */,\n\t\t\t\t148612871D3DE4B300DF017B /* UserModel.swift */,\n\t\t\t\t148612891D3DF86000DF017B /* Extension.swift */,\n\t\t\t);\n\t\t\tpath = WhoToFollow;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB4DDDD101D3D26EB0050DAE0 /* WhoToFollowTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tB4DDDD111D3D26EB0050DAE0 /* WhoToFollowTests.swift */,\n\t\t\t\tB4DDDD131D3D26EB0050DAE0 /* Info.plist */,\n\t\t\t);\n\t\t\tpath = WhoToFollowTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\tB4DDDCF81D3D26EB0050DAE0 /* WhoToFollow */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = B4DDDD211D3D26EB0050DAE0 /* Build configuration list for PBXNativeTarget \"WhoToFollow\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t41F69BD4F0BCBF8009E84D8D /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tB4DDDCF51D3D26EB0050DAE0 /* Sources */,\n\t\t\t\tB4DDDCF61D3D26EB0050DAE0 /* Frameworks */,\n\t\t\t\tB4DDDCF71D3D26EB0050DAE0 /* Resources */,\n\t\t\t\tF80817C19D7E9B4680BF8FD9 /* [CP] Embed Pods Frameworks */,\n\t\t\t\t4D81FFBC746BCA351B0E6CBB /* [CP] Copy Pods Resources */,\n\t\t\t\t9491843B804D34BF3C1C2EF2 /* Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = WhoToFollow;\n\t\t\tproductName = WhoToFollow;\n\t\t\tproductReference = B4DDDCF91D3D26EB0050DAE0 /* WhoToFollow.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\tB4DDDD0C1D3D26EB0050DAE0 /* WhoToFollowTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = B4DDDD241D3D26EB0050DAE0 /* Build configuration list for PBXNativeTarget \"WhoToFollowTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t910BDE30B7501E8A2DE7FB0F /* [CP] Check Pods Manifest.lock */,\n\t\t\t\tB4DDDD091D3D26EB0050DAE0 /* Sources */,\n\t\t\t\tB4DDDD0A1D3D26EB0050DAE0 /* Frameworks */,\n\t\t\t\tB4DDDD0B1D3D26EB0050DAE0 /* Resources */,\n\t\t\t\tB0EB3FAB78B402532551BDE5 /* [CP] Embed Pods Frameworks */,\n\t\t\t\tC63794B042EAF3F1B4969774 /* [CP] Copy Pods Resources */,\n\t\t\t\tD5D1452E6E441C02FB3D10FD /* Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\tB4DDDD0F1D3D26EB0050DAE0 /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = WhoToFollowTests;\n\t\t\tproductName = WhoToFollowTests;\n\t\t\tproductReference = B4DDDD0D1D3D26EB0050DAE0 /* WhoToFollowTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\tB4DDDCF11D3D26EB0050DAE0 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0730;\n\t\t\t\tLastUpgradeCheck = 0730;\n\t\t\t\tORGANIZATIONNAME = DTVD;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\tB4DDDCF81D3D26EB0050DAE0 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3.1;\n\t\t\t\t\t};\n\t\t\t\t\tB4DDDD0C1D3D26EB0050DAE0 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3.1;\n\t\t\t\t\t\tTestTargetID = B4DDDCF81D3D26EB0050DAE0;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = B4DDDCF41D3D26EB0050DAE0 /* Build configuration list for PBXProject \"WhoToFollow\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = B4DDDCF01D3D26EB0050DAE0;\n\t\t\tproductRefGroup = B4DDDCFA1D3D26EB0050DAE0 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\tB4DDDCF81D3D26EB0050DAE0 /* WhoToFollow */,\n\t\t\t\tB4DDDD0C1D3D26EB0050DAE0 /* WhoToFollowTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\tB4DDDCF71D3D26EB0050DAE0 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB4DDDD071D3D26EB0050DAE0 /* LaunchScreen.storyboard in Resources */,\n\t\t\t\tB4DDDD041D3D26EB0050DAE0 /* Assets.xcassets in Resources */,\n\t\t\t\tB4DDDD021D3D26EB0050DAE0 /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB4DDDD0B1D3D26EB0050DAE0 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t41F69BD4F0BCBF8009E84D8D /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_ROOT}/../Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [[ $? != 0 ]] ; then\\n    cat << EOM\\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\nEOM\\n    exit 1\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t4D81FFBC746BCA351B0E6CBB /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-WhoToFollow/Pods-WhoToFollow-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t910BDE30B7501E8A2DE7FB0F /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_ROOT}/../Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [[ $? != 0 ]] ; then\\n    cat << EOM\\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\nEOM\\n    exit 1\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t9491843B804D34BF3C1C2EF2 /* Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-WhoToFollow/Pods-WhoToFollow-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tB0EB3FAB78B402532551BDE5 /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-WhoToFollowTests/Pods-WhoToFollowTests-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tC63794B042EAF3F1B4969774 /* [CP] Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-WhoToFollowTests/Pods-WhoToFollowTests-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tD5D1452E6E441C02FB3D10FD /* Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-WhoToFollowTests/Pods-WhoToFollowTests-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tF80817C19D7E9B4680BF8FD9 /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-WhoToFollow/Pods-WhoToFollow-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\tB4DDDCF51D3D26EB0050DAE0 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB4DDDD2B1D3D29140050DAE0 /* FollowTableViewController.swift in Sources */,\n\t\t\t\tB4DDDD2D1D3D29700050DAE0 /* FollowTableViewCell.swift in Sources */,\n\t\t\t\t1486128A1D3DF86000DF017B /* Extension.swift in Sources */,\n\t\t\t\t148612841D3DDF3100DF017B /* Github.swift in Sources */,\n\t\t\t\t148612881D3DE4B300DF017B /* UserModel.swift in Sources */,\n\t\t\t\t148612861D3DE17800DF017B /* User.swift in Sources */,\n\t\t\t\tB4DDDCFD1D3D26EB0050DAE0 /* AppDelegate.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\tB4DDDD091D3D26EB0050DAE0 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\tB4DDDD121D3D26EB0050DAE0 /* WhoToFollowTests.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\tB4DDDD0F1D3D26EB0050DAE0 /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = B4DDDCF81D3D26EB0050DAE0 /* WhoToFollow */;\n\t\t\ttargetProxy = B4DDDD0E1D3D26EB0050DAE0 /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\tB4DDDD001D3D26EB0050DAE0 /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tB4DDDD011D3D26EB0050DAE0 /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB4DDDD051D3D26EB0050DAE0 /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\tB4DDDD061D3D26EB0050DAE0 /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\tB4DDDD1F1D3D26EB0050DAE0 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tB4DDDD201D3D26EB0050DAE0 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tB4DDDD221D3D26EB0050DAE0 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = D3D2400B3852566FB54F323F /* Pods-WhoToFollow.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tINFOPLIST_FILE = WhoToFollow/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.vunhatminh.WhoToFollow;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tB4DDDD231D3D26EB0050DAE0 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = BF4C7FEC726F2A8DC87CE165 /* Pods-WhoToFollow.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tINFOPLIST_FILE = WhoToFollow/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.vunhatminh.WhoToFollow;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\tB4DDDD251D3D26EB0050DAE0 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = A580DEB4690AACCE59A49962 /* Pods-WhoToFollowTests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = WhoToFollowTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.vunhatminh.WhoToFollowTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/WhoToFollow.app/WhoToFollow\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\tB4DDDD261D3D26EB0050DAE0 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = C78E3E8DA484E6DD5A3C8AAF /* Pods-WhoToFollowTests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tINFOPLIST_FILE = WhoToFollowTests/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.vunhatminh.WhoToFollowTests;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/WhoToFollow.app/WhoToFollow\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\tB4DDDCF41D3D26EB0050DAE0 /* Build configuration list for PBXProject \"WhoToFollow\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tB4DDDD1F1D3D26EB0050DAE0 /* Debug */,\n\t\t\t\tB4DDDD201D3D26EB0050DAE0 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tB4DDDD211D3D26EB0050DAE0 /* Build configuration list for PBXNativeTarget \"WhoToFollow\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tB4DDDD221D3D26EB0050DAE0 /* Debug */,\n\t\t\t\tB4DDDD231D3D26EB0050DAE0 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\tB4DDDD241D3D26EB0050DAE0 /* Build configuration list for PBXNativeTarget \"WhoToFollowTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\tB4DDDD251D3D26EB0050DAE0 /* Debug */,\n\t\t\t\tB4DDDD261D3D26EB0050DAE0 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = B4DDDCF11D3D26EB0050DAE0 /* Project object */;\n}\n"
  },
  {
    "path": "WhoToFollow.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:WhoToFollow.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "WhoToFollow.xcodeproj/xcuserdata/DTVD.xcuserdatad/xcschemes/WhoToFollow.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0730\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"B4DDDCF81D3D26EB0050DAE0\"\n               BuildableName = \"WhoToFollow.app\"\n               BlueprintName = \"WhoToFollow\"\n               ReferencedContainer = \"container:WhoToFollow.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"B4DDDD0C1D3D26EB0050DAE0\"\n               BuildableName = \"WhoToFollowTests.xctest\"\n               BlueprintName = \"WhoToFollowTests\"\n               ReferencedContainer = \"container:WhoToFollow.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"B4DDDD171D3D26EB0050DAE0\"\n               BuildableName = \"WhoToFollowUITests.xctest\"\n               BlueprintName = \"WhoToFollowUITests\"\n               ReferencedContainer = \"container:WhoToFollow.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"B4DDDCF81D3D26EB0050DAE0\"\n            BuildableName = \"WhoToFollow.app\"\n            BlueprintName = \"WhoToFollow\"\n            ReferencedContainer = \"container:WhoToFollow.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"B4DDDCF81D3D26EB0050DAE0\"\n            BuildableName = \"WhoToFollow.app\"\n            BlueprintName = \"WhoToFollow\"\n            ReferencedContainer = \"container:WhoToFollow.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"B4DDDCF81D3D26EB0050DAE0\"\n            BuildableName = \"WhoToFollow.app\"\n            BlueprintName = \"WhoToFollow\"\n            ReferencedContainer = \"container:WhoToFollow.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "WhoToFollow.xcodeproj/xcuserdata/DTVD.xcuserdatad/xcschemes/xcschememanagement.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>SchemeUserState</key>\n\t<dict>\n\t\t<key>WhoToFollow.xcscheme</key>\n\t\t<dict>\n\t\t\t<key>orderHint</key>\n\t\t\t<integer>0</integer>\n\t\t</dict>\n\t</dict>\n\t<key>SuppressBuildableAutocreation</key>\n\t<dict>\n\t\t<key>B4DDDCF81D3D26EB0050DAE0</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>B4DDDD0C1D3D26EB0050DAE0</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>B4DDDD171D3D26EB0050DAE0</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "WhoToFollow.xcodeproj/xcuserdata/vunhat_minh.xcuserdatad/xcschemes/WhoToFollow.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0730\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"B4DDDCF81D3D26EB0050DAE0\"\n               BuildableName = \"WhoToFollow.app\"\n               BlueprintName = \"WhoToFollow\"\n               ReferencedContainer = \"container:WhoToFollow.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"B4DDDD0C1D3D26EB0050DAE0\"\n               BuildableName = \"WhoToFollowTests.xctest\"\n               BlueprintName = \"WhoToFollowTests\"\n               ReferencedContainer = \"container:WhoToFollow.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"B4DDDD171D3D26EB0050DAE0\"\n               BuildableName = \"WhoToFollowUITests.xctest\"\n               BlueprintName = \"WhoToFollowUITests\"\n               ReferencedContainer = \"container:WhoToFollow.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"B4DDDCF81D3D26EB0050DAE0\"\n            BuildableName = \"WhoToFollow.app\"\n            BlueprintName = \"WhoToFollow\"\n            ReferencedContainer = \"container:WhoToFollow.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"B4DDDCF81D3D26EB0050DAE0\"\n            BuildableName = \"WhoToFollow.app\"\n            BlueprintName = \"WhoToFollow\"\n            ReferencedContainer = \"container:WhoToFollow.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"B4DDDCF81D3D26EB0050DAE0\"\n            BuildableName = \"WhoToFollow.app\"\n            BlueprintName = \"WhoToFollow\"\n            ReferencedContainer = \"container:WhoToFollow.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "WhoToFollow.xcodeproj/xcuserdata/vunhat_minh.xcuserdatad/xcschemes/xcschememanagement.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>SchemeUserState</key>\n\t<dict>\n\t\t<key>WhoToFollow.xcscheme</key>\n\t\t<dict>\n\t\t\t<key>orderHint</key>\n\t\t\t<integer>13</integer>\n\t\t</dict>\n\t</dict>\n\t<key>SuppressBuildableAutocreation</key>\n\t<dict>\n\t\t<key>B4DDDCF81D3D26EB0050DAE0</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>B4DDDD0C1D3D26EB0050DAE0</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t\t<key>B4DDDD171D3D26EB0050DAE0</key>\n\t\t<dict>\n\t\t\t<key>primary</key>\n\t\t\t<true/>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "WhoToFollow.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:WhoToFollow.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "WhoToFollow.xcworkspace/xcuserdata/vunhat_minh.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Bucket\n   type = \"0\"\n   version = \"2.0\">\n</Bucket>\n"
  },
  {
    "path": "WhoToFollowTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "WhoToFollowTests/WhoToFollowTests.swift",
    "content": "//\n//  WhoToFollowTests.swift\n//  WhoToFollowTests\n//\n//  Created by DTVD on 7/19/16.\n//  Copyright © 2016 DTVD. All rights reserved.\n//\n\nimport XCTest\n@testable import WhoToFollow\n\nclass WhoToFollowTests: XCTestCase {\n    \n    override func setUp() {\n        super.setUp()\n        // Put setup code here. This method is called before the invocation of each test method in the class.\n    }\n    \n    override func tearDown() {\n        // Put teardown code here. This method is called after the invocation of each test method in the class.\n        super.tearDown()\n    }\n    \n    func testExample() {\n        // This is an example of a functional test case.\n        // Use XCTAssert and related functions to verify your tests produce the correct results.\n    }\n    \n    func testPerformanceExample() {\n        // This is an example of a performance test case.\n        self.measureBlock {\n            // Put the code you want to measure the time of here.\n        }\n    }\n    \n}\n"
  }
]