Full Code of Urinx/SublimeCode for AI

master 9d07c01d69e1 cached
763 files
87.4 MB
1.1M tokens
337 symbols
1 requests
Download .txt
Showing preview only (4,491K chars total). Download the full file or copy to clipboard to get everything.
Repository: Urinx/SublimeCode
Branch: master
Commit: 9d07c01d69e1
Files: 763
Total size: 87.4 MB

Directory structure:
gitextract_fjit1hwf/

├── .gitignore
├── LICENSE
├── README.md
├── Sublime/
│   ├── Cycript.framework/
│   │   ├── Cycript
│   │   └── Headers/
│   │       └── Cycript.h
│   ├── Podfile
│   ├── Pods/
│   │   ├── AASquaresLoading/
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   └── Source/
│   │   │       └── AASquaresLoading.swift
│   │   ├── Alamofire/
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   └── Source/
│   │   │       ├── Alamofire.swift
│   │   │       ├── Download.swift
│   │   │       ├── Error.swift
│   │   │       ├── Manager.swift
│   │   │       ├── MultipartFormData.swift
│   │   │       ├── NetworkReachabilityManager.swift
│   │   │       ├── Notifications.swift
│   │   │       ├── ParameterEncoding.swift
│   │   │       ├── Request.swift
│   │   │       ├── Response.swift
│   │   │       ├── ResponseSerialization.swift
│   │   │       ├── Result.swift
│   │   │       ├── ServerTrustPolicy.swift
│   │   │       ├── Stream.swift
│   │   │       ├── Timeline.swift
│   │   │       ├── Upload.swift
│   │   │       └── Validation.swift
│   │   ├── AlamofireRSSParser/
│   │   │   ├── LICENSE
│   │   │   ├── Pod/
│   │   │   │   └── Classes/
│   │   │   │       ├── AlamofireRSSParser.h
│   │   │   │       ├── AlamofireRSSParser.swift
│   │   │   │       ├── RSSFeed.swift
│   │   │   │       └── RSSItem.swift
│   │   │   └── README.md
│   │   ├── CYRTextView/
│   │   │   ├── CYRTextView/
│   │   │   │   ├── CYRLayoutManager.h
│   │   │   │   ├── CYRLayoutManager.m
│   │   │   │   ├── CYRTextStorage.h
│   │   │   │   ├── CYRTextStorage.m
│   │   │   │   ├── CYRTextView.h
│   │   │   │   ├── CYRTextView.m
│   │   │   │   ├── CYRToken.h
│   │   │   │   └── CYRToken.m
│   │   │   ├── LICENSE
│   │   │   └── README.md
│   │   ├── Charts/
│   │   │   ├── Charts/
│   │   │   │   └── Classes/
│   │   │   │       ├── Animation/
│   │   │   │       │   ├── ChartAnimationEasing.swift
│   │   │   │       │   └── ChartAnimator.swift
│   │   │   │       ├── Charts/
│   │   │   │       │   ├── BarChartView.swift
│   │   │   │       │   ├── BarLineChartViewBase.swift
│   │   │   │       │   ├── BubbleChartView.swift
│   │   │   │       │   ├── CandleStickChartView.swift
│   │   │   │       │   ├── ChartViewBase.swift
│   │   │   │       │   ├── CombinedChartView.swift
│   │   │   │       │   ├── HorizontalBarChartView.swift
│   │   │   │       │   ├── LineChartView.swift
│   │   │   │       │   ├── PieChartView.swift
│   │   │   │       │   ├── PieRadarChartViewBase.swift
│   │   │   │       │   ├── RadarChartView.swift
│   │   │   │       │   └── ScatterChartView.swift
│   │   │   │       ├── Components/
│   │   │   │       │   ├── ChartAxisBase.swift
│   │   │   │       │   ├── ChartComponentBase.swift
│   │   │   │       │   ├── ChartLegend.swift
│   │   │   │       │   ├── ChartLimitLine.swift
│   │   │   │       │   ├── ChartMarker.swift
│   │   │   │       │   ├── ChartXAxis.swift
│   │   │   │       │   └── ChartYAxis.swift
│   │   │   │       ├── Data/
│   │   │   │       │   ├── Implementations/
│   │   │   │       │   │   ├── ChartBaseDataSet.swift
│   │   │   │       │   │   └── Standard/
│   │   │   │       │   │       ├── BarChartData.swift
│   │   │   │       │   │       ├── BarChartDataEntry.swift
│   │   │   │       │   │       ├── BarChartDataSet.swift
│   │   │   │       │   │       ├── BarLineScatterCandleBubbleChartData.swift
│   │   │   │       │   │       ├── BarLineScatterCandleBubbleChartDataSet.swift
│   │   │   │       │   │       ├── BubbleChartData.swift
│   │   │   │       │   │       ├── BubbleChartDataEntry.swift
│   │   │   │       │   │       ├── BubbleChartDataSet.swift
│   │   │   │       │   │       ├── CandleChartData.swift
│   │   │   │       │   │       ├── CandleChartDataEntry.swift
│   │   │   │       │   │       ├── CandleChartDataSet.swift
│   │   │   │       │   │       ├── ChartData.swift
│   │   │   │       │   │       ├── ChartDataEntry.swift
│   │   │   │       │   │       ├── ChartDataSet.swift
│   │   │   │       │   │       ├── CombinedChartData.swift
│   │   │   │       │   │       ├── LineChartData.swift
│   │   │   │       │   │       ├── LineChartDataSet.swift
│   │   │   │       │   │       ├── LineRadarChartDataSet.swift
│   │   │   │       │   │       ├── LineScatterCandleRadarChartDataSet.swift
│   │   │   │       │   │       ├── PieChartData.swift
│   │   │   │       │   │       ├── PieChartDataSet.swift
│   │   │   │       │   │       ├── RadarChartData.swift
│   │   │   │       │   │       ├── RadarChartDataSet.swift
│   │   │   │       │   │       ├── ScatterChartData.swift
│   │   │   │       │   │       └── ScatterChartDataSet.swift
│   │   │   │       │   └── Interfaces/
│   │   │   │       │       ├── IBarChartDataSet.swift
│   │   │   │       │       ├── IBarLineScatterCandleBubbleChartDataSet.swift
│   │   │   │       │       ├── IBubbleChartDataSet.swift
│   │   │   │       │       ├── ICandleChartDataSet.swift
│   │   │   │       │       ├── IChartDataSet.swift
│   │   │   │       │       ├── ILineChartDataSet.swift
│   │   │   │       │       ├── ILineRadarChartDataSet.swift
│   │   │   │       │       ├── ILineScatterCandleRadarChartDataSet.swift
│   │   │   │       │       ├── IPieChartDataSet.swift
│   │   │   │       │       ├── IRadarChartDataSet.swift
│   │   │   │       │       └── IScatterChartDataSet.swift
│   │   │   │       ├── Filters/
│   │   │   │       │   ├── ChartDataApproximatorFilter.swift
│   │   │   │       │   └── ChartDataBaseFilter.swift
│   │   │   │       ├── Formatters/
│   │   │   │       │   ├── ChartDefaultFillFormatter.swift
│   │   │   │       │   ├── ChartDefaultXAxisValueFormatter.swift
│   │   │   │       │   ├── ChartFillFormatter.swift
│   │   │   │       │   └── ChartXAxisValueFormatter.swift
│   │   │   │       ├── Highlight/
│   │   │   │       │   ├── BarChartHighlighter.swift
│   │   │   │       │   ├── ChartHighlight.swift
│   │   │   │       │   ├── ChartHighlighter.swift
│   │   │   │       │   ├── ChartRange.swift
│   │   │   │       │   ├── CombinedHighlighter.swift
│   │   │   │       │   └── HorizontalBarChartHighlighter.swift
│   │   │   │       ├── Interfaces/
│   │   │   │       │   ├── BarChartDataProvider.swift
│   │   │   │       │   ├── BarLineScatterCandleBubbleChartDataProvider.swift
│   │   │   │       │   ├── BubbleChartDataProvider.swift
│   │   │   │       │   ├── CandleChartDataProvider.swift
│   │   │   │       │   ├── ChartDataProvider.swift
│   │   │   │       │   ├── LineChartDataProvider.swift
│   │   │   │       │   └── ScatterChartDataProvider.swift
│   │   │   │       ├── Jobs/
│   │   │   │       │   ├── AnimatedMoveViewJob.swift
│   │   │   │       │   ├── AnimatedViewPortJob.swift
│   │   │   │       │   ├── AnimatedZoomViewJob.swift
│   │   │   │       │   ├── ChartViewPortJob.swift
│   │   │   │       │   ├── MoveChartViewJob.swift
│   │   │   │       │   └── ZoomChartViewJob.swift
│   │   │   │       ├── Renderers/
│   │   │   │       │   ├── BarChartRenderer.swift
│   │   │   │       │   ├── BubbleChartRenderer.swift
│   │   │   │       │   ├── CandleStickChartRenderer.swift
│   │   │   │       │   ├── ChartAxisRendererBase.swift
│   │   │   │       │   ├── ChartDataRendererBase.swift
│   │   │   │       │   ├── ChartLegendRenderer.swift
│   │   │   │       │   ├── ChartRendererBase.swift
│   │   │   │       │   ├── ChartXAxisRenderer.swift
│   │   │   │       │   ├── ChartXAxisRendererBarChart.swift
│   │   │   │       │   ├── ChartXAxisRendererHorizontalBarChart.swift
│   │   │   │       │   ├── ChartXAxisRendererRadarChart.swift
│   │   │   │       │   ├── ChartYAxisRenderer.swift
│   │   │   │       │   ├── ChartYAxisRendererHorizontalBarChart.swift
│   │   │   │       │   ├── ChartYAxisRendererRadarChart.swift
│   │   │   │       │   ├── CombinedChartRenderer.swift
│   │   │   │       │   ├── HorizontalBarChartRenderer.swift
│   │   │   │       │   ├── LineChartRenderer.swift
│   │   │   │       │   ├── LineRadarChartRenderer.swift
│   │   │   │       │   ├── LineScatterCandleRadarChartRenderer.swift
│   │   │   │       │   ├── PieChartRenderer.swift
│   │   │   │       │   ├── RadarChartRenderer.swift
│   │   │   │       │   └── ScatterChartRenderer.swift
│   │   │   │       └── Utils/
│   │   │   │           ├── ChartColorTemplates.swift
│   │   │   │           ├── ChartFill.swift
│   │   │   │           ├── ChartPlatform.swift
│   │   │   │           ├── ChartSelectionDetail.swift
│   │   │   │           ├── ChartTransformer.swift
│   │   │   │           ├── ChartTransformerHorizontalBarChart.swift
│   │   │   │           ├── ChartUtils.swift
│   │   │   │           └── ChartViewPortHandler.swift
│   │   │   ├── LICENSE
│   │   │   └── README.md
│   │   ├── DGElasticPullToRefresh/
│   │   │   ├── DGElasticPullToRefresh/
│   │   │   │   ├── DGElasticPullToRefreshConstants.swift
│   │   │   │   ├── DGElasticPullToRefreshExtensions.swift
│   │   │   │   ├── DGElasticPullToRefreshLoadingView.swift
│   │   │   │   ├── DGElasticPullToRefreshLoadingViewCircle.swift
│   │   │   │   └── DGElasticPullToRefreshView.swift
│   │   │   ├── LICENSE
│   │   │   └── README.md
│   │   ├── EZAudio/
│   │   │   ├── EZAudio/
│   │   │   │   ├── AEFloatConverter.h
│   │   │   │   ├── AEFloatConverter.m
│   │   │   │   ├── EZAudio.h
│   │   │   │   ├── EZAudio.m
│   │   │   │   ├── EZAudioFile.h
│   │   │   │   ├── EZAudioFile.m
│   │   │   │   ├── EZAudioPlayer.h
│   │   │   │   ├── EZAudioPlayer.m
│   │   │   │   ├── EZAudioPlot.h
│   │   │   │   ├── EZAudioPlot.m
│   │   │   │   ├── EZAudioPlotGL.h
│   │   │   │   ├── EZAudioPlotGL.m
│   │   │   │   ├── EZAudioPlotGLKViewController.h
│   │   │   │   ├── EZAudioPlotGLKViewController.m
│   │   │   │   ├── EZMicrophone.h
│   │   │   │   ├── EZMicrophone.m
│   │   │   │   ├── EZOutput.h
│   │   │   │   ├── EZOutput.m
│   │   │   │   ├── EZPlot.h
│   │   │   │   ├── EZPlot.m
│   │   │   │   ├── EZRecorder.h
│   │   │   │   ├── EZRecorder.m
│   │   │   │   ├── TPCircularBuffer.c
│   │   │   │   └── TPCircularBuffer.h
│   │   │   ├── LICENSE
│   │   │   └── README.md
│   │   ├── Gifu/
│   │   │   ├── Carthage/
│   │   │   │   └── Checkouts/
│   │   │   │       └── Runes/
│   │   │   │           └── Source/
│   │   │   │               └── Runes.swift
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   └── Source/
│   │   │       ├── AnimatableImageView.swift
│   │   │       ├── AnimatedFrame.swift
│   │   │       ├── Animator.swift
│   │   │       ├── ArrayExtension.swift
│   │   │       ├── CGSizeExtension.swift
│   │   │       ├── FunctionalHelpers.swift
│   │   │       ├── Gifu.h
│   │   │       ├── ImageSourceHelpers.swift
│   │   │       └── UIImageExtension.swift
│   │   ├── NMSSH/
│   │   │   ├── LICENSE
│   │   │   ├── NMSSH/
│   │   │   │   ├── Config/
│   │   │   │   │   ├── NMSSH+Protected.h
│   │   │   │   │   ├── NMSSHLogger.h
│   │   │   │   │   ├── NMSSHLogger.m
│   │   │   │   │   ├── socket_helper.h
│   │   │   │   │   └── socket_helper.m
│   │   │   │   ├── NMSFTP.h
│   │   │   │   ├── NMSFTP.m
│   │   │   │   ├── NMSFTPFile.h
│   │   │   │   ├── NMSFTPFile.m
│   │   │   │   ├── NMSSH.h
│   │   │   │   ├── NMSSHChannel.h
│   │   │   │   ├── NMSSHChannel.m
│   │   │   │   ├── NMSSHConfig.h
│   │   │   │   ├── NMSSHConfig.m
│   │   │   │   ├── NMSSHHostConfig.h
│   │   │   │   ├── NMSSHHostConfig.m
│   │   │   │   ├── NMSSHSession.h
│   │   │   │   ├── NMSSHSession.m
│   │   │   │   └── Protocols/
│   │   │   │       ├── NMSSHChannelDelegate.h
│   │   │   │       └── NMSSHSessionDelegate.h
│   │   │   ├── NMSSH-iOS/
│   │   │   │   ├── Libraries/
│   │   │   │   │   ├── include/
│   │   │   │   │   │   └── libssh2/
│   │   │   │   │   │       ├── libssh2.h
│   │   │   │   │   │       ├── libssh2_publickey.h
│   │   │   │   │   │       └── libssh2_sftp.h
│   │   │   │   │   └── lib/
│   │   │   │   │       ├── libcrypto.a
│   │   │   │   │       ├── libssh2.a
│   │   │   │   │       └── libssl.a
│   │   │   │   └── NMSSH.h
│   │   │   └── README.md
│   │   ├── Pods.xcodeproj/
│   │   │   └── project.pbxproj
│   │   ├── RongCloudIMKit/
│   │   │   └── Rong_Cloud_iOS_IMKit_SDK_v2_4_9_dev/
│   │   │       ├── Emoji.plist
│   │   │       ├── RongCloud.bundle/
│   │   │       │   ├── sms-received.caf
│   │   │       │   └── unicode_to_hanyu_pinyin.txt
│   │   │       ├── RongIMKit.framework/
│   │   │       │   ├── Headers/
│   │   │       │   │   ├── RCAttributedLabel.h
│   │   │       │   │   ├── RCBaseViewController.h
│   │   │       │   │   ├── RCChatSessionInputBarControl.h
│   │   │       │   │   ├── RCContentView.h
│   │   │       │   │   ├── RCConversationBaseCell.h
│   │   │       │   │   ├── RCConversationCell.h
│   │   │       │   │   ├── RCConversationListViewController.h
│   │   │       │   │   ├── RCConversationModel.h
│   │   │       │   │   ├── RCConversationSettingTableViewController.h
│   │   │       │   │   ├── RCConversationSettingTableViewHeader.h
│   │   │       │   │   ├── RCConversationViewController.h
│   │   │       │   │   ├── RCEmojiBoardView.h
│   │   │       │   │   ├── RCIM.h
│   │   │       │   │   ├── RCImageMessageCell.h
│   │   │       │   │   ├── RCImageMessageProgressView.h
│   │   │       │   │   ├── RCImagePreviewController.h
│   │   │       │   │   ├── RCKitUtility.h
│   │   │       │   │   ├── RCLocationMessageCell.h
│   │   │       │   │   ├── RCLocationPickerViewController.h
│   │   │       │   │   ├── RCLocationViewController.h
│   │   │       │   │   ├── RCMessageBaseCell.h
│   │   │       │   │   ├── RCMessageBubbleTipView.h
│   │   │       │   │   ├── RCMessageCell.h
│   │   │       │   │   ├── RCMessageCellDelegate.h
│   │   │       │   │   ├── RCMessageCellNotificationModel.h
│   │   │       │   │   ├── RCMessageModel.h
│   │   │       │   │   ├── RCPluginBoardView.h
│   │   │       │   │   ├── RCPublicServiceChatViewController.h
│   │   │       │   │   ├── RCPublicServiceListViewController.h
│   │   │       │   │   ├── RCPublicServiceProfileViewController.h
│   │   │       │   │   ├── RCPublicServiceSearchViewController.h
│   │   │       │   │   ├── RCRichContentMessageCell.h
│   │   │       │   │   ├── RCSettingViewController.h
│   │   │       │   │   ├── RCTextMessageCell.h
│   │   │       │   │   ├── RCTextView.h
│   │   │       │   │   ├── RCThemeDefine.h
│   │   │       │   │   ├── RCTipLabel.h
│   │   │       │   │   ├── RCTipMessageCell.h
│   │   │       │   │   ├── RCUnknownMessageCell.h
│   │   │       │   │   ├── RCVoiceMessageCell.h
│   │   │       │   │   └── RongIMKit.h
│   │   │       │   ├── Info.plist
│   │   │       │   └── RongIMKit
│   │   │       ├── RongIMLib.framework/
│   │   │       │   ├── Headers/
│   │   │       │   │   ├── RCAMRDataConverter.h
│   │   │       │   │   ├── RCChatRoomInfo.h
│   │   │       │   │   ├── RCChatRoomMemberInfo.h
│   │   │       │   │   ├── RCCommandMessage.h
│   │   │       │   │   ├── RCCommandNotificationMessage.h
│   │   │       │   │   ├── RCContactNotificationMessage.h
│   │   │       │   │   ├── RCConversation.h
│   │   │       │   │   ├── RCDiscussion.h
│   │   │       │   │   ├── RCDiscussionNotificationMessage.h
│   │   │       │   │   ├── RCGroup.h
│   │   │       │   │   ├── RCGroupNotificationMessage.h
│   │   │       │   │   ├── RCHandShakeMessage.h
│   │   │       │   │   ├── RCIMClient.h
│   │   │       │   │   ├── RCImageMessage.h
│   │   │       │   │   ├── RCInformationNotificationMessage.h
│   │   │       │   │   ├── RCLocationMessage.h
│   │   │       │   │   ├── RCMessage.h
│   │   │       │   │   ├── RCMessageContent.h
│   │   │       │   │   ├── RCMessageContentView.h
│   │   │       │   │   ├── RCProfileNotificationMessage.h
│   │   │       │   │   ├── RCPublicServiceCommandMessage.h
│   │   │       │   │   ├── RCPublicServiceMenu.h
│   │   │       │   │   ├── RCPublicServiceMenuItem.h
│   │   │       │   │   ├── RCPublicServiceMultiRichContentMessage.h
│   │   │       │   │   ├── RCPublicServiceProfile.h
│   │   │       │   │   ├── RCPublicServiceRichContentMessage.h
│   │   │       │   │   ├── RCRealTimeLocationEndMessage.h
│   │   │       │   │   ├── RCRealTimeLocationManager.h
│   │   │       │   │   ├── RCRealTimeLocationStartMessage.h
│   │   │       │   │   ├── RCRichContentItem.h
│   │   │       │   │   ├── RCRichContentMessage.h
│   │   │       │   │   ├── RCStatusDefine.h
│   │   │       │   │   ├── RCStatusMessage.h
│   │   │       │   │   ├── RCSuspendMessage.h
│   │   │       │   │   ├── RCTextMessage.h
│   │   │       │   │   ├── RCUnknownMessage.h
│   │   │       │   │   ├── RCUploadImageStatusListener.h
│   │   │       │   │   ├── RCUserInfo.h
│   │   │       │   │   ├── RCUserTypingStatus.h
│   │   │       │   │   ├── RCUtilities.h
│   │   │       │   │   ├── RCVoiceMessage.h
│   │   │       │   │   ├── RCWatchKitStatusDelegate.h
│   │   │       │   │   ├── RongIMLib.h
│   │   │       │   │   ├── interf_dec.h
│   │   │       │   │   └── interf_enc.h
│   │   │       │   ├── Info.plist
│   │   │       │   ├── RCConfig.plist
│   │   │       │   └── RongIMLib
│   │   │       ├── en.lproj/
│   │   │       │   └── RongCloudKit.strings
│   │   │       ├── libopencore-amrnb.a
│   │   │       └── zh-Hans.lproj/
│   │   │           └── RongCloudKit.strings
│   │   ├── SJCSimplePDFView/
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   └── SJCSimplePDFView/
│   │   │       ├── SJCSimplePDFView.h
│   │   │       └── SJCSimplePDFView.m
│   │   ├── SSZipArchive/
│   │   │   ├── LICENSE.txt
│   │   │   ├── README.md
│   │   │   └── SSZipArchive/
│   │   │       ├── Common.h
│   │   │       ├── SSZipArchive.h
│   │   │       ├── SSZipArchive.m
│   │   │       ├── ZipArchive.h
│   │   │       ├── aes/
│   │   │       │   ├── aes.h
│   │   │       │   ├── aes_via_ace.h
│   │   │       │   ├── aescrypt.c
│   │   │       │   ├── aeskey.c
│   │   │       │   ├── aesopt.h
│   │   │       │   ├── aestab.c
│   │   │       │   ├── aestab.h
│   │   │       │   ├── brg_endian.h
│   │   │       │   ├── brg_types.h
│   │   │       │   ├── entropy.c
│   │   │       │   ├── entropy.h
│   │   │       │   ├── fileenc.c
│   │   │       │   ├── fileenc.h
│   │   │       │   ├── hmac.c
│   │   │       │   ├── hmac.h
│   │   │       │   ├── prng.c
│   │   │       │   ├── prng.h
│   │   │       │   ├── pwd2key.c
│   │   │       │   ├── pwd2key.h
│   │   │       │   ├── sha1.c
│   │   │       │   └── sha1.h
│   │   │       └── minizip/
│   │   │           ├── crypt.h
│   │   │           ├── ioapi.c
│   │   │           ├── ioapi.h
│   │   │           ├── mztools.c
│   │   │           ├── mztools.h
│   │   │           ├── unzip.c
│   │   │           ├── unzip.h
│   │   │           ├── zip.c
│   │   │           └── zip.h
│   │   ├── Swifter/
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   └── Sources/
│   │   │       ├── DemoServer.swift
│   │   │       ├── File.swift
│   │   │       ├── HttpHandlers+Files.swift
│   │   │       ├── HttpHandlers+WebSockets.swift
│   │   │       ├── HttpHandlers.swift
│   │   │       ├── HttpParser.swift
│   │   │       ├── HttpRequest.swift
│   │   │       ├── HttpResponse.swift
│   │   │       ├── HttpRouter.swift
│   │   │       ├── HttpServer.swift
│   │   │       ├── HttpServerIO.swift
│   │   │       ├── Socket.swift
│   │   │       ├── String+BASE64.swift
│   │   │       ├── String+Misc.swift
│   │   │       └── String+SHA1.swift
│   │   ├── SwiftyJSON/
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   └── Source/
│   │   │       └── SwiftyJSON.swift
│   │   ├── Target Support Files/
│   │   │   ├── AASquaresLoading/
│   │   │   │   ├── AASquaresLoading-dummy.m
│   │   │   │   ├── AASquaresLoading-prefix.pch
│   │   │   │   ├── AASquaresLoading-umbrella.h
│   │   │   │   ├── AASquaresLoading.modulemap
│   │   │   │   ├── AASquaresLoading.xcconfig
│   │   │   │   └── Info.plist
│   │   │   ├── Alamofire/
│   │   │   │   ├── Alamofire-dummy.m
│   │   │   │   ├── Alamofire-prefix.pch
│   │   │   │   ├── Alamofire-umbrella.h
│   │   │   │   ├── Alamofire.modulemap
│   │   │   │   ├── Alamofire.xcconfig
│   │   │   │   └── Info.plist
│   │   │   ├── AlamofireRSSParser/
│   │   │   │   ├── AlamofireRSSParser-dummy.m
│   │   │   │   ├── AlamofireRSSParser-prefix.pch
│   │   │   │   ├── AlamofireRSSParser-umbrella.h
│   │   │   │   ├── AlamofireRSSParser.modulemap
│   │   │   │   ├── AlamofireRSSParser.xcconfig
│   │   │   │   └── Info.plist
│   │   │   ├── CYRTextView/
│   │   │   │   ├── CYRTextView-dummy.m
│   │   │   │   ├── CYRTextView-prefix.pch
│   │   │   │   ├── CYRTextView-umbrella.h
│   │   │   │   ├── CYRTextView.modulemap
│   │   │   │   ├── CYRTextView.xcconfig
│   │   │   │   └── Info.plist
│   │   │   ├── Charts/
│   │   │   │   ├── Charts-dummy.m
│   │   │   │   ├── Charts-prefix.pch
│   │   │   │   ├── Charts-umbrella.h
│   │   │   │   ├── Charts.modulemap
│   │   │   │   ├── Charts.xcconfig
│   │   │   │   └── Info.plist
│   │   │   ├── DGElasticPullToRefresh/
│   │   │   │   ├── DGElasticPullToRefresh-dummy.m
│   │   │   │   ├── DGElasticPullToRefresh-prefix.pch
│   │   │   │   ├── DGElasticPullToRefresh-umbrella.h
│   │   │   │   ├── DGElasticPullToRefresh.modulemap
│   │   │   │   ├── DGElasticPullToRefresh.xcconfig
│   │   │   │   └── Info.plist
│   │   │   ├── EZAudio/
│   │   │   │   ├── EZAudio-dummy.m
│   │   │   │   ├── EZAudio-prefix.pch
│   │   │   │   ├── EZAudio-umbrella.h
│   │   │   │   ├── EZAudio.modulemap
│   │   │   │   ├── EZAudio.xcconfig
│   │   │   │   └── Info.plist
│   │   │   ├── Gifu/
│   │   │   │   ├── Gifu-dummy.m
│   │   │   │   ├── Gifu-prefix.pch
│   │   │   │   ├── Gifu-umbrella.h
│   │   │   │   ├── Gifu.modulemap
│   │   │   │   ├── Gifu.xcconfig
│   │   │   │   └── Info.plist
│   │   │   ├── NMSSH/
│   │   │   │   ├── Info.plist
│   │   │   │   ├── NMSSH-dummy.m
│   │   │   │   ├── NMSSH-prefix.pch
│   │   │   │   ├── NMSSH-umbrella.h
│   │   │   │   ├── NMSSH.modulemap
│   │   │   │   └── NMSSH.xcconfig
│   │   │   ├── Pods/
│   │   │   │   ├── Info.plist
│   │   │   │   ├── Pods-acknowledgements.markdown
│   │   │   │   ├── Pods-acknowledgements.plist
│   │   │   │   ├── Pods-dummy.m
│   │   │   │   ├── Pods-frameworks.sh
│   │   │   │   ├── Pods-resources.sh
│   │   │   │   ├── Pods-umbrella.h
│   │   │   │   ├── Pods.debug.xcconfig
│   │   │   │   ├── Pods.modulemap
│   │   │   │   └── Pods.release.xcconfig
│   │   │   ├── SJCSimplePDFView/
│   │   │   │   ├── Info.plist
│   │   │   │   ├── SJCSimplePDFView-dummy.m
│   │   │   │   ├── SJCSimplePDFView-prefix.pch
│   │   │   │   ├── SJCSimplePDFView-umbrella.h
│   │   │   │   ├── SJCSimplePDFView.modulemap
│   │   │   │   └── SJCSimplePDFView.xcconfig
│   │   │   ├── SSZipArchive/
│   │   │   │   ├── Info.plist
│   │   │   │   ├── SSZipArchive-dummy.m
│   │   │   │   ├── SSZipArchive-prefix.pch
│   │   │   │   ├── SSZipArchive-umbrella.h
│   │   │   │   ├── SSZipArchive.modulemap
│   │   │   │   └── SSZipArchive.xcconfig
│   │   │   ├── Swifter/
│   │   │   │   ├── Info.plist
│   │   │   │   ├── Swifter-dummy.m
│   │   │   │   ├── Swifter-prefix.pch
│   │   │   │   ├── Swifter-umbrella.h
│   │   │   │   ├── Swifter.modulemap
│   │   │   │   └── Swifter.xcconfig
│   │   │   ├── SwiftyJSON/
│   │   │   │   ├── Info.plist
│   │   │   │   ├── SwiftyJSON-dummy.m
│   │   │   │   ├── SwiftyJSON-prefix.pch
│   │   │   │   ├── SwiftyJSON-umbrella.h
│   │   │   │   ├── SwiftyJSON.modulemap
│   │   │   │   └── SwiftyJSON.xcconfig
│   │   │   ├── ZLMusicFlowWaveView/
│   │   │   │   ├── Info.plist
│   │   │   │   ├── ZLMusicFlowWaveView-dummy.m
│   │   │   │   ├── ZLMusicFlowWaveView-prefix.pch
│   │   │   │   ├── ZLMusicFlowWaveView-umbrella.h
│   │   │   │   ├── ZLMusicFlowWaveView.modulemap
│   │   │   │   └── ZLMusicFlowWaveView.xcconfig
│   │   │   └── ZLSinusWaveView/
│   │   │       ├── Info.plist
│   │   │       ├── ZLSinusWaveView-dummy.m
│   │   │       ├── ZLSinusWaveView-prefix.pch
│   │   │       ├── ZLSinusWaveView-umbrella.h
│   │   │       ├── ZLSinusWaveView.modulemap
│   │   │       └── ZLSinusWaveView.xcconfig
│   │   ├── ZLMusicFlowWaveView/
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   └── ZLMusicFlowWaveView/
│   │   │       ├── ZLMusicFlowDecorativeView.h
│   │   │       ├── ZLMusicFlowDecorativeView.m
│   │   │       ├── ZLMusicFlowWaveView.h
│   │   │       └── ZLMusicFlowWaveView.m
│   │   └── ZLSinusWaveView/
│   │       ├── LICENSE
│   │       ├── README.md
│   │       └── ZLSinusWaveView/
│   │           ├── ZLSinusWaveView.h
│   │           └── ZLSinusWaveView.m
│   ├── Sublime/
│   │   ├── AppDelegate.swift
│   │   ├── AppInfoViewController.swift
│   │   ├── Assets.xcassets/
│   │   │   ├── AppIcon.appiconset/
│   │   │   │   └── Contents.json
│   │   │   ├── Contents.json
│   │   │   ├── Repositories.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_douban_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_facebook_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_instagram.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_line_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_more_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_pinterest_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_qq_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_qzone_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_sina_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_twitter_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_wechat_session_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_wechat_timeline_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Stars.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── add_friend_icon_addfriend.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── add_friend_icon_group.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── add_friend_icon_offical.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── app_small_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── code_share_btn.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── comment.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── config_cycript.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── config_full_screen_code_reading.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── config_show_hidden_file.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── donate.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── donate1.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── donate2.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── donate3.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── donate4.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── donate5.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── donate_weixin.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── explore_codezZ.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_3fr.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_7z.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_aac.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_ai.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_asc.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_asp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_avi.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_bas.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_cls.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_code_share.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_cpp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_cr2.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_cs.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_css.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_csv.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_dll.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_dmg.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_dng.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_eps.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_exe.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_fff.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_flv.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_gif.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_gis.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_gpx.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_html.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_j2k.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_jp2.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_jpg.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_js.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_jsp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_kml.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_kmz.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_mov.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_mp3.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_mp4.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_mpg.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_nef.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_nmea.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_ogg.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_osm.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_otf.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_pdf.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_png.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_ppt.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_pptx.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_ps.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_psd.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_py.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_rar.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_raw.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_svg.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_tar.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_tif.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_ttf.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_txt.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_unknown.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_vb.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_vbs.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_wav.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_wma.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_woff.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_word.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_wsh.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_xaml.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_xls.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_xml.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_zip.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── folder.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── function_rss.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── function_scan.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── gist_bg.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── github_avatar.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── github_folder.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── github_fork.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── github_login.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── github_star.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── github_watcher.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── open_safari.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── pdf_continuous.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── pdf_horizontal.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── pdf_vertical.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── repo_download.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── right_arrow.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_cache.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_configure.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_donate.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_feedback.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_github.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_license.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_reading.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_server.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_ssh.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_storage.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_sublime.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_themes.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ssh_done.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ssh_keyboard.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ssh_password.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ssh_port.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ssh_server.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ssh_user.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── tab_icon_explore.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── tab_icon_files.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── tab_icon_setting.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── user_author.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── user_info.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── user_robot.imageset/
│   │   │       └── Contents.json
│   │   ├── Base.lproj/
│   │   │   ├── LaunchScreen.storyboard
│   │   │   └── Main.storyboard
│   │   ├── BoardModel.swift
│   │   ├── BoardView.swift
│   │   ├── Code.swift
│   │   ├── CodeEngine.swift
│   │   ├── CodeViewController.swift
│   │   ├── ConfigTableViewController.swift
│   │   ├── Configure.swift
│   │   ├── Constant.swift
│   │   ├── ContactInfoViewController.swift
│   │   ├── ContactTableViewController.swift
│   │   ├── CustomServer.swift
│   │   ├── DonateViewController.swift
│   │   ├── ExploreTableViewController.swift
│   │   ├── FolderTableViewController.swift
│   │   ├── Gist.swift
│   │   ├── GistTable.swift
│   │   ├── GithubAccountTableViewController.swift
│   │   ├── GithubTableViewController.swift
│   │   ├── Global.swift
│   │   ├── GomokuAI.swift
│   │   ├── GomokuViewController.swift
│   │   ├── HTTPServerTableViewController.swift
│   │   ├── ImageFileViewController.swift
│   │   ├── ImagePageViewController.swift
│   │   ├── Info.plist
│   │   ├── LICENSE/
│   │   │   ├── AASquaresLoading.LICENSE
│   │   │   ├── Alamofire.LICENSE
│   │   │   ├── AlamofireRSSParser.LICENSE
│   │   │   ├── CYRTextView.LICENSE
│   │   │   ├── Charts.LICENSE
│   │   │   ├── DGElasticPullToRefresh.LICENSE
│   │   │   ├── EZAudio.LICENSE
│   │   │   ├── Gifu.LICENSE
│   │   │   ├── MobileVLCKit.LICENSE
│   │   │   ├── NMSSH.LICENSE
│   │   │   ├── RongCloudIMKit.LICENSE
│   │   │   ├── SJCSimplePDFView.LICENSE
│   │   │   ├── SSZipArchive.LICENSE
│   │   │   ├── Swifter.LICENSE
│   │   │   ├── SwiftyJSON.LICENSE
│   │   │   ├── ZLMusicFlowWaveView.LICENSE
│   │   │   └── ZLSinusWaveView.LICENSE
│   │   ├── LicenseTableViewController.swift
│   │   ├── LogoView.xib
│   │   ├── MainTableViewController.swift
│   │   ├── MessageListViewController.swift
│   │   ├── MusicViewController.swift
│   │   ├── NewFileViewController.swift
│   │   ├── PDFViewController.swift
│   │   ├── RCChatViewController.swift
│   │   ├── RSSItemListTableViewController.swift
│   │   ├── RSSListTableViewController.swift
│   │   ├── ReadingViewController.swift
│   │   ├── Repo.swift
│   │   ├── ReposTableViewController.swift
│   │   ├── SDK/
│   │   │   └── Weixin/
│   │   │       ├── WXApi.h
│   │   │       ├── WXApiObject.h
│   │   │       ├── WechatAuthSDK.h
│   │   │       └── libWeChatSDK.a
│   │   ├── SSHAddNewServerViewController.swift
│   │   ├── SSHServerListTableViewController.swift
│   │   ├── SSHTerminalViewController.swift
│   │   ├── SettingTableViewController.swift
│   │   ├── StorageViewController.swift
│   │   ├── Sublime-Bridging-Header.h
│   │   ├── SublimeSafari.swift
│   │   ├── SublimeServer.swift
│   │   ├── Utils/
│   │   │   ├── ActionSheet.swift
│   │   │   ├── Device.swift
│   │   │   ├── Extension/
│   │   │   │   ├── Array.swift
│   │   │   │   ├── Date.swift
│   │   │   │   ├── Number.swift
│   │   │   │   ├── Operation.swift
│   │   │   │   ├── Other.swift
│   │   │   │   ├── String.swift
│   │   │   │   ├── UIApplication.swift
│   │   │   │   ├── UIColor.swift
│   │   │   │   ├── UIImage.swift
│   │   │   │   ├── UIImageView.swift
│   │   │   │   ├── UITableView.swift
│   │   │   │   ├── UITextView.swift
│   │   │   │   ├── UIView.swift
│   │   │   │   └── UIViewController.swift
│   │   │   ├── File.swift
│   │   │   ├── Function.swift
│   │   │   ├── Github.swift
│   │   │   ├── Log.swift
│   │   │   ├── Network.swift
│   │   │   ├── NumberedTextView.swift
│   │   │   ├── Obj-C/
│   │   │   │   ├── MusicWave.h
│   │   │   │   ├── MusicWave.m
│   │   │   │   ├── ObjC.h
│   │   │   │   └── ObjC.m
│   │   │   ├── Plist.swift
│   │   │   ├── PopupMenu.swift
│   │   │   ├── QRCode.swift
│   │   │   ├── QRCodeReader.swift
│   │   │   ├── RCIM.swift
│   │   │   ├── RearrangeTable.swift
│   │   │   ├── ShareToWeixin.swift
│   │   │   ├── SublimeTable.swift
│   │   │   ├── UnitTest.swift
│   │   │   └── VideoPlayerTimeView.swift
│   │   ├── VideoViewController.swift
│   │   ├── Web/
│   │   │   ├── 404.html
│   │   │   ├── README.txt
│   │   │   ├── index.html
│   │   │   ├── js/
│   │   │   │   └── index.js
│   │   │   └── license.txt
│   │   ├── WebServerLog.swift
│   │   ├── en.lproj/
│   │   │   └── Localizable.strings
│   │   ├── zh-Hans.lproj/
│   │   │   └── Localizable.strings
│   │   └── 山外小楼夜听雨.m4a
│   ├── Sublime.xcodeproj/
│   │   ├── project.pbxproj
│   │   └── project.xcworkspace/
│   │       └── contents.xcworkspacedata
│   └── Sublime.xcworkspace/
│       └── contents.xcworkspacedata
└── Sublime_icons.sketch

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore

## Build generated
build/
DerivedData

## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata

## Other
*.xccheckout
*.moved-aside
*.xcuserstate
*.xcscmblueprint

## Obj-C/Swift specific
*.hmap
*.ipa

## Playgrounds
timeline.xctimeline
playground.xcworkspace

# Swift Package Manager
#
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
# Packages/
.build/

# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# 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/

# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts

Carthage/Build

# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://github.com/fastlane/fastlane/blob/master/docs/Gitignore.md

fastlane/report.xml
fastlane/screenshots


================================================
FILE: LICENSE
================================================
                    GNU GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU General Public License is a free, copyleft license for
software and other kinds of works.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.  We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors.  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights.  Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received.  You must make sure that they, too, receive
or can get the source code.  And you must show them these terms so they
know their rights.

  Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.

  For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software.  For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.

  Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so.  This is fundamentally incompatible with the aim of
protecting users' freedom to change the software.  The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable.  Therefore, we
have designed this version of the GPL to prohibit the practice for those
products.  If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.

  Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary.  To prevent this, the GPL assures that
patents cannot be used to render the program non-free.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Use with the GNU Affero General Public License.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    {one line to give the program's name and a brief idea of what it does.}
    Copyright (C) {year}  {name of author}

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:

    {project}  Copyright (C) {year}  {fullname}
    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.

  The GNU General Public License does not permit incorporating your program
into proprietary programs.  If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.  But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.


================================================
FILE: README.md
================================================
# SublimeCode [![star this repo](http://github-svg-buttons.herokuapp.com/star.svg?user=Urinx&repo=SublimeCode&style=flat&background=1081C1)](http://github.com/Urinx/SublimeCode) [![fork this repo](http://github-svg-buttons.herokuapp.com/fork.svg?user=Urinx&repo=SublimeCode&style=flat&background=1081C1)](http://github.com/Urinx/SublimeCode/fork) [![license](https://img.shields.io/github/license/Urinx/SublimeCode.svg)](https://github.com/Urinx/SublimeCode/blob/master/LICENSE) ![platform](https://img.shields.io/badge/platform-iOS 9-lightgrey.svg) [![download](https://img.shields.io/github/downloads/Urinx/SublimeCode/total.svg)](https://github.com/Urinx/SublimeCode/releases)
一个代码阅读应用 - iOS

### 屏幕截图
![main](Screenshot/main.png)

## 功能说明

### 代码阅读
支持多种编程语言的语法高亮,全屏阅读模式,以及支持生成图片的形式分享代码到朋友圈等。
![Code Reading](Screenshot/code_reading.png)

### 多种文件支持
支持查看多种格式的文件类型,包括图片,视频,音频,PDF等。
![Multi File Support](Screenshot/multi_file_support.png)

### Github支持
现在你可以在本应用里浏览Github里自己的项目和Star的项目了,也能够下载到本地离线阅读代码哟!是不是很方便呢。
![Github](Screenshot/github.png)

### 本地HTTP服务器
还可以是一个本地HTTP服务器哦,支持Log纪录,在手机上方便的与朋友分享自己的网页。
![HTTP Server](Screenshot/http_server.png)

### Cycript支持
Cycript是混合了objective-c与javascript语法的一个工具,让开发者在命令行下和应用交互,在运行时查看和修改应用。而我们的应用也集成了Cycript,是不是很酷炫呢!小伙伴们赶快来体验吧。
![Cycript](Screenshot/cycript.png)

### 乱七八糟的功能
是的,你还可以像朋友圈一样的浏览Gist,还能SSH到自己的服务器,以及RSS订阅,与Github好友聊天,二维码扫描等等。没有做不到,只有想不到。
![Other](Screenshot/other.png)

### 以及更多
其实里面还有超级多的功能等待着你去探索和发现,在关于页面里摇一摇还有彩蛋哟!如果你有好的想法和建议也可以告诉我们,说不定下次就加进去了呢。

### 如何安装
鉴于该应用没有上架App Store,同时也没有用企业证书签名,所以目前你只能通过以下两种方式安装,注意的是两者均需要在Mac环境下,以及安装了Xcode。推荐采取方案一的方式。


> 方案一:
> 
> 1. 下载已经build好的[ipa文件](https://github.com/Urinx/SublimeCode/releases)。
> 2. 使用Xcode新建一个项目,bundle id可以为`com.xxx.Sublime`,生成相应的证书。
> 3. 使用[iOS App Signer](https://github.com/DanTheMan827/ios-app-signer)重签名本应用,注意选择上一步生成的对应的证书。
> 4. 然后就可以使用iTunes,Xcode等各种软件将重签名后的ipa文件安装到设备上。

> 方案二:
> 
> 1. 下载本项目[源码](https://github.com/Urinx/SublimeCode/archive/v1.0.zip)。
> 2. 注意修改bundle id,再编译到设备上。


================================================
FILE: Sublime/Cycript.framework/Headers/Cycript.h
================================================
/* Cycript - Optimizing JavaScript Compiler/Runtime
 * Copyright (C) 2009-2013  Jay Freeman (saurik)
*/

/* GNU General Public License, Version 3 {{{ */
/*
 * Cycript is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published
 * by the Free Software Foundation, either version 3 of the License,
 * or (at your option) any later version.
 *
 * Cycript is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Cycript.  If not, see <http://www.gnu.org/licenses/>.
**/
/* }}} */

#ifndef CYCRIPT_CYCRIPT_H
#define CYCRIPT_CYCRIPT_H

#ifdef __cplusplus
extern "C" {
#endif

void CYListenServer(short port);

#ifdef __cplusplus
}
#endif

#endif/*CYCRIPT_CYCRIPT_H*/


================================================
FILE: Sublime/Podfile
================================================
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!

pod 'Alamofire', '~> 3.0'
pod 'CYRTextView'
pod 'ZLMusicFlowWaveView'
pod 'SJCSimplePDFView'
pod 'Swifter'
pod 'SwiftyJSON'
pod 'AASquaresLoading'
pod 'DGElasticPullToRefresh'
pod 'SSZipArchive'
pod 'Gifu'
pod 'RongCloudIMKit'
pod 'NMSSH'
pod 'AlamofireRSSParser'
pod 'Charts'

================================================
FILE: Sublime/Pods/AASquaresLoading/LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2015 Anas AIT ALI

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.



================================================
FILE: Sublime/Pods/AASquaresLoading/README.md
================================================
# AASquaresLoading
Simple loading animation using squares

![Screenshot](screenshot.gif)

## Example
```swift
let loadingSquare = AASquaresLoading(target: self.view, size: 40)
// Customize background
loadingSquare.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.4)
// Customize color
loadingSquare.color = UIColor.whiteColor()
// Start loading
loadingSquare.start()
....
// Stop loading
loadingSquare.stop()
```

More examples in the demo project.

## Installation

### CocoaPods

1. Add to your podfile : `pod 'AASquaresLoading'`
2. In your terminal : `pod install`

### Manual

1. Add `AASquaresLoading.swift` to your project
2. That's all you can use it!

## Usage

### Basic

1. As a UIView method

	```swift
	self.view.squareLoading.start(0.0)
	...
	self.view.squareLoading.stop(0.0)
	```
2. As a standalone class

	```swift
	let loadingSquare = AASquaresLoading(target: self.view, size: 40)
    loadingSquare.start()
    ....
    loadingSquare.stop()
	```
3. As a custom class interface builder by setting AASquareLoading as a custom class for a UIView

### Customization

##### Change background color
```swift
self.view.squareLoading.backgroundColor = UIColor.redColor()
```
##### Change squares color
```swift
self.view.squareLoading.color = UIColor.whiteColor()
```
##### Change the square size
```swift
self.view.squareLoading.setSquareSize(120)
```

## License

The MIT License (MIT)

Copyright (c) 2015 Anas AIT-ALI

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.

================================================
FILE: Sublime/Pods/AASquaresLoading/Source/AASquaresLoading.swift
================================================
//
//  AASquaresLoading.swift
//  Etix Mobile
//
//  Created by Anas Ait Ali on 18/02/15.
//  Copyright (c) 2015 Etix. All rights reserved.
//

import UIKit

//MARK: AASquareLoadingInterface
/**
 Interface for the AASquareLoading class
*/
public protocol AASquareLoadingInterface: class {
  var color : UIColor { get set }
  var backgroundColor : UIColor? { get set }
  
  func start(delay : NSTimeInterval)
  func stop(delay : NSTimeInterval)
  func setSquareSize(size: Float)
}

private var AASLAssociationKey: UInt8 = 0

//MARK: UIView extension
public extension UIView {

  /**
   Variable to allow access to the class AASquareLoading
   */
  public var squareLoading: AASquareLoadingInterface {
    get {
      if let value = objc_getAssociatedObject(self, &AASLAssociationKey) as? AASquareLoadingInterface {
        return value
      } else {
        let squareLoading = AASquaresLoading(target: self)
        
        objc_setAssociatedObject(self, &AASLAssociationKey, squareLoading,
          objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
        
        return squareLoading
      }
    }
    
    set {
      objc_setAssociatedObject(self, &AASLAssociationKey, newValue,
        objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
    }
  }
}

//MARK: AASquareLoading class

/**
 Main class AASquareLoading
*/
public class AASquaresLoading : UIView, AASquareLoadingInterface {
  public var view : UIView = UIView()
  private(set) public var size : Float = 0
  public var color : UIColor = UIColor(red: 0, green: 0.48, blue: 1, alpha: 1) {
    didSet {
      for layer in squares {
        layer.backgroundColor = color.CGColor
      }
    }
  }
  public var parentView : UIView?

  private var squareSize: Float?
  private var gapSize: Float?
  private var moveTime: Float?
  private var squareStartX: Float?
  private var squareStartY: Float?
  private var squareStartOpacity: Float?
  private var squareEndX: Float?
  private var squareEndY: Float?
  private var squareEndOpacity: Float?
  private var squareOffsetX: [Float] = [Float](count: 9, repeatedValue: 0)
  private var squareOffsetY: [Float] = [Float](count: 9, repeatedValue: 0)
  private var squareOpacity: [Float] = [Float](count: 9, repeatedValue: 0)
  private var squares : [CALayer] = [CALayer]()
  private var frameHeightOffset: CGFloat = 0

  public init(target: UIView) {
    super.init(frame: target.frame)
    parentView = target
    setup(self.size)
  }

  public init(target: UIView, size: Float) {
    super.init(frame: target.frame)

    parentView = target
    setup(size)
  }
  
    public init(target: UIView, size: Float, hasNavigation: Bool, hasTabbar: Bool) {
    super.init(frame: target.frame)
    
    if hasNavigation {
        self.frameHeightOffset += 64
    }
    if hasTabbar {
        self.frameHeightOffset += 49
    }
    
    parentView = target
    setup(size)
  }

  override init(frame: CGRect) {
    super.init(frame: frame)
    
    setup(0)
  }

  required public init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

    setup(0)
  }
  
  public override func layoutSubviews() {
    updateFrame()
    super.layoutSubviews()
  }
  
  private func setup(size: Float) {
    self.size = size
    updateFrame()
    self.initialize()
  }
  
  private func updateFrame() {
    if parentView != nil {
      self.frame = CGRectMake(0, 0, CGRectGetWidth(parentView!.frame), CGRectGetHeight(parentView!.frame) - self.frameHeightOffset)
    }
    if size == 0 {
      let width = frame.size.width
      let height = frame.size.height
      size = width > height ? Float(height/8) : Float(width/8)
    }
    self.view.frame = CGRectMake(frame.width / 2 - CGFloat(size) / 2,
      frame.height / 2 - CGFloat(size) / 2, CGFloat(size), CGFloat(size))
  }
  
  /**
   Function to start the loading animation
   
   - Parameter delay : The delay before the loading start
   */
  public func start(delay : NSTimeInterval = 0.0) {
    if (parentView != nil) {
      self.layer.opacity = 0
      self.parentView!.addSubview(self)
      UIView.animateWithDuration(0.6, delay: delay, options: UIViewAnimationOptions.CurveEaseInOut,
        animations: { () -> Void in
          self.layer.opacity = 1
        }, completion: nil)
    }
  }

  /**
   Function to start the loading animation
   
   - Parameter delay : The delay before the loading start
   */
  public func stop(delay : NSTimeInterval = 0.0) {
    if (parentView != nil) {
      self.layer.opacity = 1
      UIView.animateWithDuration(0.6, delay: delay, options: UIViewAnimationOptions.CurveEaseInOut,
        animations: { () -> Void in
          self.layer.opacity = 0
        }, completion: { (success: Bool) -> Void in
          self.removeFromSuperview()
      })
    }
  }

  public func setSquareSize(size: Float) {
    self.view.layer.sublayers = nil
    setup(size)
  }
  
  private func initialize() {
    let gap : Float = 0.04
    gapSize = size * gap
    squareSize = size * (1.0 - 2 * gap) / 3
    moveTime = 0.15
    squares = [CALayer]()

    self.addSubview(view)
    if (self.backgroundColor == nil) {
      self.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.9)
    }
    for var i : Int = 0; i < 3; i++ {
      for var j : Int = 0; j < 3; j++ {
        var offsetX, offsetY : Float
        let idx : Int = 3 * i + j
        if i == 1 {
          offsetX = squareSize! * (2 - Float(j)) + gapSize! * (2 - Float(j))
          offsetY = squareSize! * Float(i) + gapSize! * Float(i)
        } else {
          offsetX = squareSize! * Float(j) + gapSize! * Float(j)
          offsetY = squareSize! * Float(i) + gapSize! * Float(i)
        }
        squareOffsetX[idx] = offsetX
        squareOffsetY[idx] = offsetY
        squareOpacity[idx] = 0.1 * (Float(idx) + 1)
      }
    }
    squareStartX = squareOffsetX[0]
    squareStartY = squareOffsetY[0] - 2 * squareSize! - 2 * gapSize!
    squareStartOpacity = 0.0
    squareEndX = squareOffsetX[8]
    squareEndY = squareOffsetY[8] + 2 * squareSize! + 2 * gapSize!
    squareEndOpacity = 0.0

    for var i = -1; i < 9; i++ {
      self.addSquareAnimation(i)
    }
  }

  private func addSquareAnimation(position: Int) {
    let square : CALayer = CALayer()
    if position == -1 {
      square.frame = CGRectMake(CGFloat(squareStartX!), CGFloat(squareStartY!),
        CGFloat(squareSize!), CGFloat(squareSize!))
      square.opacity = squareStartOpacity!
    } else {
      square.frame = CGRectMake(CGFloat(squareOffsetX[position]),
        CGFloat(squareOffsetY[position]), CGFloat(squareSize!), CGFloat(squareSize!))
      square.opacity = squareOpacity[position]
    }
    square.backgroundColor = self.color.CGColor
    squares.append(square)
    self.view.layer.addSublayer(square)

    var keyTimes = [Float]()
    var alphas = [Float]()
    keyTimes.append(0.0)
    if position == -1 {
      alphas.append(0.0)
    } else {
      alphas.append(squareOpacity[position])
    }
    if position == 0 {
      square.opacity = 0.0
    }

    let sp : CGPoint = square.position
    let path : CGMutablePathRef = CGPathCreateMutable()

    CGPathMoveToPoint(path, nil, sp.x, sp.y)

    var x, y, a : Float
    if position == -1 {
      x = squareOffsetX[0] - squareStartX!
      y = squareOffsetY[0] - squareStartY!
      a = squareOpacity[0]
    } else if position == 8 {
      x = squareEndX! - squareOffsetX[position]
      y = squareEndY! - squareOffsetY[position]
      a = squareEndOpacity!
    } else {
      x = squareOffsetX[position + 1] - squareOffsetX[position]
      y = squareOffsetY[position + 1] - squareOffsetY[position]
      a = squareOpacity[position + 1]
    }
    CGPathAddLineToPoint(path, nil, sp.x + CGFloat(x), sp.y + CGFloat(y))
    keyTimes.append(1.0 / 8.0)
    alphas.append(a)

    CGPathAddLineToPoint(path, nil, sp.x + CGFloat(x), sp.y + CGFloat(y))
    keyTimes.append(1.0)
    alphas.append(a)

    let posAnim : CAKeyframeAnimation = CAKeyframeAnimation(keyPath: "position")
    posAnim.removedOnCompletion = false
    posAnim.duration = Double(moveTime! * 8)
    posAnim.path = path
    posAnim.keyTimes = keyTimes

    let alphaAnim : CAKeyframeAnimation = CAKeyframeAnimation(keyPath: "opacity")
    alphaAnim.removedOnCompletion = false
    alphaAnim.duration = Double(moveTime! * 8)
    alphaAnim.values = alphas
    alphaAnim.keyTimes = keyTimes

    let blankAnim : CAKeyframeAnimation = CAKeyframeAnimation(keyPath: "opacity")
    blankAnim.removedOnCompletion = false
    blankAnim.beginTime = Double(moveTime! * 8)
    blankAnim.duration = Double(moveTime!)
    blankAnim.values = [0.0, 0.0]
    blankAnim.keyTimes = [0.0, 1.0]

    var beginTime : Float
    if position == -1 {
      beginTime = 0
    } else {
      beginTime = moveTime! * Float(8 - position)
    }
    let group : CAAnimationGroup = CAAnimationGroup()
    group.animations = [posAnim, alphaAnim, blankAnim]
    group.beginTime = CACurrentMediaTime() + Double(beginTime)
    group.repeatCount = HUGE
    group.removedOnCompletion = false
    group.delegate = self
    group.duration = Double(9 * moveTime!)

    square.addAnimation(group, forKey: "square-\(position)")
  }
}

================================================
FILE: Sublime/Pods/Alamofire/LICENSE
================================================
Copyright (c) 2014–2016 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.


================================================
FILE: Sublime/Pods/Alamofire/README.md
================================================
![Alamofire: Elegant Networking in Swift](https://raw.githubusercontent.com/Alamofire/Alamofire/assets/alamofire.png)

[![Build Status](https://travis-ci.org/Alamofire/Alamofire.svg)](https://travis-ci.org/Alamofire/Alamofire)
[![Cocoapods Compatible](https://img.shields.io/cocoapods/v/Alamofire.svg)](https://img.shields.io/cocoapods/v/Alamofire.svg)
[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
[![Platform](https://img.shields.io/cocoapods/p/Alamofire.svg?style=flat)](http://cocoadocs.org/docsets/Alamofire)
[![Twitter](https://img.shields.io/badge/twitter-@AlamofireSF-blue.svg?style=flat)](http://twitter.com/AlamofireSF)

Alamofire is an HTTP networking library written in Swift.

## Features

- [x] Chainable Request / Response methods
- [x] URL / JSON / plist Parameter Encoding
- [x] Upload File / Data / Stream / MultipartFormData
- [x] Download using Request or Resume data
- [x] Authentication with NSURLCredential
- [x] HTTP Response Validation
- [x] TLS Certificate and Public Key Pinning
- [x] Progress Closure & NSProgress
- [x] cURL Debug Output
- [x] Comprehensive Unit Test Coverage
- [x] [Complete Documentation](http://cocoadocs.org/docsets/Alamofire)

## Requirements

- iOS 8.0+ / Mac OS X 10.9+ / tvOS 9.0+ / watchOS 2.0+
- Xcode 7.2+

## Migration Guides

- [Alamofire 3.0 Migration Guide](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%203.0%20Migration%20Guide.md)
- [Alamofire 2.0 Migration Guide](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%202.0%20Migration%20Guide.md)

## Communication

- If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/alamofire). (Tag 'alamofire')
- If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/alamofire).
- If you **found a bug**, open an issue.
- If you **have a feature request**, open an issue.
- If you **want to contribute**, submit a pull request.

## Installation

> **Embedded frameworks require a minimum deployment target of iOS 8 or OS X Mavericks (10.9).**
>
> Alamofire is no longer supported on iOS 7 due to the lack of support for frameworks. Without frameworks, running Travis-CI against iOS 7 would require a second duplicated test target. The separate test suite would need to import all the Swift files and the tests would need to be duplicated and re-written. This split would be too difficult to maintain to ensure the highest possible quality of the Alamofire ecosystem.

### CocoaPods

[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command:

```bash
$ gem install cocoapods
```

> CocoaPods 0.39.0+ is required to build Alamofire 3.0.0+.

To integrate Alamofire into your Xcode project using CocoaPods, specify it in your `Podfile`:

```ruby
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!

pod 'Alamofire', '~> 3.0'
```

Then, run the following command:

```bash
$ pod install
```

### Carthage

[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.

You can install Carthage with [Homebrew](http://brew.sh/) using the following command:

```bash
$ brew update
$ brew install carthage
```

To integrate Alamofire into your Xcode project using Carthage, specify it in your `Cartfile`:

```ogdl
github "Alamofire/Alamofire" ~> 3.0
```

Run `carthage update` to build the framework and drag the built `Alamofire.framework` into your Xcode project.

### Manually

If you prefer not to use either of the aforementioned dependency managers, you can integrate Alamofire into your project manually.

#### Embedded Framework

- Open up Terminal, `cd` into your top-level project directory, and run the following command "if" your project is not initialized as a git repository:

```bash
$ git init
```

- Add Alamofire as a git [submodule](http://git-scm.com/docs/git-submodule) by running the following command:

```bash
$ git submodule add https://github.com/Alamofire/Alamofire.git
```

- Open the new `Alamofire` folder, and drag the `Alamofire.xcodeproj` into the Project Navigator of your application's Xcode project.

    > It should appear nested underneath your application's blue project icon. Whether it is above or below all the other Xcode groups does not matter.

- Select the `Alamofire.xcodeproj` in the Project Navigator and verify the deployment target matches that of your application target.
- Next, select your application project in the Project Navigator (blue project icon) to navigate to the target configuration window and select the application target under the "Targets" heading in the sidebar.
- In the tab bar at the top of that window, open the "General" panel.
- Click on the `+` button under the "Embedded Binaries" section.
- You will see two different `Alamofire.xcodeproj` folders each with two different versions of the `Alamofire.framework` nested inside a `Products` folder.

    > It does not matter which `Products` folder you choose from, but it does matter whether you choose the top or bottom `Alamofire.framework`. 
    
- Select the top `Alamofire.framework` for iOS and the bottom one for OS X.

    > You can verify which one you selected by inspecting the build log for your project. The build target for `Alamofire` will be listed as either `Alamofire iOS` or `Alamofire OSX`.

- And that's it!

> The `Alamofire.framework` is automagically added as a target dependency, linked framework and embedded framework in a copy files build phase which is all you need to build on the simulator and a device.

---

## Usage

### Making a Request

```swift
import Alamofire

Alamofire.request(.GET, "https://httpbin.org/get")
```

### Response Handling

```swift
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
         .responseJSON { response in
             print(response.request)  // original URL request
             print(response.response) // URL response
             print(response.data)     // server data
             print(response.result)   // result of response serialization

             if let JSON = response.result.value {
                 print("JSON: \(JSON)")
             }
         }
```

> Networking in Alamofire is done _asynchronously_. Asynchronous programming may be a source of frustration to programmers unfamiliar with the concept, but there are [very good reasons](https://developer.apple.com/library/ios/qa/qa1693/_index.html) for doing it this way.

> Rather than blocking execution to wait for a response from the server, a [callback](http://en.wikipedia.org/wiki/Callback_%28computer_programming%29) is specified to handle the response once it's received. The result of a request is only available inside the scope of a response handler. Any execution contingent on the response or data received from the server must be done within a handler.

### Response Serialization

**Built-in Response Methods**

- `response()`
- `responseData()`
- `responseString(encoding: NSStringEncoding)`
- `responseJSON(options: NSJSONReadingOptions)`
- `responsePropertyList(options: NSPropertyListReadOptions)`

#### Response Handler

```swift
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
         .response { request, response, data, error in
             print(request)
             print(response)
             print(data)
             print(error)
          }
```

> The `response` serializer does NOT evaluate any of the response data. It merely forwards on all the information directly from the URL session delegate. We strongly encourage you to leverage the other response serializers taking advantage of `Response` and `Result` types.

#### Response Data Handler

```swift
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
         .responseData { response in
             print(response.request)
             print(response.response)
             print(response.result)
          }
```

#### Response String Handler

```swift
Alamofire.request(.GET, "https://httpbin.org/get")
         .responseString { response in
             print("Success: \(response.result.isSuccess)")
             print("Response String: \(response.result.value)")
         }
```

#### Response JSON Handler

```swift
Alamofire.request(.GET, "https://httpbin.org/get")
         .responseJSON { response in
             debugPrint(response)
         }
```

#### Chained Response Handlers

Response handlers can even be chained:

```swift
Alamofire.request(.GET, "https://httpbin.org/get")
         .responseString { response in
             print("Response String: \(response.result.value)")
         }
         .responseJSON { response in
             print("Response JSON: \(response.result.value)")
         }
```

### HTTP Methods

`Alamofire.Method` lists the HTTP methods defined in [RFC 7231 §4.3](http://tools.ietf.org/html/rfc7231#section-4.3):

```swift
public enum Method: String {
    case OPTIONS, GET, HEAD, POST, PUT, PATCH, DELETE, TRACE, CONNECT
}
```

These values can be passed as the first argument of the `Alamofire.request` method:

```swift
Alamofire.request(.POST, "https://httpbin.org/post")

Alamofire.request(.PUT, "https://httpbin.org/put")

Alamofire.request(.DELETE, "https://httpbin.org/delete")
```

### Parameters

#### GET Request With URL-Encoded Parameters

```swift
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
// https://httpbin.org/get?foo=bar
```

#### POST Request With URL-Encoded Parameters

```swift
let parameters = [
    "foo": "bar",
    "baz": ["a", 1],
    "qux": [
        "x": 1,
        "y": 2,
        "z": 3
    ]
]

Alamofire.request(.POST, "https://httpbin.org/post", parameters: parameters)
// HTTP body: foo=bar&baz[]=a&baz[]=1&qux[x]=1&qux[y]=2&qux[z]=3
```

### Parameter Encoding

Parameters can also be encoded as JSON, Property List, or any custom format, using the `ParameterEncoding` enum:

```swift
enum ParameterEncoding {
    case URL
    case URLEncodedInURL
    case JSON
    case PropertyList(format: NSPropertyListFormat, options: NSPropertyListWriteOptions)
    case Custom((URLRequestConvertible, [String: AnyObject]?) -> (NSMutableURLRequest, NSError?))

    func encode(request: NSURLRequest, parameters: [String: AnyObject]?) -> (NSURLRequest, NSError?)
    { ... }
}
```

- `URL`: A query string to be set as or appended to any existing URL query for `GET`, `HEAD`, and `DELETE` requests, or set as the body for requests with any other HTTP method. The `Content-Type` HTTP header field of an encoded request with HTTP body is set to `application/x-www-form-urlencoded`. _Since there is no published specification for how to encode collection types, Alamofire follows the convention of appending `[]` to the key for array values (`foo[]=1&foo[]=2`), and appending the key surrounded by square brackets for nested dictionary values (`foo[bar]=baz`)._
- `URLEncodedInURL`: Creates query string to be set as or appended to any existing URL query. Uses the same implementation as the `.URL` case, but always applies the encoded result to the URL.
- `JSON`: Uses `NSJSONSerialization` to create a JSON representation of the parameters object, which is set as the body of the request. The `Content-Type` HTTP header field of an encoded request is set to `application/json`.
- `PropertyList`: Uses `NSPropertyListSerialization` to create a plist representation of the parameters object, according to the associated format and write options values, which is set as the body of the request. The `Content-Type` HTTP header field of an encoded request is set to `application/x-plist`.
- `Custom`: Uses the associated closure value to construct a new request given an existing request and parameters.

#### Manual Parameter Encoding of an NSURLRequest

```swift
let URL = NSURL(string: "https://httpbin.org/get")!
var request = NSMutableURLRequest(URL: URL)

let parameters = ["foo": "bar"]
let encoding = Alamofire.ParameterEncoding.URL
(request, _) = encoding.encode(request, parameters: parameters)
```

#### POST Request with JSON-encoded Parameters

```swift
let parameters = [
    "foo": [1,2,3],
    "bar": [
        "baz": "qux"
    ]
]

Alamofire.request(.POST, "https://httpbin.org/post", parameters: parameters, encoding: .JSON)
// HTTP body: {"foo": [1, 2, 3], "bar": {"baz": "qux"}}
```

### HTTP Headers

Adding a custom HTTP header to a `Request` is supported directly in the global `request` method. This makes it easy to attach HTTP headers to a `Request` that can be constantly changing.

> For HTTP headers that do not change, it is recommended to set them on the `NSURLSessionConfiguration` so they are automatically applied to any `NSURLSessionTask` created by the underlying `NSURLSession`.

```swift
let headers = [
    "Authorization": "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==",
    "Content-Type": "application/x-www-form-urlencoded"
]

Alamofire.request(.GET, "https://httpbin.org/get", headers: headers)
         .responseJSON { response in
             debugPrint(response)
         }
```

### Caching

Caching is handled on the system framework level by [`NSURLCache`](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLCache_Class/Reference/Reference.html#//apple_ref/occ/cl/NSURLCache).

### Uploading

**Supported Upload Types**

- File
- Data
- Stream
- MultipartFormData

#### Uploading a File

```swift
let fileURL = NSBundle.mainBundle().URLForResource("Default", withExtension: "png")
Alamofire.upload(.POST, "https://httpbin.org/post", file: fileURL)
```

#### Uploading with Progress

```swift
Alamofire.upload(.POST, "https://httpbin.org/post", file: fileURL)
         .progress { bytesWritten, totalBytesWritten, totalBytesExpectedToWrite in
             print(totalBytesWritten)

             // This closure is NOT called on the main queue for performance
             // reasons. To update your ui, dispatch to the main queue.
             dispatch_async(dispatch_get_main_queue()) {
                 print("Total bytes written on main queue: \(totalBytesWritten)")
             }
         }
         .responseJSON { response in
             debugPrint(response)
         }
```

#### Uploading MultipartFormData

```swift
Alamofire.upload(
    .POST,
    "https://httpbin.org/post",
    multipartFormData: { multipartFormData in
        multipartFormData.appendBodyPart(fileURL: unicornImageURL, name: "unicorn")
        multipartFormData.appendBodyPart(fileURL: rainbowImageURL, name: "rainbow")
    },
    encodingCompletion: { encodingResult in
    	switch encodingResult {
    	case .Success(let upload, _, _):
            upload.responseJSON { response in
                debugPrint(response)
            }
    	case .Failure(let encodingError):
    	    print(encodingError)
    	}
    }
)
```

### Downloading

**Supported Download Types**

- Request
- Resume Data

#### Downloading a File

```swift
Alamofire.download(.GET, "https://httpbin.org/stream/100") { temporaryURL, response in
    let fileManager = NSFileManager.defaultManager()
    let directoryURL = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
    let pathComponent = response.suggestedFilename

    return directoryURL.URLByAppendingPathComponent(pathComponent!)
}
```

#### Using the Default Download Destination

```swift
let destination = Alamofire.Request.suggestedDownloadDestination(directory: .DocumentDirectory, domain: .UserDomainMask)
Alamofire.download(.GET, "https://httpbin.org/stream/100", destination: destination)
```

#### Downloading a File w/Progress

```swift
Alamofire.download(.GET, "https://httpbin.org/stream/100", destination: destination)
         .progress { bytesRead, totalBytesRead, totalBytesExpectedToRead in
             print(totalBytesRead)

             // This closure is NOT called on the main queue for performance
             // reasons. To update your ui, dispatch to the main queue.
             dispatch_async(dispatch_get_main_queue()) {
                 print("Total bytes read on main queue: \(totalBytesRead)")
             }
         }
         .response { _, _, _, error in
             if let error = error {
                 print("Failed with error: \(error)")
             } else {
                 print("Downloaded file successfully")
             }
         }
```

#### Accessing Resume Data for Failed Downloads

```swift
Alamofire.download(.GET, "https://httpbin.org/stream/100", destination: destination)
         .response { _, _, data, _ in
             if let
                 data = data,
                 resumeDataString = NSString(data: data, encoding: NSUTF8StringEncoding)
             {
                 print("Resume Data: \(resumeDataString)")
             } else {
                 print("Resume Data was empty")
             }
         }
```

> The `data` parameter is automatically populated with the `resumeData` if available.

```swift
let download = Alamofire.download(.GET, "https://httpbin.org/stream/100", destination: destination)
download.response { _, _, _, _ in
    if let
        resumeData = download.resumeData,
        resumeDataString = NSString(data: resumeData, encoding: NSUTF8StringEncoding)
    {
        print("Resume Data: \(resumeDataString)")
    } else {
        print("Resume Data was empty")
    }
}
```

### Authentication

Authentication is handled on the system framework level by [`NSURLCredential` and `NSURLAuthenticationChallenge`](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLAuthenticationChallenge_Class/Reference/Reference.html).

**Supported Authentication Schemes**

- [HTTP Basic](http://en.wikipedia.org/wiki/Basic_access_authentication)
- [HTTP Digest](http://en.wikipedia.org/wiki/Digest_access_authentication)
- [Kerberos](http://en.wikipedia.org/wiki/Kerberos_%28protocol%29)
- [NTLM](http://en.wikipedia.org/wiki/NT_LAN_Manager)

#### HTTP Basic Authentication

The `authenticate` method on a `Request` will automatically provide an `NSURLCredential` to an `NSURLAuthenticationChallenge` when appropriate:

```swift
let user = "user"
let password = "password"

Alamofire.request(.GET, "https://httpbin.org/basic-auth/\(user)/\(password)")
         .authenticate(user: user, password: password)
         .responseJSON { response in
             debugPrint(response)
         }
```

Depending upon your server implementation, an `Authorization` header may also be appropriate:

```swift
let user = "user"
let password = "password"

let credentialData = "\(user):\(password)".dataUsingEncoding(NSUTF8StringEncoding)!
let base64Credentials = credentialData.base64EncodedStringWithOptions([])

let headers = ["Authorization": "Basic \(base64Credentials)"]

Alamofire.request(.GET, "https://httpbin.org/basic-auth/user/password", headers: headers)
         .responseJSON { response in
             debugPrint(response)
         }
```

#### Authentication with NSURLCredential

```swift
let user = "user"
let password = "password"

let credential = NSURLCredential(user: user, password: password, persistence: .ForSession)

Alamofire.request(.GET, "https://httpbin.org/basic-auth/\(user)/\(password)")
         .authenticate(usingCredential: credential)
         .responseJSON { response in
             debugPrint(response)
         }
```

### Validation

By default, Alamofire treats any completed request to be successful, regardless of the content of the response. Calling `validate` before a response handler causes an error to be generated if the response had an unacceptable status code or MIME type.

#### Manual Validation

```swift
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
         .validate(statusCode: 200..<300)
         .validate(contentType: ["application/json"])
         .response { response in
             print(response)
         }
```

#### Automatic Validation

Automatically validates status code within `200...299` range, and that the `Content-Type` header of the response matches the `Accept` header of the request, if one is provided.

```swift
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
         .validate()
         .responseJSON { response in
             switch response.result {
             case .Success:
                 print("Validation Successful")
             case .Failure(let error):
                 print(error)
             }
         }
```

### Timeline

Alamofire collects timings throughout the lifecycle of a `Request` and creates a `Timeline` object exposed as a property on a `Response`.

```swift
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
         .validate()
         .responseJSON { response in
             print(response.timeline)
         }
```

The above reports the following `Timeline` info:

- `Latency`: 0.428 seconds
- `Request Duration`: 0.428 seconds
- `Serialization Duration`: 0.001 seconds
- `Total Duration`: 0.429 seconds

### Printable

```swift
let request = Alamofire.request(.GET, "https://httpbin.org/ip")

print(request)
// GET https://httpbin.org/ip (200)
```

### DebugPrintable

```swift
let request = Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])

debugPrint(request)
```

#### Output (cURL)

```bash
$ curl -i \
	-H "User-Agent: Alamofire" \
	-H "Accept-Encoding: Accept-Encoding: gzip;q=1.0,compress;q=0.5" \
	-H "Accept-Language: en;q=1.0,fr;q=0.9,de;q=0.8,zh-Hans;q=0.7,zh-Hant;q=0.6,ja;q=0.5" \
	"https://httpbin.org/get?foo=bar"
```

---

## Advanced Usage

> Alamofire is built on `NSURLSession` and the Foundation URL Loading System. To make the most of
this framework, it is recommended that you be familiar with the concepts and capabilities of the underlying networking stack.

**Recommended Reading**

- [URL Loading System Programming Guide](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.html)
- [NSURLSession Class Reference](https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSURLSession_class/Introduction/Introduction.html#//apple_ref/occ/cl/NSURLSession)
- [NSURLCache Class Reference](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLCache_Class/Reference/Reference.html#//apple_ref/occ/cl/NSURLCache)
- [NSURLAuthenticationChallenge Class Reference](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLAuthenticationChallenge_Class/Reference/Reference.html)

### Manager

Top-level convenience methods like `Alamofire.request` use a shared instance of `Alamofire.Manager`, which is configured with the default `NSURLSessionConfiguration`.

As such, the following two statements are equivalent:

```swift
Alamofire.request(.GET, "https://httpbin.org/get")
```

```swift
let manager = Alamofire.Manager.sharedInstance
manager.request(NSURLRequest(URL: NSURL(string: "https://httpbin.org/get")!))
```

Applications can create managers for background and ephemeral sessions, as well as new managers that customize the default session configuration, such as for default headers (`HTTPAdditionalHeaders`) or timeout interval (`timeoutIntervalForRequest`).

#### Creating a Manager with Default Configuration

```swift
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
let manager = Alamofire.Manager(configuration: configuration)
```

#### Creating a Manager with Background Configuration

```swift
let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("com.example.app.background")
let manager = Alamofire.Manager(configuration: configuration)
```

#### Creating a Manager with Ephemeral Configuration

```swift
let configuration = NSURLSessionConfiguration.ephemeralSessionConfiguration()
let manager = Alamofire.Manager(configuration: configuration)
```

#### Modifying Session Configuration

```swift
var defaultHeaders = Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders ?? [:]
defaultHeaders["DNT"] = "1 (Do Not Track Enabled)"

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.HTTPAdditionalHeaders = defaultHeaders

let manager = Alamofire.Manager(configuration: configuration)
```

> This is **not** recommended for `Authorization` or `Content-Type` headers. Instead, use `URLRequestConvertible` and `ParameterEncoding`, respectively.

### Request

The result of a `request`, `upload`, or `download` method is an instance of `Alamofire.Request`. A request is always created using a constructor method from an owning manager, and never initialized directly.

Methods like `authenticate`, `validate` and `responseData` return the caller in order to facilitate chaining.

Requests can be suspended, resumed, and cancelled:

- `suspend()`: Suspends the underlying task and dispatch queue
- `resume()`: Resumes the underlying task and dispatch queue. If the owning manager does not have `startRequestsImmediately` set to `true`, the request must call `resume()` in order to start.
- `cancel()`: Cancels the underlying task, producing an error that is passed to any registered response handlers.

### Response Serialization

#### Creating a Custom Response Serializer

Alamofire provides built-in response serialization for strings, JSON, and property lists, but others can be added in extensions on `Alamofire.Request`.

For example, here's how a response handler using [Ono](https://github.com/mattt/Ono) might be implemented:

```swift
extension Request {
    public static func XMLResponseSerializer() -> ResponseSerializer<ONOXMLDocument, NSError> {
        return ResponseSerializer { request, response, data, error in
            guard error == nil else { return .Failure(error!) }

            guard let validData = data else {
                let failureReason = "Data could not be serialized. Input data was nil."
                let error = Error.errorWithCode(.DataSerializationFailed, failureReason: failureReason)
                return .Failure(error)
            }

            do {
                let XML = try ONOXMLDocument(data: validData)
                return .Success(XML)
            } catch {
                return .Failure(error as NSError)
            }
        }
    }

    public func responseXMLDocument(completionHandler: Response<ONOXMLDocument, NSError> -> Void) -> Self {
        return response(responseSerializer: Request.XMLResponseSerializer(), completionHandler: completionHandler)
    }
}
```

#### Generic Response Object Serialization

Generics can be used to provide automatic, type-safe response object serialization.

```swift
public protocol ResponseObjectSerializable {
    init?(response: NSHTTPURLResponse, representation: AnyObject)
}

extension Request {
    public func responseObject<T: ResponseObjectSerializable>(completionHandler: Response<T, NSError> -> Void) -> Self {
        let responseSerializer = ResponseSerializer<T, NSError> { request, response, data, error in
            guard error == nil else { return .Failure(error!) }

            let JSONResponseSerializer = Request.JSONResponseSerializer(options: .AllowFragments)
            let result = JSONResponseSerializer.serializeResponse(request, response, data, error)

            switch result {
            case .Success(let value):
                if let
                    response = response,
                    responseObject = T(response: response, representation: value)
                {
                    return .Success(responseObject)
                } else {
                    let failureReason = "JSON could not be serialized into response object: \(value)"
                    let error = Error.errorWithCode(.JSONSerializationFailed, failureReason: failureReason)
                    return .Failure(error)
                }
            case .Failure(let error):
                return .Failure(error)
            }
        }

        return response(responseSerializer: responseSerializer, completionHandler: completionHandler)
    }
}
```

```swift
final class User: ResponseObjectSerializable {
    let username: String
    let name: String

    init?(response: NSHTTPURLResponse, representation: AnyObject) {
        self.username = response.URL!.lastPathComponent!
        self.name = representation.valueForKeyPath("name") as! String
    }
}
```

```swift
Alamofire.request(.GET, "https://example.com/users/mattt")
         .responseObject { (response: Response<User, NSError>) in
             debugPrint(response)
         }
```

The same approach can also be used to handle endpoints that return a representation of a collection of objects:

```swift
public protocol ResponseCollectionSerializable {
    static func collection(response response: NSHTTPURLResponse, representation: AnyObject) -> [Self]
}

extension Alamofire.Request {
    public func responseCollection<T: ResponseCollectionSerializable>(completionHandler: Response<[T], NSError> -> Void) -> Self {
        let responseSerializer = ResponseSerializer<[T], NSError> { request, response, data, error in
            guard error == nil else { return .Failure(error!) }

            let JSONSerializer = Request.JSONResponseSerializer(options: .AllowFragments)
            let result = JSONSerializer.serializeResponse(request, response, data, error)

            switch result {
            case .Success(let value):
                if let response = response {
                    return .Success(T.collection(response: response, representation: value))
                } else {
                    let failureReason = "Response collection could not be serialized due to nil response"
                    let error = Error.errorWithCode(.JSONSerializationFailed, failureReason: failureReason)
                    return .Failure(error)
                }
            case .Failure(let error):
                return .Failure(error)
            }
        }

        return response(responseSerializer: responseSerializer, completionHandler: completionHandler)
    }
}
```

```swift
final class User: ResponseObjectSerializable, ResponseCollectionSerializable {
    let username: String
    let name: String

    init?(response: NSHTTPURLResponse, representation: AnyObject) {
        self.username = response.URL!.lastPathComponent!
        self.name = representation.valueForKeyPath("name") as! String
    }

    static func collection(response response: NSHTTPURLResponse, representation: AnyObject) -> [User] {
        var users: [User] = []

        if let representation = representation as? [[String: AnyObject]] {
            for userRepresentation in representation {
                if let user = User(response: response, representation: userRepresentation) {
                    users.append(user)
                }
            }
        }

        return users
    }
}
```

```swift
Alamofire.request(.GET, "http://example.com/users")
         .responseCollection { (response: Response<[User], NSError>) in
             debugPrint(response)
         }
```

### URLStringConvertible

Types adopting the `URLStringConvertible` protocol can be used to construct URL strings, which are then used to construct URL requests. `NSString`, `NSURL`, `NSURLComponents`, and `NSURLRequest` conform to `URLStringConvertible` by default, allowing any of them to be passed as `URLString` parameters to the `request`, `upload`, and `download` methods:

```swift
let string = NSString(string: "https://httpbin.org/post")
Alamofire.request(.POST, string)

let URL = NSURL(string: string)!
Alamofire.request(.POST, URL)

let URLRequest = NSURLRequest(URL: URL)
Alamofire.request(.POST, URLRequest) // overrides `HTTPMethod` of `URLRequest`

let URLComponents = NSURLComponents(URL: URL, resolvingAgainstBaseURL: true)
Alamofire.request(.POST, URLComponents)
```

Applications interacting with web applications in a significant manner are encouraged to have custom types conform to `URLStringConvertible` as a convenient way to map domain-specific models to server resources.

#### Type-Safe Routing

```swift
extension User: URLStringConvertible {
    static let baseURLString = "http://example.com"

    var URLString: String {
        return User.baseURLString + "/users/\(username)/"
    }
}
```

```swift
let user = User(username: "mattt")
Alamofire.request(.GET, user) // http://example.com/users/mattt
```

### URLRequestConvertible

Types adopting the `URLRequestConvertible` protocol can be used to construct URL requests. `NSURLRequest` conforms to `URLRequestConvertible` by default, allowing it to be passed into `request`, `upload`, and `download` methods directly (this is the recommended way to specify custom HTTP body for individual requests):

```swift
let URL = NSURL(string: "https://httpbin.org/post")!
let mutableURLRequest = NSMutableURLRequest(URL: URL)
mutableURLRequest.HTTPMethod = "POST"

let parameters = ["foo": "bar"]

do {
    mutableURLRequest.HTTPBody = try NSJSONSerialization.dataWithJSONObject(parameters, options: NSJSONWritingOptions())
} catch {
    // No-op
}

mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")

Alamofire.request(mutableURLRequest)
```

Applications interacting with web applications in a significant manner are encouraged to have custom types conform to `URLRequestConvertible` as a way to ensure consistency of requested endpoints. Such an approach can be used to abstract away server-side inconsistencies and provide type-safe routing, as well as manage authentication credentials and other state.

#### API Parameter Abstraction

```swift
enum Router: URLRequestConvertible {
    static let baseURLString = "http://example.com"
    static let perPage = 50

    case Search(query: String, page: Int)

    // MARK: URLRequestConvertible

    var URLRequest: NSMutableURLRequest {
        let result: (path: String, parameters: [String: AnyObject]) = {
            switch self {
            case .Search(let query, let page) where page > 1:
                return ("/search", ["q": query, "offset": Router.perPage * page])
            case .Search(let query, _):
                return ("/search", ["q": query])
            }
        }()

        let URL = NSURL(string: Router.baseURLString)!
        let URLRequest = NSURLRequest(URL: URL.URLByAppendingPathComponent(result.path))
        let encoding = Alamofire.ParameterEncoding.URL

        return encoding.encode(URLRequest, parameters: result.parameters).0
    }
}
```

```swift
Alamofire.request(Router.Search(query: "foo bar", page: 1)) // ?q=foo%20bar&offset=50
```

#### CRUD & Authorization

```swift
enum Router: URLRequestConvertible {
    static let baseURLString = "http://example.com"
    static var OAuthToken: String?

    case CreateUser([String: AnyObject])
    case ReadUser(String)
    case UpdateUser(String, [String: AnyObject])
    case DestroyUser(String)

    var method: Alamofire.Method {
        switch self {
        case .CreateUser:
            return .POST
        case .ReadUser:
            return .GET
        case .UpdateUser:
            return .PUT
        case .DestroyUser:
            return .DELETE
        }
    }

    var path: String {
        switch self {
        case .CreateUser:
            return "/users"
        case .ReadUser(let username):
            return "/users/\(username)"
        case .UpdateUser(let username, _):
            return "/users/\(username)"
        case .DestroyUser(let username):
            return "/users/\(username)"
        }
    }

    // MARK: URLRequestConvertible

    var URLRequest: NSMutableURLRequest {
        let URL = NSURL(string: Router.baseURLString)!
        let mutableURLRequest = NSMutableURLRequest(URL: URL.URLByAppendingPathComponent(path))
        mutableURLRequest.HTTPMethod = method.rawValue

        if let token = Router.OAuthToken {
            mutableURLRequest.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
        }

        switch self {
        case .CreateUser(let parameters):
            return Alamofire.ParameterEncoding.JSON.encode(mutableURLRequest, parameters: parameters).0
        case .UpdateUser(_, let parameters):
            return Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: parameters).0
        default:
            return mutableURLRequest
        }
    }
}
```

```swift
Alamofire.request(Router.ReadUser("mattt")) // GET /users/mattt
```

### Security

Using a secure HTTPS connection when communicating with servers and web services is an important step in securing sensitive data. By default, Alamofire will evaluate the certificate chain provided by the server using Apple's built in validation provided by the Security framework. While this guarantees the certificate chain is valid, it does not prevent man-in-the-middle (MITM) attacks or other potential vulnerabilities. In order to mitigate MITM attacks, applications dealing with sensitive customer data or financial information should use certificate or public key pinning provided by the `ServerTrustPolicy`.

#### ServerTrustPolicy

The `ServerTrustPolicy` enumeration evaluates the server trust generally provided by an `NSURLAuthenticationChallenge` when connecting to a server over a secure HTTPS connection.

```swift
let serverTrustPolicy = ServerTrustPolicy.PinCertificates(
    certificates: ServerTrustPolicy.certificatesInBundle(),
    validateCertificateChain: true,
    validateHost: true
)
```

There are many different cases of server trust evaluation giving you complete control over the validation process:

* `PerformDefaultEvaluation`: Uses the default server trust evaluation while allowing you to control whether to validate the host provided by the challenge. 
* `PinCertificates`: Uses the pinned certificates to validate the server trust. The server trust is considered valid if one of the pinned certificates match one of the server certificates.
* `PinPublicKeys`: Uses the pinned public keys to validate the server trust. The server trust is considered valid if one of the pinned public keys match one of the server certificate public keys.
* `DisableEvaluation`: Disables all evaluation which in turn will always consider any server trust as valid.
* `CustomEvaluation`: Uses the associated closure to evaluate the validity of the server trust thus giving you complete control over the validation process. Use with caution.

#### Server Trust Policy Manager

The `ServerTrustPolicyManager` is responsible for storing an internal mapping of server trust policies to a particular host. This allows Alamofire to evaluate each host against a different server trust policy. 

```swift
let serverTrustPolicies: [String: ServerTrustPolicy] = [
    "test.example.com": .PinCertificates(
        certificates: ServerTrustPolicy.certificatesInBundle(),
        validateCertificateChain: true,
        validateHost: true
    ),
    "insecure.expired-apis.com": .DisableEvaluation
]

let manager = Manager(
    serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies)
)
```

> Make sure to keep a reference to the new `Manager` instance, otherwise your requests will all get cancelled when your `manager` is deallocated.

These server trust policies will result in the following behavior:

* `test.example.com` will always use certificate pinning with certificate chain and host validation enabled thus requiring the following criteria to be met to allow the TLS handshake to succeed:
  * Certificate chain MUST be valid.
  * Certificate chain MUST include one of the pinned certificates.
  * Challenge host MUST match the host in the certificate chain's leaf certificate.
* `insecure.expired-apis.com` will never evaluate the certificate chain and will always allow the TLS handshake to succeed.
* All other hosts will use the default evaluation provided by Apple.

##### Subclassing Server Trust Policy Manager

If you find yourself needing more flexible server trust policy matching behavior (i.e. wildcarded domains), then subclass the `ServerTrustPolicyManager` and override the `serverTrustPolicyForHost` method with your own custom implementation.

```swift
class CustomServerTrustPolicyManager: ServerTrustPolicyManager {
    override func serverTrustPolicyForHost(host: String) -> ServerTrustPolicy? {
        var policy: ServerTrustPolicy?

        // Implement your custom domain matching behavior...

        return policy
    }
}
```

#### Validating the Host

The `.PerformDefaultEvaluation`, `.PinCertificates` and `.PinPublicKeys` server trust policies all take a `validateHost` parameter. Setting the value to `true` will cause the server trust evaluation to verify that hostname in the certificate matches the hostname of the challenge. If they do not match, evaluation will fail. A `validateHost` value of `false` will still evaluate the full certificate chain, but will not validate the hostname of the leaf certificate.

> It is recommended that `validateHost` always be set to `true` in production environments.

#### Validating the Certificate Chain

Pinning certificates and public keys both have the option of validating the certificate chain using the `validateCertificateChain` parameter. By setting this value to `true`, the full certificate chain will be evaluated in addition to performing a byte equality check against the pinned certficates or public keys. A value of `false` will skip the certificate chain validation, but will still perform the byte equality check.

There are several cases where it may make sense to disable certificate chain validation. The most common use cases for disabling validation are self-signed and expired certificates. The evaluation would always fail in both of these cases, but the byte equality check will still ensure you are receiving the certificate you expect from the server.

> It is recommended that `validateCertificateChain` always be set to `true` in production environments.

#### App Transport Security

With the addition of App Transport Security (ATS) in iOS 9, it is possible that using a custom `ServerTrustPolicyManager` with several `ServerTrustPolicy` objects will have no effect. If you continuously see `CFNetwork SSLHandshake failed (-9806)` errors, you have probably run into this problem. Apple's ATS system overrides the entire challenge system unless you configure the ATS settings in your app's plist to disable enough of it to allow your app to evaluate the server trust.

If you run into this problem (high probability with self-signed certificates), you can work around this issue by adding the following to your `Info.plist`.

```xml
<dict>
	<key>NSAppTransportSecurity</key>
	<dict>
		<key>NSExceptionDomains</key>
		<dict>
			<key>example.com</key>
			<dict>
				<key>NSExceptionAllowsInsecureHTTPLoads</key>
				<true/>
				<key>NSExceptionRequiresForwardSecrecy</key>
				<false/>
				<key>NSIncludesSubdomains</key>
				<true/>
				<!-- Optional: Specify minimum TLS version -->
				<key>NSTemporaryExceptionMinimumTLSVersion</key>
				<string>TLSv1.2</string>
			</dict>
		</dict>
	</dict>
</dict>
```

Whether you need to set the `NSExceptionRequiresForwardSecrecy` to `NO` depends on whether your TLS connection is using an allowed cipher suite. In certain cases, it will need to be set to `NO`. The `NSExceptionAllowsInsecureHTTPLoads` MUST be set to `YES` in order to allow the `SessionDelegate` to receive challenge callbacks. Once the challenge callbacks are being called, the `ServerTrustPolicyManager` will take over the server trust evaluation. You may also need to specify the `NSTemporaryExceptionMinimumTLSVersion` if you're trying to connect to a host that only supports TLS versions less than `1.2`.

> It is recommended to always use valid certificates in production environments.

### Network Reachability

The `NetworkReachabilityManager` listens for reachability changes of hosts and addresses for both WWAN and WiFi network interfaces.

```swift
let manager = NetworkReachabilityManager(host: "www.apple.com")

manager?.listener = { status in
    print("Network Status Changed: \(status)")
}

manager?.startListening()
```

> Make sure to remember to retain the `manager` in the above example, or no status changes will be reported.

There are some important things to remember when using network reachability to determine what to do next.

* **Do NOT** use Reachability to determine if a network request should be sent.
  * You should **ALWAYS** send it.
* When Reachability is restored, use the event to retry failed network requests.
  * Even though the network requests may still fail, this is a good moment to retry them.
* The network reachability status can be useful for determining why a network request may have failed.
  * If a network request fails, it is more useful to tell the user that the network request failed due to being offline rather than a more technical errror, such as "request timed out."

> It is recommended to check out [WWDC 2012 Session 706, "Networking Best Practices"](https://developer.apple.com/videos/play/wwdc2012-706/) for more info.

---

## Component Libraries

In order to keep Alamofire focused specifically on core networking implementations, additional component libraries have been created by the [Alamofire Software Foundation](https://github.com/Alamofire/Foundation) to bring additional functionality to the Alamofire ecosystem.

* [AlamofireImage](https://github.com/Alamofire/AlamofireImage) - An image library including image response serializers, `UIImage` and `UIImageView` extensions, custom image filters, an auto-purging in-memory cache and a priority-based image downloading system.

## Open Rdars

The following rdars have some affect on the current implementation of Alamofire.

* [rdar://21349340](http://www.openradar.me/radar?id=5517037090635776) - Compiler throwing warning due to toll-free bridging issue in test case

## FAQ

### What's the origin of the name Alamofire?

Alamofire is named after the [Alamo Fire flower](https://aggie-horticulture.tamu.edu/wildseed/alamofire.html), a hybrid variant of the Bluebonnet, the official state flower of Texas.

---

## Credits

Alamofire is owned and maintained by the [Alamofire Software Foundation](http://alamofire.org). You can follow them on Twitter at [@AlamofireSF](https://twitter.com/AlamofireSF) for project updates and releases.

### Security Disclosure

If you believe you have identified a security vulnerability with Alamofire, you should report it as soon as possible via email to security@alamofire.org. Please do not post it to a public issue tracker.

## License

Alamofire is released under the MIT license. See LICENSE for details.


================================================
FILE: Sublime/Pods/Alamofire/Source/Alamofire.swift
================================================
// Alamofire.swift
//
// Copyright (c) 2014–2016 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.

import Foundation

// MARK: - URLStringConvertible

/**
    Types adopting the `URLStringConvertible` protocol can be used to construct URL strings, which are then used to 
    construct URL requests.
*/
public protocol URLStringConvertible {
    /**
        A URL that conforms to RFC 2396.

        Methods accepting a `URLStringConvertible` type parameter parse it according to RFCs 1738 and 1808.

        See https://tools.ietf.org/html/rfc2396
        See https://tools.ietf.org/html/rfc1738
        See https://tools.ietf.org/html/rfc1808
    */
    var URLString: String { get }
}

extension String: URLStringConvertible {
    public var URLString: String {
        return self
    }
}

extension NSURL: URLStringConvertible {
    public var URLString: String {
        return absoluteString
    }
}

extension NSURLComponents: URLStringConvertible {
    public var URLString: String {
        return URL!.URLString
    }
}

extension NSURLRequest: URLStringConvertible {
    public var URLString: String {
        return URL!.URLString
    }
}

// MARK: - URLRequestConvertible

/**
    Types adopting the `URLRequestConvertible` protocol can be used to construct URL requests.
*/
public protocol URLRequestConvertible {
    /// The URL request.
    var URLRequest: NSMutableURLRequest { get }
}

extension NSURLRequest: URLRequestConvertible {
    public var URLRequest: NSMutableURLRequest {
        return self.mutableCopy() as! NSMutableURLRequest
    }
}

// MARK: - Convenience

func URLRequest(
    method: Method,
    _ URLString: URLStringConvertible,
    headers: [String: String]? = nil)
    -> NSMutableURLRequest
{
    let mutableURLRequest = NSMutableURLRequest(URL: NSURL(string: URLString.URLString)!)
    mutableURLRequest.HTTPMethod = method.rawValue

    if let headers = headers {
        for (headerField, headerValue) in headers {
            mutableURLRequest.setValue(headerValue, forHTTPHeaderField: headerField)
        }
    }

    return mutableURLRequest
}

// MARK: - Request Methods

/**
    Creates a request using the shared manager instance for the specified method, URL string, parameters, and
    parameter encoding.

    - parameter method:     The HTTP method.
    - parameter URLString:  The URL string.
    - parameter parameters: The parameters. `nil` by default.
    - parameter encoding:   The parameter encoding. `.URL` by default.
    - parameter headers:    The HTTP headers. `nil` by default.

    - returns: The created request.
*/
public func request(
    method: Method,
    _ URLString: URLStringConvertible,
    parameters: [String: AnyObject]? = nil,
    encoding: ParameterEncoding = .URL,
    headers: [String: String]? = nil)
    -> Request
{
    return Manager.sharedInstance.request(
        method,
        URLString,
        parameters: parameters,
        encoding: encoding,
        headers: headers
    )
}

/**
    Creates a request using the shared manager instance for the specified URL request.

    If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.

    - parameter URLRequest: The URL request

    - returns: The created request.
*/
public func request(URLRequest: URLRequestConvertible) -> Request {
    return Manager.sharedInstance.request(URLRequest.URLRequest)
}

// MARK: - Upload Methods

// MARK: File

/**
    Creates an upload request using the shared manager instance for the specified method, URL string, and file.

    - parameter method:    The HTTP method.
    - parameter URLString: The URL string.
    - parameter headers:   The HTTP headers. `nil` by default.
    - parameter file:      The file to upload.

    - returns: The created upload request.
*/
public func upload(
    method: Method,
    _ URLString: URLStringConvertible,
    headers: [String: String]? = nil,
    file: NSURL)
    -> Request
{
    return Manager.sharedInstance.upload(method, URLString, headers: headers, file: file)
}

/**
    Creates an upload request using the shared manager instance for the specified URL request and file.

    - parameter URLRequest: The URL request.
    - parameter file:       The file to upload.

    - returns: The created upload request.
*/
public func upload(URLRequest: URLRequestConvertible, file: NSURL) -> Request {
    return Manager.sharedInstance.upload(URLRequest, file: file)
}

// MARK: Data

/**
    Creates an upload request using the shared manager instance for the specified method, URL string, and data.

    - parameter method:    The HTTP method.
    - parameter URLString: The URL string.
    - parameter headers:   The HTTP headers. `nil` by default.
    - parameter data:      The data to upload.

    - returns: The created upload request.
*/
public func upload(
    method: Method,
    _ URLString: URLStringConvertible,
    headers: [String: String]? = nil,
    data: NSData)
    -> Request
{
    return Manager.sharedInstance.upload(method, URLString, headers: headers, data: data)
}

/**
    Creates an upload request using the shared manager instance for the specified URL request and data.

    - parameter URLRequest: The URL request.
    - parameter data:       The data to upload.

    - returns: The created upload request.
*/
public func upload(URLRequest: URLRequestConvertible, data: NSData) -> Request {
    return Manager.sharedInstance.upload(URLRequest, data: data)
}

// MARK: Stream

/**
    Creates an upload request using the shared manager instance for the specified method, URL string, and stream.

    - parameter method:    The HTTP method.
    - parameter URLString: The URL string.
    - parameter headers:   The HTTP headers. `nil` by default.
    - parameter stream:    The stream to upload.

    - returns: The created upload request.
*/
public func upload(
    method: Method,
    _ URLString: URLStringConvertible,
    headers: [String: String]? = nil,
    stream: NSInputStream)
    -> Request
{
    return Manager.sharedInstance.upload(method, URLString, headers: headers, stream: stream)
}

/**
    Creates an upload request using the shared manager instance for the specified URL request and stream.

    - parameter URLRequest: The URL request.
    - parameter stream:     The stream to upload.

    - returns: The created upload request.
*/
public func upload(URLRequest: URLRequestConvertible, stream: NSInputStream) -> Request {
    return Manager.sharedInstance.upload(URLRequest, stream: stream)
}

// MARK: MultipartFormData

/**
    Creates an upload request using the shared manager instance for the specified method and URL string.

    - parameter method:                  The HTTP method.
    - parameter URLString:               The URL string.
    - parameter headers:                 The HTTP headers. `nil` by default.
    - parameter multipartFormData:       The closure used to append body parts to the `MultipartFormData`.
    - parameter encodingMemoryThreshold: The encoding memory threshold in bytes.
                                         `MultipartFormDataEncodingMemoryThreshold` by default.
    - parameter encodingCompletion:      The closure called when the `MultipartFormData` encoding is complete.
*/
public func upload(
    method: Method,
    _ URLString: URLStringConvertible,
    headers: [String: String]? = nil,
    multipartFormData: MultipartFormData -> Void,
    encodingMemoryThreshold: UInt64 = Manager.MultipartFormDataEncodingMemoryThreshold,
    encodingCompletion: (Manager.MultipartFormDataEncodingResult -> Void)?)
{
    return Manager.sharedInstance.upload(
        method,
        URLString,
        headers: headers,
        multipartFormData: multipartFormData,
        encodingMemoryThreshold: encodingMemoryThreshold,
        encodingCompletion: encodingCompletion
    )
}

/**
    Creates an upload request using the shared manager instance for the specified method and URL string.

    - parameter URLRequest:              The URL request.
    - parameter multipartFormData:       The closure used to append body parts to the `MultipartFormData`.
    - parameter encodingMemoryThreshold: The encoding memory threshold in bytes.
                                         `MultipartFormDataEncodingMemoryThreshold` by default.
    - parameter encodingCompletion:      The closure called when the `MultipartFormData` encoding is complete.
*/
public func upload(
    URLRequest: URLRequestConvertible,
    multipartFormData: MultipartFormData -> Void,
    encodingMemoryThreshold: UInt64 = Manager.MultipartFormDataEncodingMemoryThreshold,
    encodingCompletion: (Manager.MultipartFormDataEncodingResult -> Void)?)
{
    return Manager.sharedInstance.upload(
        URLRequest,
        multipartFormData: multipartFormData,
        encodingMemoryThreshold: encodingMemoryThreshold,
        encodingCompletion: encodingCompletion
    )
}

// MARK: - Download Methods

// MARK: URL Request

/**
    Creates a download request using the shared manager instance for the specified method and URL string.

    - parameter method:      The HTTP method.
    - parameter URLString:   The URL string.
    - parameter parameters:  The parameters. `nil` by default.
    - parameter encoding:    The parameter encoding. `.URL` by default.
    - parameter headers:     The HTTP headers. `nil` by default.
    - parameter destination: The closure used to determine the destination of the downloaded file.

    - returns: The created download request.
*/
public func download(
    method: Method,
    _ URLString: URLStringConvertible,
    parameters: [String: AnyObject]? = nil,
    encoding: ParameterEncoding = .URL,
    headers: [String: String]? = nil,
    destination: Request.DownloadFileDestination)
    -> Request
{
    return Manager.sharedInstance.download(
        method,
        URLString,
        parameters: parameters,
        encoding: encoding,
        headers: headers,
        destination: destination
    )
}

/**
    Creates a download request using the shared manager instance for the specified URL request.

    - parameter URLRequest:  The URL request.
    - parameter destination: The closure used to determine the destination of the downloaded file.

    - returns: The created download request.
*/
public func download(URLRequest: URLRequestConvertible, destination: Request.DownloadFileDestination) -> Request {
    return Manager.sharedInstance.download(URLRequest, destination: destination)
}

// MARK: Resume Data

/**
    Creates a request using the shared manager instance for downloading from the resume data produced from a 
    previous request cancellation.

    - parameter resumeData:  The resume data. This is an opaque data blob produced by `NSURLSessionDownloadTask`
                             when a task is cancelled. See `NSURLSession -downloadTaskWithResumeData:` for additional 
                             information.
    - parameter destination: The closure used to determine the destination of the downloaded file.

    - returns: The created download request.
*/
public func download(resumeData data: NSData, destination: Request.DownloadFileDestination) -> Request {
    return Manager.sharedInstance.download(data, destination: destination)
}


================================================
FILE: Sublime/Pods/Alamofire/Source/Download.swift
================================================
// Download.swift
//
// Copyright (c) 2014–2016 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.

import Foundation

extension Manager {
    private enum Downloadable {
        case Request(NSURLRequest)
        case ResumeData(NSData)
    }

    private func download(downloadable: Downloadable, destination: Request.DownloadFileDestination) -> Request {
        var downloadTask: NSURLSessionDownloadTask!

        switch downloadable {
        case .Request(let request):
            dispatch_sync(queue) {
                downloadTask = self.session.downloadTaskWithRequest(request)
            }
        case .ResumeData(let resumeData):
            dispatch_sync(queue) {
                downloadTask = self.session.downloadTaskWithResumeData(resumeData)
            }
        }

        let request = Request(session: session, task: downloadTask)

        if let downloadDelegate = request.delegate as? Request.DownloadTaskDelegate {
            downloadDelegate.downloadTaskDidFinishDownloadingToURL = { session, downloadTask, URL in
                return destination(URL, downloadTask.response as! NSHTTPURLResponse)
            }
        }

        delegate[request.delegate.task] = request.delegate

        if startRequestsImmediately {
            request.resume()
        }

        return request
    }

    // MARK: Request

    /**
        Creates a download request for the specified method, URL string, parameters, parameter encoding, headers
        and destination.

        If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.

        - parameter method:      The HTTP method.
        - parameter URLString:   The URL string.
        - parameter parameters:  The parameters. `nil` by default.
        - parameter encoding:    The parameter encoding. `.URL` by default.
        - parameter headers:     The HTTP headers. `nil` by default.
        - parameter destination: The closure used to determine the destination of the downloaded file.

        - returns: The created download request.
    */
    public func download(
        method: Method,
        _ URLString: URLStringConvertible,
        parameters: [String: AnyObject]? = nil,
        encoding: ParameterEncoding = .URL,
        headers: [String: String]? = nil,
        destination: Request.DownloadFileDestination)
        -> Request
    {
        let mutableURLRequest = URLRequest(method, URLString, headers: headers)
        let encodedURLRequest = encoding.encode(mutableURLRequest, parameters: parameters).0

        return download(encodedURLRequest, destination: destination)
    }

    /**
        Creates a request for downloading from the specified URL request.

        If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.

        - parameter URLRequest:  The URL request
        - parameter destination: The closure used to determine the destination of the downloaded file.

        - returns: The created download request.
    */
    public func download(URLRequest: URLRequestConvertible, destination: Request.DownloadFileDestination) -> Request {
        return download(.Request(URLRequest.URLRequest), destination: destination)
    }

    // MARK: Resume Data

    /**
        Creates a request for downloading from the resume data produced from a previous request cancellation.

        If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.

        - parameter resumeData:  The resume data. This is an opaque data blob produced by `NSURLSessionDownloadTask` 
                                 when a task is cancelled. See `NSURLSession -downloadTaskWithResumeData:` for 
                                 additional information.
        - parameter destination: The closure used to determine the destination of the downloaded file.

        - returns: The created download request.
    */
    public func download(resumeData: NSData, destination: Request.DownloadFileDestination) -> Request {
        return download(.ResumeData(resumeData), destination: destination)
    }
}

// MARK: -

extension Request {
    /**
        A closure executed once a request has successfully completed in order to determine where to move the temporary 
        file written to during the download process. The closure takes two arguments: the temporary file URL and the URL 
        response, and returns a single argument: the file URL where the temporary file should be moved.
    */
    public typealias DownloadFileDestination = (NSURL, NSHTTPURLResponse) -> NSURL

    /**
        Creates a download file destination closure which uses the default file manager to move the temporary file to a 
        file URL in the first available directory with the specified search path directory and search path domain mask.

        - parameter directory: The search path directory. `.DocumentDirectory` by default.
        - parameter domain:    The search path domain mask. `.UserDomainMask` by default.

        - returns: A download file destination closure.
    */
    public class func suggestedDownloadDestination(
        directory directory: NSSearchPathDirectory = .DocumentDirectory,
        domain: NSSearchPathDomainMask = .UserDomainMask)
        -> DownloadFileDestination
    {
        return { temporaryURL, response -> NSURL in
            let directoryURLs = NSFileManager.defaultManager().URLsForDirectory(directory, inDomains: domain)

            if !directoryURLs.isEmpty {
                return directoryURLs[0].URLByAppendingPathComponent(response.suggestedFilename!)
            }

            return temporaryURL
        }
    }

    /// The resume data of the underlying download task if available after a failure.
    public var resumeData: NSData? {
        var data: NSData?

        if let delegate = delegate as? DownloadTaskDelegate {
            data = delegate.resumeData
        }

        return data
    }

    // MARK: - DownloadTaskDelegate

    class DownloadTaskDelegate: TaskDelegate, NSURLSessionDownloadDelegate {
        var downloadTask: NSURLSessionDownloadTask? { return task as? NSURLSessionDownloadTask }
        var downloadProgress: ((Int64, Int64, Int64) -> Void)?

        var resumeData: NSData?
        override var data: NSData? { return resumeData }

        // MARK: - NSURLSessionDownloadDelegate

        // MARK: Override Closures

        var downloadTaskDidFinishDownloadingToURL: ((NSURLSession, NSURLSessionDownloadTask, NSURL) -> NSURL)?
        var downloadTaskDidWriteData: ((NSURLSession, NSURLSessionDownloadTask, Int64, Int64, Int64) -> Void)?
        var downloadTaskDidResumeAtOffset: ((NSURLSession, NSURLSessionDownloadTask, Int64, Int64) -> Void)?

        // MARK: Delegate Methods

        func URLSession(
            session: NSURLSession,
            downloadTask: NSURLSessionDownloadTask,
            didFinishDownloadingToURL location: NSURL)
        {
            if let downloadTaskDidFinishDownloadingToURL = downloadTaskDidFinishDownloadingToURL {
                do {
                    let destination = downloadTaskDidFinishDownloadingToURL(session, downloadTask, location)
                    try NSFileManager.defaultManager().moveItemAtURL(location, toURL: destination)
                } catch {
                    self.error = error as NSError
                }
            }
        }

        func URLSession(
            session: NSURLSession,
            downloadTask: NSURLSessionDownloadTask,
            didWriteData bytesWritten: Int64,
            totalBytesWritten: Int64,
            totalBytesExpectedToWrite: Int64)
        {
            if initialResponseTime == nil { initialResponseTime = CFAbsoluteTimeGetCurrent() }

            if let downloadTaskDidWriteData = downloadTaskDidWriteData {
                downloadTaskDidWriteData(
                    session,
                    downloadTask,
                    bytesWritten,
                    totalBytesWritten, 
                    totalBytesExpectedToWrite
                )
            } else {
                progress.totalUnitCount = totalBytesExpectedToWrite
                progress.completedUnitCount = totalBytesWritten

                downloadProgress?(bytesWritten, totalBytesWritten, totalBytesExpectedToWrite)
            }
        }

        func URLSession(
            session: NSURLSession,
            downloadTask: NSURLSessionDownloadTask,
            didResumeAtOffset fileOffset: Int64,
            expectedTotalBytes: Int64)
        {
            if let downloadTaskDidResumeAtOffset = downloadTaskDidResumeAtOffset {
                downloadTaskDidResumeAtOffset(session, downloadTask, fileOffset, expectedTotalBytes)
            } else {
                progress.totalUnitCount = expectedTotalBytes
                progress.completedUnitCount = fileOffset
            }
        }
    }
}


================================================
FILE: Sublime/Pods/Alamofire/Source/Error.swift
================================================
// Error.swift
//
// Copyright (c) 2014–2016 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.

import Foundation

/// The `Error` struct provides a convenience for creating custom Alamofire NSErrors.
public struct Error {
    /// The domain used for creating all Alamofire errors.
    public static let Domain = "com.alamofire.error"

    /// The custom error codes generated by Alamofire.
    public enum Code: Int {
        case InputStreamReadFailed           = -6000
        case OutputStreamWriteFailed         = -6001
        case ContentTypeValidationFailed     = -6002
        case StatusCodeValidationFailed      = -6003
        case DataSerializationFailed         = -6004
        case StringSerializationFailed       = -6005
        case JSONSerializationFailed         = -6006
        case PropertyListSerializationFailed = -6007
    }

    /**
        Creates an `NSError` with the given error code and failure reason.

        - parameter code:          The error code.
        - parameter failureReason: The failure reason.

        - returns: An `NSError` with the given error code and failure reason.
    */
    public static func errorWithCode(code: Code, failureReason: String) -> NSError {
        return errorWithCode(code.rawValue, failureReason: failureReason)
    }

    /**
        Creates an `NSError` with the given error code and failure reason.

        - parameter code:          The error code.
        - parameter failureReason: The failure reason.

        - returns: An `NSError` with the given error code and failure reason.
    */
    public static func errorWithCode(code: Int, failureReason: String) -> NSError {
        let userInfo = [NSLocalizedFailureReasonErrorKey: failureReason]
        return NSError(domain: Domain, code: code, userInfo: userInfo)
    }
}


================================================
FILE: Sublime/Pods/Alamofire/Source/Manager.swift
================================================
// Manager.swift
//
// Copyright (c) 2014–2016 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.

import Foundation

/**
    Responsible for creating and managing `Request` objects, as well as their underlying `NSURLSession`.
*/
public class Manager {

    // MARK: - Properties

    /**
        A shared instance of `Manager`, used by top-level Alamofire request methods, and suitable for use directly 
        for any ad hoc requests.
    */
    public static let sharedInstance: Manager = {
        let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
        configuration.HTTPAdditionalHeaders = Manager.defaultHTTPHeaders

        return Manager(configuration: configuration)
    }()

    /**
        Creates default values for the "Accept-Encoding", "Accept-Language" and "User-Agent" headers.
    */
    public static let defaultHTTPHeaders: [String: String] = {
        // Accept-Encoding HTTP Header; see https://tools.ietf.org/html/rfc7230#section-4.2.3
        let acceptEncoding: String = "gzip;q=1.0, compress;q=0.5"

        // Accept-Language HTTP Header; see https://tools.ietf.org/html/rfc7231#section-5.3.5
        let acceptLanguage = NSLocale.preferredLanguages().prefix(6).enumerate().map { index, languageCode in
            let quality = 1.0 - (Double(index) * 0.1)
            return "\(languageCode);q=\(quality)"
        }.joinWithSeparator(", ")

        // User-Agent Header; see https://tools.ietf.org/html/rfc7231#section-5.5.3
        let userAgent: String = {
            if let info = NSBundle.mainBundle().infoDictionary {
                let executable: AnyObject = info[kCFBundleExecutableKey as String] ?? "Unknown"
                let bundle: AnyObject = info[kCFBundleIdentifierKey as String] ?? "Unknown"
                let version: AnyObject = info[kCFBundleVersionKey as String] ?? "Unknown"
                let os: AnyObject = NSProcessInfo.processInfo().operatingSystemVersionString ?? "Unknown"

                var mutableUserAgent = NSMutableString(string: "\(executable)/\(bundle) (\(version); OS \(os))") as CFMutableString
                let transform = NSString(string: "Any-Latin; Latin-ASCII; [:^ASCII:] Remove") as CFString

                if CFStringTransform(mutableUserAgent, UnsafeMutablePointer<CFRange>(nil), transform, false) {
                    return mutableUserAgent as String
                }
            }

            return "Alamofire"
        }()

        return [
            "Accept-Encoding": acceptEncoding,
            "Accept-Language": acceptLanguage,
            "User-Agent": userAgent
        ]
    }()

    let queue = dispatch_queue_create(nil, DISPATCH_QUEUE_SERIAL)

    /// The underlying session.
    public let session: NSURLSession

    /// The session delegate handling all the task and session delegate callbacks.
    public let delegate: SessionDelegate

    /// Whether to start requests immediately after being constructed. `true` by default.
    public var startRequestsImmediately: Bool = true

    /**
        The background completion handler closure provided by the UIApplicationDelegate 
        `application:handleEventsForBackgroundURLSession:completionHandler:` method. By setting the background 
        completion handler, the SessionDelegate `sessionDidFinishEventsForBackgroundURLSession` closure implementation 
        will automatically call the handler.
    
        If you need to handle your own events before the handler is called, then you need to override the 
        SessionDelegate `sessionDidFinishEventsForBackgroundURLSession` and manually call the handler when finished.
    
        `nil` by default.
    */
    public var backgroundCompletionHandler: (() -> Void)?

    // MARK: - Lifecycle

    /**
        Initializes the `Manager` instance with the specified configuration, delegate and server trust policy.

        - parameter configuration:            The configuration used to construct the managed session. 
                                              `NSURLSessionConfiguration.defaultSessionConfiguration()` by default.
        - parameter delegate:                 The delegate used when initializing the session. `SessionDelegate()` by
                                              default.
        - parameter serverTrustPolicyManager: The server trust policy manager to use for evaluating all server trust 
                                              challenges. `nil` by default.

        - returns: The new `Manager` instance.
    */
    public init(
        configuration: NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration(),
        delegate: SessionDelegate = SessionDelegate(),
        serverTrustPolicyManager: ServerTrustPolicyManager? = nil)
    {
        self.delegate = delegate
        self.session = NSURLSession(configuration: configuration, delegate: delegate, delegateQueue: nil)

        commonInit(serverTrustPolicyManager: serverTrustPolicyManager)
    }

    /**
        Initializes the `Manager` instance with the specified session, delegate and server trust policy.

        - parameter session:                  The URL session.
        - parameter delegate:                 The delegate of the URL session. Must equal the URL session's delegate.
        - parameter serverTrustPolicyManager: The server trust policy manager to use for evaluating all server trust
                                              challenges. `nil` by default.

        - returns: The new `Manager` instance if the URL session's delegate matches the delegate parameter.
    */
    public init?(
        session: NSURLSession,
        delegate: SessionDelegate,
        serverTrustPolicyManager: ServerTrustPolicyManager? = nil)
    {
        self.delegate = delegate
        self.session = session

        guard delegate === session.delegate else { return nil }

        commonInit(serverTrustPolicyManager: serverTrustPolicyManager)
    }

    private func commonInit(serverTrustPolicyManager serverTrustPolicyManager: ServerTrustPolicyManager?) {
        session.serverTrustPolicyManager = serverTrustPolicyManager

        delegate.sessionDidFinishEventsForBackgroundURLSession = { [weak self] session in
            guard let strongSelf = self else { return }
            dispatch_async(dispatch_get_main_queue()) { strongSelf.backgroundCompletionHandler?() }
        }
    }

    deinit {
        session.invalidateAndCancel()
    }

    // MARK: - Request

    /**
        Creates a request for the specified method, URL string, parameters, parameter encoding and headers.

        - parameter method:     The HTTP method.
        - parameter URLString:  The URL string.
        - parameter parameters: The parameters. `nil` by default.
        - parameter encoding:   The parameter encoding. `.URL` by default.
        - parameter headers:    The HTTP headers. `nil` by default.

        - returns: The created request.
    */
    public func request(
        method: Method,
        _ URLString: URLStringConvertible,
        parameters: [String: AnyObject]? = nil,
        encoding: ParameterEncoding = .URL,
        headers: [String: String]? = nil)
        -> Request
    {
        let mutableURLRequest = URLRequest(method, URLString, headers: headers)
        let encodedURLRequest = encoding.encode(mutableURLRequest, parameters: parameters).0
        return request(encodedURLRequest)
    }

    /**
        Creates a request for the specified URL request.

        If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned.

        - parameter URLRequest: The URL request

        - returns: The created request.
    */
    public func request(URLRequest: URLRequestConvertible) -> Request {
        var dataTask: NSURLSessionDataTask!
        dispatch_sync(queue) { dataTask = self.session.dataTaskWithRequest(URLRequest.URLRequest) }

        let request = Request(session: session, task: dataTask)
        delegate[request.delegate.task] = request.delegate

        if startRequestsImmediately {
            request.resume()
        }

        return request
    }

    // MARK: - SessionDelegate

    /**
        Responsible for handling all delegate callbacks for the underlying session.
    */
    public final class SessionDelegate: NSObject, NSURLSessionDelegate, NSURLSessionTaskDelegate, NSURLSessionDataDelegate, NSURLSessionDownloadDelegate {
        private var subdelegates: [Int: Request.TaskDelegate] = [:]
        private let subdelegateQueue = dispatch_queue_create(nil, DISPATCH_QUEUE_CONCURRENT)

        subscript(task: NSURLSessionTask) -> Request.TaskDelegate? {
            get {
                var subdelegate: Request.TaskDelegate?
                dispatch_sync(subdelegateQueue) { subdelegate = self.subdelegates[task.taskIdentifier] }

                return subdelegate
            }

            set {
                dispatch_barrier_async(subdelegateQueue) { self.subdelegates[task.taskIdentifier] = newValue }
            }
        }

        /**
            Initializes the `SessionDelegate` instance.

            - returns: The new `SessionDelegate` instance.
        */
        public override init() {
            super.init()
        }

        // MARK: - NSURLSessionDelegate

        // MARK: Override Closures

        /// Overrides default behavior for NSURLSessionDelegate method `URLSession:didBecomeInvalidWithError:`.
        public var sessionDidBecomeInvalidWithError: ((NSURLSession, NSError?) -> Void)?

        /// Overrides default behavior for NSURLSessionDelegate method `URLSession:didReceiveChallenge:completionHandler:`.
        public var sessionDidReceiveChallenge: ((NSURLSession, NSURLAuthenticationChallenge) -> (NSURLSessionAuthChallengeDisposition, NSURLCredential?))?

        /// Overrides default behavior for NSURLSessionDelegate method `URLSessionDidFinishEventsForBackgroundURLSession:`.
        public var sessionDidFinishEventsForBackgroundURLSession: ((NSURLSession) -> Void)?

        // MARK: Delegate Methods

        /**
            Tells the delegate that the session has been invalidated.

            - parameter session: The session object that was invalidated.
            - parameter error:   The error that caused invalidation, or nil if the invalidation was explicit.
        */
        public func URLSession(session: NSURLSession, didBecomeInvalidWithError error: NSError?) {
            sessionDidBecomeInvalidWithError?(session, error)
        }

        /**
            Requests credentials from the delegate in response to a session-level authentication request from the remote server.

            - parameter session:           The session containing the task that requested authentication.
            - parameter challenge:         An object that contains the request for authentication.
            - parameter completionHandler: A handler that your delegate method must call providing the disposition and credential.
        */
        public func URLSession(
            session: NSURLSession,
            didReceiveChallenge challenge: NSURLAuthenticationChallenge,
            completionHandler: ((NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void))
        {
            var disposition: NSURLSessionAuthChallengeDisposition = .PerformDefaultHandling
            var credential: NSURLCredential?

            if let sessionDidReceiveChallenge = sessionDidReceiveChallenge {
                (disposition, credential) = sessionDidReceiveChallenge(session, challenge)
            } else if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
                let host = challenge.protectionSpace.host

                if let
                    serverTrustPolicy = session.serverTrustPolicyManager?.serverTrustPolicyForHost(host),
                    serverTrust = challenge.protectionSpace.serverTrust
                {
                    if serverTrustPolicy.evaluateServerTrust(serverTrust, isValidForHost: host) {
                        disposition = .UseCredential
                        credential = NSURLCredential(forTrust: serverTrust)
                    } else {
                        disposition = .CancelAuthenticationChallenge
                    }
                }
            }

            completionHandler(disposition, credential)
        }

        /**
            Tells the delegate that all messages enqueued for a session have been delivered.

            - parameter session: The session that no longer has any outstanding requests.
        */
        public func URLSessionDidFinishEventsForBackgroundURLSession(session: NSURLSession) {
            sessionDidFinishEventsForBackgroundURLSession?(session)
        }

        // MARK: - NSURLSessionTaskDelegate

        // MARK: Override Closures

        /// Overrides default behavior for NSURLSessionTaskDelegate method `URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:`.
        public var taskWillPerformHTTPRedirection: ((NSURLSession, NSURLSessionTask, NSHTTPURLResponse, NSURLRequest) -> NSURLRequest?)?

        /// Overrides default behavior for NSURLSessionTaskDelegate method `URLSession:task:didReceiveChallenge:completionHandler:`.
        public var taskDidReceiveChallenge: ((NSURLSession, NSURLSessionTask, NSURLAuthenticationChallenge) -> (NSURLSessionAuthChallengeDisposition, NSURLCredential?))?

        /// Overrides default behavior for NSURLSessionTaskDelegate method `URLSession:session:task:needNewBodyStream:`.
        public var taskNeedNewBodyStream: ((NSURLSession, NSURLSessionTask) -> NSInputStream!)?

        /// Overrides default behavior for NSURLSessionTaskDelegate method `URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:`.
        public var taskDidSendBodyData: ((NSURLSession, NSURLSessionTask, Int64, Int64, Int64) -> Void)?

        /// Overrides default behavior for NSURLSessionTaskDelegate method `URLSession:task:didCompleteWithError:`.
        public var taskDidComplete: ((NSURLSession, NSURLSessionTask, NSError?) -> Void)?

        // MARK: Delegate Methods

        /**
            Tells the delegate that the remote server requested an HTTP redirect.

            - parameter session:           The session containing the task whose request resulted in a redirect.
            - parameter task:              The task whose request resulted in a redirect.
            - parameter response:          An object containing the server’s response to the original request.
            - parameter request:           A URL request object filled out with the new location.
            - parameter completionHandler: A closure that your handler should call with either the value of the request 
                                           parameter, a modified URL request object, or NULL to refuse the redirect and 
                                           return the body of the redirect response.
        */
        public func URLSession(
            session: NSURLSession,
            task: NSURLSessionTask,
            willPerformHTTPRedirection response: NSHTTPURLResponse,
            newRequest request: NSURLRequest,
            completionHandler: ((NSURLRequest?) -> Void))
        {
            var redirectRequest: NSURLRequest? = request

            if let taskWillPerformHTTPRedirection = taskWillPerformHTTPRedirection {
                redirectRequest = taskWillPerformHTTPRedirection(session, task, response, request)
            }

            completionHandler(redirectRequest)
        }

        /**
            Requests credentials from the delegate in response to an authentication request from the remote server.

            - parameter session:           The session containing the task whose request requires authentication.
            - parameter task:              The task whose request requires authentication.
            - parameter challenge:         An object that contains the request for authentication.
            - parameter completionHandler: A handler that your delegate method must call providing the disposition and credential.
        */
        public func URLSession(
            session: NSURLSession,
            task: NSURLSessionTask,
            didReceiveChallenge challenge: NSURLAuthenticationChallenge,
            completionHandler: ((NSURLSessionAuthChallengeDisposition, NSURLCredential?) -> Void))
        {
            if let taskDidReceiveChallenge = taskDidReceiveChallenge {
                completionHandler(taskDidReceiveChallenge(session, task, challenge))
            } else if let delegate = self[task] {
                delegate.URLSession(
                    session,
                    task: task,
                    didReceiveChallenge: challenge,
                    completionHandler: completionHandler
                )
            } else {
                URLSession(session, didReceiveChallenge: challenge, completionHandler: completionHandler)
            }
        }

        /**
            Tells the delegate when a task requires a new request body stream to send to the remote server.

            - parameter session:           The session containing the task that needs a new body stream.
            - parameter task:              The task that needs a new body stream.
            - parameter completionHandler: A completion handler that your delegate method should call with the new body stream.
        */
        public func URLSession(
            session: NSURLSession,
            task: NSURLSessionTask,
            needNewBodyStream completionHandler: ((NSInputStream?) -> Void))
        {
            if let taskNeedNewBodyStream = taskNeedNewBodyStream {
                completionHandler(taskNeedNewBodyStream(session, task))
            } else if let delegate = self[task] {
                delegate.URLSession(session, task: task, needNewBodyStream: completionHandler)
            }
        }

        /**
            Periodically informs the delegate of the progress of sending body content to the server.

            - parameter session:                  The session containing the data task.
            - parameter task:                     The data task.
            - parameter bytesSent:                The number of bytes sent since the last time this delegate method was called.
            - parameter totalBytesSent:           The total number of bytes sent so far.
            - parameter totalBytesExpectedToSend: The expected length of the body data.
        */
        public func URLSession(
            session: NSURLSession,
            task: NSURLSessionTask,
            didSendBodyData bytesSent: Int64,
            totalBytesSent: Int64,
            totalBytesExpectedToSend: Int64)
        {
            if let taskDidSendBodyData = taskDidSendBodyData {
                taskDidSendBodyData(session, task, bytesSent, totalBytesSent, totalBytesExpectedToSend)
            } else if let delegate = self[task] as? Request.UploadTaskDelegate {
                delegate.URLSession(
                    session,
                    task: task,
                    didSendBodyData: bytesSent,
                    totalBytesSent: totalBytesSent,
                    totalBytesExpectedToSend: totalBytesExpectedToSend
                )
            }
        }

        /**
            Tells the delegate that the task finished transferring data.

            - parameter session: The session containing the task whose request finished transferring data.
            - parameter task:    The task whose request finished transferring data.
            - parameter error:   If an error occurred, an error object indicating how the transfer failed, otherwise nil.
        */
        public func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) {
            if let taskDidComplete = taskDidComplete {
                taskDidComplete(session, task, error)
            } else if let delegate = self[task] {
                delegate.URLSession(session, task: task, didCompleteWithError: error)
            }

            NSNotificationCenter.defaultCenter().postNotificationName(Notifications.Task.DidComplete, object: task)

            self[task] = nil
        }

        // MARK: - NSURLSessionDataDelegate

        // MARK: Override Closures

        /// Overrides default behavior for NSURLSessionDataDelegate method `URLSession:dataTask:didReceiveResponse:completionHandler:`.
        public var dataTaskDidReceiveResponse: ((NSURLSession, NSURLSessionDataTask, NSURLResponse) -> NSURLSessionResponseDisposition)?

        /// Overrides default behavior for NSURLSessionDataDelegate method `URLSession:dataTask:didBecomeDownloadTask:`.
        public var dataTaskDidBecomeDownloadTask: ((NSURLSession, NSURLSessionDataTask, NSURLSessionDownloadTask) -> Void)?

        /// Overrides default behavior for NSURLSessionDataDelegate method `URLSession:dataTask:didReceiveData:`.
        public var dataTaskDidReceiveData: ((NSURLSession, NSURLSessionDataTask, NSData) -> Void)?

        /// Overrides default behavior for NSURLSessionDataDelegate method `URLSession:dataTask:willCacheResponse:completionHandler:`.
        public var dataTaskWillCacheResponse: ((NSURLSession, NSURLSessionDataTask, NSCachedURLResponse) -> NSCachedURLResponse!)?

        // MARK: Delegate Methods

        /**
            Tells the delegate that the data task received the initial reply (headers) from the server.

            - parameter session:           The session containing the data task that received an initial reply.
            - parameter dataTask:          The data task that received an initial reply.
            - parameter response:          A URL response object populated with headers.
            - parameter completionHandler: A completion handler that your code calls to continue the transfer, passing a 
                                           constant to indicate whether the transfer should continue as a data task or 
                                           should become a download task.
        */
        public func URLSession(
            session: NSURLSession,
            dataTask: NSURLSessionDataTask,
            didReceiveResponse response: NSURLResponse,
            completionHandler: ((NSURLSessionResponseDisposition) -> Void))
        {
            var disposition: NSURLSessionResponseDisposition = .Allow

            if let dataTaskDidReceiveResponse = dataTaskDidReceiveResponse {
                disposition = dataTaskDidReceiveResponse(session, dataTask, response)
            }

            completionHandler(disposition)
        }

        /**
            Tells the delegate that the data task was changed to a download task.

            - parameter session:      The session containing the task that was replaced by a download task.
            - parameter dataTask:     The data task that was replaced by a download task.
            - parameter downloadTask: The new download task that replaced the data task.
        */
        public func URLSession(
            session: NSURLSession,
            dataTask: NSURLSessionDataTask,
            didBecomeDownloadTask downloadTask: NSURLSessionDownloadTask)
        {
            if let dataTaskDidBecomeDownloadTask = dataTaskDidBecomeDownloadTask {
                dataTaskDidBecomeDownloadTask(session, dataTask, downloadTask)
            } else {
                let downloadDelegate = Request.DownloadTaskDelegate(task: downloadTask)
                self[downloadTask] = downloadDelegate
            }
        }

        /**
            Tells the delegate that the data task has received some of the expected data.

            - parameter session:  The session containing the data task that provided data.
            - parameter dataTask: The data task that provided data.
            - parameter data:     A data object containing the transferred data.
        */
        public func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) {
            if let dataTaskDidReceiveData = dataTaskDidReceiveData {
                dataTaskDidReceiveData(session, dataTask, data)
            } else if let delegate = self[dataTask] as? Request.DataTaskDelegate {
                delegate.URLSession(session, dataTask: dataTask, didReceiveData: data)
            }
        }

        /**
            Asks the delegate whether the data (or upload) task should store the response in the cache.

            - parameter session:           The session containing the data (or upload) task.
            - parameter dataTask:          The data (or upload) task.
            - parameter proposedResponse:  The default caching behavior. This behavior is determined based on the current 
                                           caching policy and the values of certain received headers, such as the Pragma 
                                           and Cache-Control headers.
            - parameter completionHandler: A block that your handler must call, providing either the original proposed 
                                           response, a modified version of that response, or NULL to prevent caching the 
                                           response. If your delegate implements this method, it must call this completion 
                                           handler; otherwise, your app leaks memory.
        */
        public func URLSession(
            session: NSURLSession,
            dataTask: NSURLSessionDataTask,
            willCacheResponse proposedResponse: NSCachedURLResponse,
            completionHandler: ((NSCachedURLResponse?) -> Void))
        {
            if let dataTaskWillCacheResponse = dataTaskWillCacheResponse {
                completionHandler(dataTaskWillCacheResponse(session, dataTask, proposedResponse))
            } else if let delegate = self[dataTask] as? Request.DataTaskDelegate {
                delegate.URLSession(
                    session,
                    dataTask: dataTask,
                    willCacheResponse: proposedResponse,
                    completionHandler: completionHandler
                )
            } else {
                completionHandler(proposedResponse)
            }
        }

        // MARK: - NSURLSessionDownloadDelegate

        // MARK: Override Closures

        /// Overrides default behavior for NSURLSessionDownloadDelegate method `URLSession:downloadTask:didFinishDownloadingToURL:`.
        public var downloadTaskDidFinishDownloadingToURL: ((NSURLSession, NSURLSessionDownloadTask, NSURL) -> Void)?

        /// Overrides default behavior for NSURLSessionDownloadDelegate method `URLSession:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:`.
        public var downloadTaskDidWriteData: ((NSURLSession, NSURLSessionDownloadTask, Int64, Int64, Int64) -> Void)?

        /// Overrides default behavior for NSURLSessionDownloadDelegate method `URLSession:downloadTask:didResumeAtOffset:expectedTotalBytes:`.
        public var downloadTaskDidResumeAtOffset: ((NSURLSession, NSURLSessionDownloadTask, Int64, Int64) -> Void)?

        // MARK: Delegate Methods

        /**
            Tells the delegate that a download task has finished downloading.

            - parameter session:      The session containing the download task that finished.
            - parameter downloadTask: The download task that finished.
            - parameter location:     A file URL for the temporary file. Because the file is temporary, you must either 
                                      open the file for reading or move it to a permanent location in your app’s sandbox 
                                      container directory before returning from this delegate method.
        */
        public func URLSession(
            session: NSURLSession,
            downloadTask: NSURLSessionDownloadTask,
            didFinishDownloadingToURL location: NSURL)
        {
            if let downloadTaskDidFinishDownloadingToURL = downloadTaskDidFinishDownloadingToURL {
                downloadTaskDidFinishDownloadingToURL(session, downloadTask, location)
            } else if let delegate = self[downloadTask] as? Request.DownloadTaskDelegate {
                delegate.URLSession(session, downloadTask: downloadTask, didFinishDownloadingToURL: location)
            }
        }

        /**
            Periodically informs the delegate about the download’s progress.

            - parameter session:                   The session containing the download task.
            - parameter downloadTask:              The download task.
            - parameter bytesWritten:              The number of bytes transferred since the last time this delegate 
                                                   method was called.
            - parameter totalBytesWritten:         The total number of bytes transferred so far.
            - parameter totalBytesExpectedToWrite: The expected length of the file, as provided by the Content-Length 
                                                   header. If this header was not provided, the value is 
                                                   `NSURLSessionTransferSizeUnknown`.
        */
        public func URLSession(
            session: NSURLSession,
            downloadTask: NSURLSessionDownloadTask,
            didWriteData bytesWritten: Int64,
            totalBytesWritten: Int64,
            totalBytesExpectedToWrite: Int64)
        {
            if let downloadTaskDidWriteData = downloadTaskDidWriteData {
                downloadTaskDidWriteData(session, downloadTask, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite)
            } else if let delegate = self[downloadTask] as? Request.DownloadTaskDelegate {
                delegate.URLSession(
                    session,
                    downloadTask: downloadTask,
                    didWriteData: bytesWritten,
                    totalBytesWritten: totalBytesWritten,
                    totalBytesExpectedToWrite: totalBytesExpectedToWrite
                )
            }
        }

        /**
            Tells the delegate that the download task has resumed downloading.

            - parameter session:            The session containing the download task that finished.
            - parameter downloadTask:       The download task that resumed. See explanation in the discussion.
            - parameter fileOffset:         If the file's cache policy or last modified date prevents reuse of the 
                                            existing content, then this value is zero. Otherwise, this value is an 
                                            integer representing the number of bytes on disk that do not need to be 
                                            retrieved again.
            - parameter expectedTotalBytes: The expected length of the file, as provided by the Content-Length header. 
                                            If this header was not provided, the value is NSURLSessionTransferSizeUnknown.
        */
        public func URLSession(
            session: NSURLSession,
            downloadTask: NSURLSessionDownloadTask,
            didResumeAtOffset fileOffset: Int64,
            expectedTotalBytes: Int64)
        {
            if let downloadTaskDidResumeAtOffset = downloadTaskDidResumeAtOffset {
                downloadTaskDidResumeAtOffset(session, downloadTask, fileOffset, expectedTotalBytes)
            } else if let delegate = self[downloadTask] as? Request.DownloadTaskDelegate {
                delegate.URLSession(
                    session,
                    downloadTask: downloadTask,
                    didResumeAtOffset: fileOffset,
                    expectedTotalBytes: expectedTotalBytes
                )
            }
        }

        // MARK: - NSURLSessionStreamDelegate

        var _streamTaskReadClosed: Any?
        var _streamTaskWriteClosed: Any?
        var _streamTaskBetterRouteDiscovered: Any?
        var _streamTaskDidBecomeInputStream: Any?

        // MARK: - NSObject

        public override func respondsToSelector(selector: Selector) -> Bool {
            switch selector {
            case "URLSession:didBecomeInvalidWithError:":
                return sessionDidBecomeInvalidWithError != nil
            case "URLSession:didReceiveChallenge:completionHandler:":
                return sessionDidReceiveChallenge != nil
            case "URLSessionDidFinishEventsForBackgroundURLSession:":
                return sessionDidFinishEventsForBackgroundURLSession != nil
            case "URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:":
                return taskWillPerformHTTPRedirection != nil
            case "URLSession:dataTask:didReceiveResponse:completionHandler:":
                return dataTaskDidReceiveResponse != nil
            default:
                return self.dynamicType.instancesRespondToSelector(selector)
            }
        }
    }
}


================================================
FILE: Sublime/Pods/Alamofire/Source/MultipartFormData.swift
================================================
// MultipartFormData.swift
//
// Copyright (c) 2014–2016 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.

import Foundation

#if os(iOS) || os(watchOS) || os(tvOS)
import MobileCoreServices
#elseif os(OSX)
import CoreServices
#endif

/**
    Constructs `multipart/form-data` for uploads within an HTTP or HTTPS body. There are currently two ways to encode 
    multipart form data. The first way is to encode the data directly in memory. This is very efficient, but can lead 
    to memory issues if the dataset is too large. The second way is designed for larger datasets and will write all the 
    data to a single file on disk with all the proper boundary segmentation. The second approach MUST be used for 
    larger datasets such as video content, otherwise your app may run out of memory when trying to encode the dataset.

    For more information on `multipart/form-data` in general, please refer to the RFC-2388 and RFC-2045 specs as well
    and the w3 form documentation.

    - https://www.ietf.org/rfc/rfc2388.txt
    - https://www.ietf.org/rfc/rfc2045.txt
    - https://www.w3.org/TR/html401/interact/forms.html#h-17.13
*/
public class MultipartFormData {

    // MARK: - Helper Types

    struct EncodingCharacters {
        static let CRLF = "\r\n"
    }

    struct BoundaryGenerator {
        enum BoundaryType {
            case Initial, Encapsulated, Final
        }

        static func randomBoundary() -> String {
            return String(format: "alamofire.boundary.%08x%08x", arc4random(), arc4random())
        }

        static func boundaryData(boundaryType boundaryType: BoundaryType, boundary: String) -> NSData {
            let boundaryText: String

            switch boundaryType {
            case .Initial:
                boundaryText = "--\(boundary)\(EncodingCharacters.CRLF)"
            case .Encapsulated:
                boundaryText = "\(EncodingCharacters.CRLF)--\(boundary)\(EncodingCharacters.CRLF)"
            case .Final:
                boundaryText = "\(EncodingCharacters.CRLF)--\(boundary)--\(EncodingCharacters.CRLF)"
            }

            return boundaryText.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
        }
    }

    class BodyPart {
        let headers: [String: String]
        let bodyStream: NSInputStream
        let bodyContentLength: UInt64
        var hasInitialBoundary = false
        var hasFinalBoundary = false

        init(headers: [String: String], bodyStream: NSInputStream, bodyContentLength: UInt64) {
            self.headers = headers
            self.bodyStream = bodyStream
            self.bodyContentLength = bodyContentLength
        }
    }

    // MARK: - Properties

    /// The `Content-Type` header value containing the boundary used to generate the `multipart/form-data`.
    public var contentType: String { return "multipart/form-data; boundary=\(boundary)" }

    /// The content length of all body parts used to generate the `multipart/form-data` not including the boundaries.
    public var contentLength: UInt64 { return bodyParts.reduce(0) { $0 + $1.bodyContentLength } }

    /// The boundary used to separate the body parts in the encoded form data.
    public let boundary: String

    private var bodyParts: [BodyPart]
    private var bodyPartError: NSError?
    private let streamBufferSize: Int

    // MARK: - Lifecycle

    /**
        Creates a multipart form data object.

        - returns: The multipart form data object.
    */
    public init() {
        self.boundary = BoundaryGenerator.randomBoundary()
        self.bodyParts = []

        /**
         *  The optimal read/write buffer size in bytes for input and output streams is 1024 (1KB). For more 
         *  information, please refer to the following article:
         *    - https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Streams/Articles/ReadingInputStreams.html
         */

        self.streamBufferSize = 1024
    }

    // MARK: - Body Parts

    /**
        Creates a body part from the data and appends it to the multipart form data object.

        The body part data will be encoded using the following format:

        - `Content-Disposition: form-data; name=#{name}` (HTTP Header)
        - Encoded data
        - Multipart form boundary

        - parameter data: The data to encode into the multipart form data.
        - parameter name: The name to associate with the data in the `Content-Disposition` HTTP header.
    */
    public func appendBodyPart(data data: NSData, name: String) {
        let headers = contentHeaders(name: name)
        let stream = NSInputStream(data: data)
        let length = UInt64(data.length)

        appendBodyPart(stream: stream, length: length, headers: headers)
    }

    /**
        Creates a body part from the data and appends it to the multipart form data object.

        The body part data will be encoded using the following format:

        - `Content-Disposition: form-data; name=#{name}` (HTTP Header)
        - `Content-Type: #{generated mimeType}` (HTTP Header)
        - Encoded data
        - Multipart form boundary

        - parameter data:     The data to encode into the multipart form data.
        - parameter name:     The name to associate with the data in the `Content-Disposition` HTTP header.
        - parameter mimeType: The MIME type to associate with the data content type in the `Content-Type` HTTP header.
    */
    public func appendBodyPart(data data: NSData, name: String, mimeType: String) {
        let headers = contentHeaders(name: name, mimeType: mimeType)
        let stream = NSInputStream(data: data)
        let length = UInt64(data.length)

        appendBodyPart(stream: stream, length: length, headers: headers)
    }

    /**
        Creates a body part from the data and appends it to the multipart form data object.

        The body part data will be encoded using the following format:

        - `Content-Disposition: form-data; name=#{name}; filename=#{filename}` (HTTP Header)
        - `Content-Type: #{mimeType}` (HTTP Header)
        - Encoded file data
        - Multipart form boundary

        - parameter data:     The data to encode into the multipart form data.
        - parameter name:     The name to associate with the data in the `Content-Disposition` HTTP header.
        - parameter fileName: The filename to associate with the data in the `Content-Disposition` HTTP header.
        - parameter mimeType: The MIME type to associate with the data in the `Content-Type` HTTP header.
    */
    public func appendBodyPart(data data: NSData, name: String, fileName: String, mimeType: String) {
        let headers = contentHeaders(name: name, fileName: fileName, mimeType: mimeType)
        let stream = NSInputStream(data: data)
        let length = UInt64(data.length)

        appendBodyPart(stream: stream, length: length, headers: headers)
    }

    /**
        Creates a body part from the file and appends it to the multipart form data object.

        The body part data will be encoded using the following format:

        - `Content-Disposition: form-data; name=#{name}; filename=#{generated filename}` (HTTP Header)
        - `Content-Type: #{generated mimeType}` (HTTP Header)
        - Encoded file data
        - Multipart form boundary

        The filename in the `Content-Disposition` HTTP header is generated from the last path component of the
        `fileURL`. The `Content-Type` HTTP header MIME type is generated by mapping the `fileURL` extension to the
        system associated MIME type.

        - parameter fileURL: The URL of the file whose content will be encoded into the multipart form data.
        - parameter name:    The name to associate with the file content in the `Content-Disposition` HTTP header.
    */
    public func appendBodyPart(fileURL fileURL: NSURL, name: String) {
        if let
            fileName = fileURL.lastPathComponent,
            pathExtension = fileURL.pathExtension
        {
            let mimeType = mimeTypeForPathExtension(pathExtension)
            appendBodyPart(fileURL: fileURL, name: name, fileName: fileName, mimeType: mimeType)
        } else {
            let failureReason = "Failed to extract the fileName of the provided URL: \(fileURL)"
            setBodyPartError(Error.errorWithCode(NSURLErrorBadURL, failureReason: failureReason))
        }
    }

    /**
        Creates a body part from the file and appends it to the multipart form data object.

        The body part data will be encoded using the following format:

        - Content-Disposition: form-data; name=#{name}; filename=#{filename} (HTTP Header)
        - Content-Type: #{mimeType} (HTTP Header)
        - Encoded file data
        - Multipart form boundary

        - parameter fileURL:  The URL of the file whose content will be encoded into the multipart form data.
        - parameter name:     The name to associate with the file content in the `Content-Disposition` HTTP header.
        - parameter fileName: The filename to associate with the file content in the `Content-Disposition` HTTP header.
        - parameter mimeType: The MIME type to associate with the file content in the `Content-Type` HTTP header.
    */
    public func appendBodyPart(fileURL fileURL: NSURL, name: String, fileName: String, mimeType: String) {
        let headers = contentHeaders(name: name, fileName: fileName, mimeType: mimeType)

        //============================================================
        //                 Check 1 - is file URL?
        //============================================================

        guard fileURL.fileURL else {
            let failureReason = "The file URL does not point to a file URL: \(fileURL)"
            let error = Error.errorWithCode(NSURLErrorBadURL, failureReason: failureReason)
            setBodyPartError(error)
            return
        }

        //============================================================
        //              Check 2 - is file URL reachable?
        //============================================================

        var isReachable = true

        if #available(OSX 10.10, *) {
            isReachable = fileURL.checkPromisedItemIsReachableAndReturnError(nil)
        }

        guard isReachable else {
            let error = Error.errorWithCode(NSURLErrorBadURL, failureReason: "The file URL is not reachable: \(fileURL)")
            setBodyPartError(error)
            return
        }

        //============================================================
        //            Check 3 - is file URL a directory?
        //============================================================

        var isDirectory: ObjCBool = false

        guard let
            path = fileURL.path
            where NSFileManager.defaultManager().fileExistsAtPath(path, isDirectory: &isDirectory) && !isDirectory else
        {
            let failureReason = "The file URL is a directory, not a file: \(fileURL)"
            let error = Error.errorWithCode(NSURLErrorBadURL, failureReason: failureReason)
            setBodyPartError(error)
            return
        }

        //============================================================
        //          Check 4 - can the file size be extracted?
        //============================================================

        var bodyContentLength: UInt64?

        do {
            if let
                path = fileURL.path,
                fileSize = try NSFileManager.defaultManager().attributesOfItemAtPath(path)[NSFileSize] as? NSNumber
            {
                bodyContentLength = fileSize.unsignedLongLongValue
            }
        } catch {
            // No-op
        }

        guard let length = bodyContentLength else {
            let failureReason = "Could not fetch attributes from the file URL: \(fileURL)"
            let error = Error.errorWithCode(NSURLErrorBadURL, failureReason: failureReason)
            setBodyPartError(error)
            return
        }

        //============================================================
        //       Check 5 - can a stream be created from file URL?
        //============================================================

        guard let stream = NSInputStream(URL: fileURL) else {
            let failureReason = "Failed to create an input stream from the file URL: \(fileURL)"
            let error = Error.errorWithCode(NSURLErrorCannotOpenFile, failureReason: failureReason)
            setBodyPartError(error)
            return
        }

        appendBodyPart(stream: stream, length: length, headers: headers)
    }

    /**
        Creates a body part from the stream and appends it to the multipart form data object.

        The body part data will be encoded using the following format:

        - `Content-Disposition: form-data; name=#{name}; filename=#{filename}` (HTTP Header)
        - `Content-Type: #{mimeType}` (HTTP Header)
        - Encoded stream data
        - Multipart form boundary

        - parameter stream:   The input stream to encode in the multipart form data.
        - parameter length:   The content length of the stream.
        - parameter name:     The name to associate with the stream content in the `Content-Disposition` HTTP header.
        - parameter fileName: The filename to associate with the stream content in the `Content-Disposition` HTTP header.
        - parameter mimeType: The MIME type to associate with the stream content in the `Content-Type` HTTP header.
    */
    public func appendBodyPart(
        stream stream: NSInputStream,
        length: UInt64,
        name: String,
        fileName: String,
        mimeType: String)
    {
        let headers = contentHeaders(name: name, fileName: fileName, mimeType: mimeType)
        appendBodyPart(stream: stream, length: length, headers: headers)
    }

    /**
        Creates a body part with the headers, stream and length and appends it to the multipart form data object.

        The body part data will be encoded using the following format:

        - HTTP headers
        - Encoded stream data
        - Multipart form boundary

        - parameter stream:  The input stream to encode in the multipart form data.
        - parameter length:  The content length of the stream.
        - parameter headers: The HTTP headers for the body part.
    */
    public func appendBodyPart(stream stream: NSInputStream, length: UInt64, headers: [String: String]) {
        let bodyPart = BodyPart(headers: headers, bodyStream: stream, bodyContentLength: length)
        bodyParts.append(bodyPart)
    }

    // MARK: - Data Encoding

    /**
        Encodes all the appended body parts into a single `NSData` object.

        It is important to note that this method will load all the appended body parts into memory all at the same 
        time. This method should only be used when the encoded data will have a small memory footprint. For large data 
        cases, please use the `writeEncodedDataToDisk(fileURL:completionHandler:)` method.

        - throws: An `NSError` if encoding encounters an error.

        - returns: The encoded `NSData` if encoding is successful.
    */
    public func encode() throws -> NSData {
        if let bodyPartError = bodyPartError {
            throw bodyPartError
        }

        let encoded = NSMutableData()

        bodyParts.first?.hasInitialBoundary = true
        bodyParts.last?.hasFinalBoundary = true

        for bodyPart in bodyParts {
            let encodedData = try encodeBodyPart(bodyPart)
            encoded.appendData(encodedData)
        }

        return encoded
    }

    /**
        Writes the appended body parts into the given file URL.

        This process is facilitated by reading and writing with input and output streams, respectively. Thus,
        this approach is very memory efficient and should be used for large body part data.

        - parameter fileURL: The file URL to write the multipart form data into.

        - throws: An `NSError` if encoding encounters an error.
    */
    public func writeEncodedDataToDisk(fileURL: NSURL) throws {
        if let bodyPartError = bodyPartError {
            throw bodyPartError
        }

        if let path = fileURL.path where NSFileManager.defaultManager().fileExistsAtPath(path) {
            let failureReason = "A file already exists at the given file URL: \(fileURL)"
            throw Error.errorWithCode(NSURLErrorBadURL, failureReason: failureReason)
        } else if !fileURL.fileURL {
            let failureReason = "The URL does not point to a valid file: \(fileURL)"
            throw Error.errorWithCode(NSURLErrorBadURL, failureReason: failureReason)
        }

        let outputStream: NSOutputStream

        if let possibleOutputStream = NSOutputStream(URL: fileURL, append: false) {
            outputStream = possibleOutputStream
        } else {
            let failureReason = "Failed to create an output stream with the given URL: \(fileURL)"
            throw Error.errorWithCode(NSURLErrorCannotOpenFile, failureReason: failureReason)
        }

        outputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
        outputStream.open()

        self.bodyParts.first?.hasInitialBoundary = true
        self.bodyParts.last?.hasFinalBoundary = true

        for bodyPart in self.bodyParts {
            try writeBodyPart(bodyPart, toOutputStream: outputStream)
        }

        outputStream.close()
        outputStream.removeFromRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
    }

    // MARK: - Private - Body Part Encoding

    private func encodeBodyPart(bodyPart: BodyPart) throws -> NSData {
        let encoded = NSMutableData()

        let initialData = bodyPart.hasInitialBoundary ? initialBoundaryData() : encapsulatedBoundaryData()
        encoded.appendData(initialData)

        let headerData = encodeHeaderDataForBodyPart(bodyPart)
        encoded.appendData(headerData)

        let bodyStreamData = try encodeBodyStreamDataForBodyPart(bodyPart)
        encoded.appendData(bodyStreamData)

        if bodyPart.hasFinalBoundary {
            encoded.appendData(finalBoundaryData())
        }

        return encoded
    }

    private func encodeHeaderDataForBodyPart(bodyPart: BodyPart) -> NSData {
        var headerText = ""

        for (key, value) in bodyPart.headers {
            headerText += "\(key): \(value)\(EncodingCharacters.CRLF)"
        }
        headerText += EncodingCharacters.CRLF

        return headerText.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
    }

    private func encodeBodyStreamDataForBodyPart(bodyPart: BodyPart) throws -> NSData {
        let inputStream = bodyPart.bodyStream
        inputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
        inputStream.open()

        var error: NSError?
        let encoded = NSMutableData()

        while inputStream.hasBytesAvailable {
            var buffer = [UInt8](count: streamBufferSize, repeatedValue: 0)
            let bytesRead = inputStream.read(&buffer, maxLength: streamBufferSize)

            if inputStream.streamError != nil {
                error = inputStream.streamError
                break
            }

            if bytesRead > 0 {
                encoded.appendBytes(buffer, length: bytesRead)
            } else if bytesRead < 0 {
                let failureReason = "Failed to read from input stream: \(inputStream)"
                error = Error.errorWithCode(.InputStreamReadFailed, failureReason: failureReason)
                break
            } else {
                break
            }
        }

        inputStream.close()
        inputStream.removeFromRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)

        if let error = error {
            throw error
        }

        return encoded
    }

    // MARK: - Private - Writing Body Part to Output Stream

    private func writeBodyPart(bodyPart: BodyPart, toOutputStream outputStream: NSOutputStream) throws {
        try writeInitialBoundaryDataForBodyPart(bodyPart, toOutputStream: outputStream)
        try writeHeaderDataForBodyPart(bodyPart, toOutputStream: outputStream)
        try writeBodyStreamForBodyPart(bodyPart, toOutputStream: outputStream)
        try writeFinalBoundaryDataForBodyPart(bodyPart, toOutputStream: outputStream)
    }

    private func writeInitialBoundaryDataForBodyPart(
        bodyPart: BodyPart,
        toOutputStream outputStream: NSOutputStream)
        throws
    {
        let initialData = bodyPart.hasInitialBoundary ? initialBoundaryData() : encapsulatedBoundaryData()
        return try writeData(initialData, toOutputStream: outputStream)
    }

    private func writeHeaderDataForBodyPart(bodyPart: BodyPart, toOutputStream outputStream: NSOutputStream) throws {
        let headerData = encodeHeaderDataForBodyPart(bodyPart)
        return try writeData(headerData, toOutputStream: outputStream)
    }

    private func writeBodyStreamForBodyPart(bodyPart: BodyPart, toOutputStream outputStream: NSOutputStream) throws {
        let inputStream = bodyPart.bodyStream
        inputStream.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
        inputStream.open()

        while inputStream.hasBytesAvailable {
            var buffer = [UInt8](count: streamBufferSize, repeatedValue: 0)
            let bytesRead = inputStream.read(&buffer, maxLength: streamBufferSize)

            if let streamError = inputStream.streamError {
                throw streamError
            }

            if bytesRead > 0 {
                if buffer.count != bytesRead {
                    buffer = Array(buffer[0..<bytesRead])
                }

                try writeBuffer(&buffer, toOutputStream: outputStream)
            } else if bytesRead < 0 {
                let failureReason = "Failed to read from input stream: \(inputStream)"
                throw Error.errorWithCode(.InputStreamReadFailed, failureReason: failureReason)
            } else {
                break
            }
        }

        inputStream.close()
        inputStream.removeFromRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
    }

    private func writeFinalBoundaryDataForBodyPart(
        bodyPart: BodyPart,
        toOutputStream outputStream: NSOutputStream)
        throws
    {
        if bodyPart.hasFinalBoundary {
            return try writeData(finalBoundaryData(), toOutputStream: outputStream)
        }
    }

    // MARK: - Private - Writing Buffered Data to Output Stream

    private func writeData(data: NSData, toOutputStream outputStream: NSOutputStream) throws {
        var buffer = [UInt8](count: data.length, repeatedValue: 0)
        data.getBytes(&buffer, length: data.length)

        return try writeBuffer(&buffer, toOutputStream: outputStream)
    }

    private func writeBuffer(inout buffer: [UInt8], toOutputStream outputStream: NSOutputStream) throws {
        var bytesToWrite = buffer.count

        while bytesToWrite > 0 {
            if outputStream.hasSpaceAvailable {
                let bytesWritten = outputStream.write(buffer, maxLength: bytesToWrite)

                if let streamError = outputStream.streamError {
                    throw streamError
                }

                if bytesWritten < 0 {
                    let failureReason = "Failed to write to output stream: \(outputStream)"
                    throw Error.errorWithCode(.OutputStreamWriteFailed, failureReason: failureReason)
                }

                bytesToWrite -= bytesWritten

                if bytesToWrite > 0 {
                    buffer = Array(buffer[bytesWritten..<buffer.count])
                }
            } else if let streamError = outputStream.streamError {
                throw streamError
            }
        }
    }

    // MARK: - Private - Mime Type

    private func mimeTypeForPathExtension(pathExtension: String) -> String {
        if let
            id = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension, nil)?.takeRetainedValue(),
            contentType = UTTypeCopyPreferredTagWithClass(id, kUTTagClassMIMEType)?.takeRetainedValue()
        {
            return contentType as String
        }

        return "application/octet-stream"
    }

    // MARK: - Private - Content Headers

    private func contentHeaders(name name: String) -> [String: String] {
        return ["Content-Disposition": "form-data; name=\"\(name)\""]
    }

    private func contentHeaders(name name: String, mimeType: String) -> [String: String] {
        return [
            "Content-Disposition": "form-data; name=\"\(name)\"",
            "Content-Type": "\(mimeType)"
        ]
    }

    private func contentHeaders(name name: String, fileName: String, mimeType: String) -> [String: String] {
        return [
            "Content-Disposition": "form-data; name=\"\(name)\"; filename=\"\(fileName)\"",
            "Content-Type": "\(mimeType)"
        ]
    }

    // MARK: - Private - Boundary Encoding

    private func initialBoundaryData() -> NSData {
        return BoundaryGenerator.boundaryData(boundaryType: .Initial, boundary: boundary)
    }

    private func encapsulatedBoundaryData() -> NSData {
        return BoundaryGenerator.boundaryData(boundaryType: .Encapsulated, boundary: boundary)
    }

    private func finalBoundaryData() -> NSData {
        return BoundaryGenerator.boundaryData(boundaryType: .Final, boundary: boundary)
    }

    // MARK: - Private - Errors

    private func setBodyPartError(error: NSError) {
        if bodyPartError == nil {
            bodyPartError = error
        }
    }
}


================================================
FILE: Sublime/Pods/Alamofire/Source/NetworkReachabilityManager.swift
================================================
// NetworkReachabilityManager.swift
//
// Copyright (c) 2014–2016 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.

#if !os(watchOS)

import Foundation
import SystemConfiguration

/**
    The `NetworkReachabilityManager` class listens for reachability changes of hosts and addresses for both WWAN and
    WiFi network interfaces.

    Reachability can be used to determine background information about why a network operation failed, or to retry
    network requests when a connection is established. It should not be used to prevent a user from initiating a network
    request, as it's possible that an initial request may be required to establish reachability.
*/
public class NetworkReachabilityManager {
    /**
        Defines the various states of network reachability.

        - Unknown:         It is unknown whether the network is reachable.
        - NotReachable:    The network is not reachable.
        - ReachableOnWWAN: The network is reachable over the WWAN connection.
        - ReachableOnWiFi: The network is reachable over the WiFi connection.
    */
    public enum NetworkReachabilityStatus {
        case Unknown
        case NotReachable
        case Reachable(ConnectionType)
    }

    /**
        Defines the various connection types detected by reachability flags.

        - EthernetOrWiFi: The connection type is either over Ethernet or WiFi.
        - WWAN:           The connection type is a WWAN connection.
    */
    public enum ConnectionType {
        case EthernetOrWiFi
        case WWAN
    }

    /// A closure executed when the network reachability status changes. The closure takes a single argument: the 
    /// network reachability status.
    public typealias Listener = NetworkReachabilityStatus -> Void

    // MARK: - Properties

    /// Whether the network is currently reachable.
    public var isReachable: Bool { return isReachableOnWWAN || isReachableOnEthernetOrWiFi }

    /// Whether the network is currently reachable over the WWAN interface.
    public var isReachableOnWWAN: Bool { return networkReachabilityStatus == .Reachable(.WWAN) }

    /// Whether the network is currently reachable over Ethernet or WiFi interface.
    public var isReachableOnEthernetOrWiFi: Bool { return networkReachabilityStatus == .Reachable(.EthernetOrWiFi) }

    /// The current network reachability status.
    public var networkReachabilityStatus: NetworkReachabilityStatus {
        guard let flags = self.flags else { return .Unknown }
        return networkReachabilityStatusForFlags(flags)
    }

    /// The dispatch queue to execute the `listener` closure on.
    public var listenerQueue: dispatch_queue_t = dispatch_get_main_queue()

    /// A closure executed when the network reachability status changes.
    public var listener: Listener?

    private var flags: SCNetworkReachabilityFlags? {
        var flags = SCNetworkReachabilityFlags()

        if SCNetworkReachabilityGetFlags(reachability, &flags) {
            return flags
        }

        return nil
    }

    private let reachability: SCNetworkReachability
    private var previousFlags: SCNetworkReachabilityFlags

    // MARK: - Initialization

    /**
        Creates a `NetworkReachabilityManager` instance with the specified host.

        - parameter host: The host used to evaluate network reachability.

        - returns: The new `NetworkReachabilityManager` instance.
    */
    public convenience init?(host: String) {
        guard let reachability = SCNetworkReachabilityCreateWithName(nil, host) else { return nil }
        self.init(reachability: reachability)
    }

    /**
        Creates a `NetworkReachabilityManager` instance with the default socket address (`sockaddr_in6`).

        - returns: The new `NetworkReachabilityManager` instance.
     */
    public convenience init?() {
        var address = sockaddr_in6()
        address.sin6_len = UInt8(sizeofValue(address))
        address.sin6_family = sa_family_t(AF_INET6)

        guard let reachability = withUnsafePointer(&address, {
            SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0))
        }) else { return nil }

        self.init(reachability: reachability)
    }

    private init(reachability: SCNetworkReachability) {
        self.reachability = reachability
        self.previousFlags = SCNetworkReachabilityFlags()
    }

    deinit {
        stopListening()
    }

    // MARK: - Listening

    /**
        Starts listening for changes in network reachability status.

        - returns: `true` if listening was started successfully, `false` otherwise.
    */
    public func startListening() -> Bool {
        var context = SCNetworkReachabilityContext(version: 0, info: nil, retain: nil, release: nil, copyDescription: nil)
        context.info = UnsafeMutablePointer(Unmanaged.passUnretained(self).toOpaque())

        let callbackEnabled = SCNetworkReachabilitySetCallback(
            reachability,
            { (_, flags, info) in
                let reachability = Unmanaged<NetworkReachabilityManager>.fromOpaque(COpaquePointer(info)).takeUnretainedValue()
                reachability.notifyListener(flags)
            },
            &context
        )

        let queueEnabled = SCNetworkReachabilitySetDispatchQueue(reachability, listenerQueue)

        dispatch_async(listenerQueue) {
            self.previousFlags = SCNetworkReachabilityFlags()
            self.notifyListener(self.flags ?? SCNetworkReachabilityFlags())
        }

        return callbackEnabled && queueEnabled
    }

    /**
        Stops listening for changes in network reachability status.
    */
    public func stopListening() {
        SCNetworkReachabilitySetCallback(reachability, nil, nil)
        SCNetworkReachabilitySetDispatchQueue(reachability, nil)
    }

    // MARK: - Internal - Listener Notification

    func notifyListener(flags: SCNetworkReachabilityFlags) {
        guard previousFlags != flags else { return }
        previousFlags = flags

        listener?(networkReachabilityStatusForFlags(flags))
    }

    // MARK: - Internal - Network Reachability Status

    func networkReachabilityStatusForFlags(flags: SCNetworkReachabilityFlags) -> NetworkReachabilityStatus {
        guard flags.contains(.Reachable) else { return .NotReachable }

        var networkStatus: NetworkReachabilityStatus = .NotReachable

        if !flags.contains(.ConnectionRequired) { networkStatus = .Reachable(.EthernetOrWiFi) }

        if flags.contains(.ConnectionOnDemand) || flags.contains(.ConnectionOnTraffic) {
            if !flags.contains(.InterventionRequired) { networkStatus = .Reachable(.EthernetOrWiFi) }
        }

        #if os(iOS)
            if flags.contains(.IsWWAN) { networkStatus = .Reachable(.WWAN) }
        #endif

        return networkStatus
    }
}

// MARK: -

extension NetworkReachabilityManager.NetworkReachabilityStatus: Equatable {}

/**
    Returns whether the two network reachability status values are equal.

    - parameter lhs: The left-hand side value to compare.
    - parameter rhs: The right-hand side value to compare.

    - returns: `true` if the two values are equal, `false` otherwise.
*/
public func ==(
    lhs: NetworkReachabilityManager.NetworkReachabilityStatus,
    rhs: NetworkReachabilityManager.NetworkReachabilityStatus)
    -> Bool
{
    switch (lhs, rhs) {
    case (.Unknown, .Unknown):
        return true
    case (.NotReachable, .NotReachable):
        return true
    case let (.Reachable(lhsConnectionType), .Reachable(rhsConnectionType)):
        return lhsConnectionType == rhsConnectionType
    default:
        return false
    }
}

#endif


================================================
FILE: Sublime/Pods/Alamofire/Source/Notifications.swift
================================================
// Notifications.swift
//
// Copyright (c) 2014–2016 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.

import Foundation

/// Contains all the `NSNotification` names posted by Alamofire with descriptions of each notification's payload.
public struct Notifications {
    /// Used as a namespace for all `NSURLSessionTask` related notifications.
    public struct Task {
        /// Notification posted when an `NSURLSessionTask` is resumed. The notification `object` contains the resumed
        /// `NSURLSessionTask`.
        public static let DidResume = "com.alamofire.notifications.task.didResume"

        /// Notification posted when an `NSURLSessionTask` is suspended. The notification `object` contains the 
        /// suspended `NSURLSessionTask`.
        public static let DidSuspend 
Download .txt
gitextract_fjit1hwf/

├── .gitignore
├── LICENSE
├── README.md
├── Sublime/
│   ├── Cycript.framework/
│   │   ├── Cycript
│   │   └── Headers/
│   │       └── Cycript.h
│   ├── Podfile
│   ├── Pods/
│   │   ├── AASquaresLoading/
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   └── Source/
│   │   │       └── AASquaresLoading.swift
│   │   ├── Alamofire/
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   └── Source/
│   │   │       ├── Alamofire.swift
│   │   │       ├── Download.swift
│   │   │       ├── Error.swift
│   │   │       ├── Manager.swift
│   │   │       ├── MultipartFormData.swift
│   │   │       ├── NetworkReachabilityManager.swift
│   │   │       ├── Notifications.swift
│   │   │       ├── ParameterEncoding.swift
│   │   │       ├── Request.swift
│   │   │       ├── Response.swift
│   │   │       ├── ResponseSerialization.swift
│   │   │       ├── Result.swift
│   │   │       ├── ServerTrustPolicy.swift
│   │   │       ├── Stream.swift
│   │   │       ├── Timeline.swift
│   │   │       ├── Upload.swift
│   │   │       └── Validation.swift
│   │   ├── AlamofireRSSParser/
│   │   │   ├── LICENSE
│   │   │   ├── Pod/
│   │   │   │   └── Classes/
│   │   │   │       ├── AlamofireRSSParser.h
│   │   │   │       ├── AlamofireRSSParser.swift
│   │   │   │       ├── RSSFeed.swift
│   │   │   │       └── RSSItem.swift
│   │   │   └── README.md
│   │   ├── CYRTextView/
│   │   │   ├── CYRTextView/
│   │   │   │   ├── CYRLayoutManager.h
│   │   │   │   ├── CYRLayoutManager.m
│   │   │   │   ├── CYRTextStorage.h
│   │   │   │   ├── CYRTextStorage.m
│   │   │   │   ├── CYRTextView.h
│   │   │   │   ├── CYRTextView.m
│   │   │   │   ├── CYRToken.h
│   │   │   │   └── CYRToken.m
│   │   │   ├── LICENSE
│   │   │   └── README.md
│   │   ├── Charts/
│   │   │   ├── Charts/
│   │   │   │   └── Classes/
│   │   │   │       ├── Animation/
│   │   │   │       │   ├── ChartAnimationEasing.swift
│   │   │   │       │   └── ChartAnimator.swift
│   │   │   │       ├── Charts/
│   │   │   │       │   ├── BarChartView.swift
│   │   │   │       │   ├── BarLineChartViewBase.swift
│   │   │   │       │   ├── BubbleChartView.swift
│   │   │   │       │   ├── CandleStickChartView.swift
│   │   │   │       │   ├── ChartViewBase.swift
│   │   │   │       │   ├── CombinedChartView.swift
│   │   │   │       │   ├── HorizontalBarChartView.swift
│   │   │   │       │   ├── LineChartView.swift
│   │   │   │       │   ├── PieChartView.swift
│   │   │   │       │   ├── PieRadarChartViewBase.swift
│   │   │   │       │   ├── RadarChartView.swift
│   │   │   │       │   └── ScatterChartView.swift
│   │   │   │       ├── Components/
│   │   │   │       │   ├── ChartAxisBase.swift
│   │   │   │       │   ├── ChartComponentBase.swift
│   │   │   │       │   ├── ChartLegend.swift
│   │   │   │       │   ├── ChartLimitLine.swift
│   │   │   │       │   ├── ChartMarker.swift
│   │   │   │       │   ├── ChartXAxis.swift
│   │   │   │       │   └── ChartYAxis.swift
│   │   │   │       ├── Data/
│   │   │   │       │   ├── Implementations/
│   │   │   │       │   │   ├── ChartBaseDataSet.swift
│   │   │   │       │   │   └── Standard/
│   │   │   │       │   │       ├── BarChartData.swift
│   │   │   │       │   │       ├── BarChartDataEntry.swift
│   │   │   │       │   │       ├── BarChartDataSet.swift
│   │   │   │       │   │       ├── BarLineScatterCandleBubbleChartData.swift
│   │   │   │       │   │       ├── BarLineScatterCandleBubbleChartDataSet.swift
│   │   │   │       │   │       ├── BubbleChartData.swift
│   │   │   │       │   │       ├── BubbleChartDataEntry.swift
│   │   │   │       │   │       ├── BubbleChartDataSet.swift
│   │   │   │       │   │       ├── CandleChartData.swift
│   │   │   │       │   │       ├── CandleChartDataEntry.swift
│   │   │   │       │   │       ├── CandleChartDataSet.swift
│   │   │   │       │   │       ├── ChartData.swift
│   │   │   │       │   │       ├── ChartDataEntry.swift
│   │   │   │       │   │       ├── ChartDataSet.swift
│   │   │   │       │   │       ├── CombinedChartData.swift
│   │   │   │       │   │       ├── LineChartData.swift
│   │   │   │       │   │       ├── LineChartDataSet.swift
│   │   │   │       │   │       ├── LineRadarChartDataSet.swift
│   │   │   │       │   │       ├── LineScatterCandleRadarChartDataSet.swift
│   │   │   │       │   │       ├── PieChartData.swift
│   │   │   │       │   │       ├── PieChartDataSet.swift
│   │   │   │       │   │       ├── RadarChartData.swift
│   │   │   │       │   │       ├── RadarChartDataSet.swift
│   │   │   │       │   │       ├── ScatterChartData.swift
│   │   │   │       │   │       └── ScatterChartDataSet.swift
│   │   │   │       │   └── Interfaces/
│   │   │   │       │       ├── IBarChartDataSet.swift
│   │   │   │       │       ├── IBarLineScatterCandleBubbleChartDataSet.swift
│   │   │   │       │       ├── IBubbleChartDataSet.swift
│   │   │   │       │       ├── ICandleChartDataSet.swift
│   │   │   │       │       ├── IChartDataSet.swift
│   │   │   │       │       ├── ILineChartDataSet.swift
│   │   │   │       │       ├── ILineRadarChartDataSet.swift
│   │   │   │       │       ├── ILineScatterCandleRadarChartDataSet.swift
│   │   │   │       │       ├── IPieChartDataSet.swift
│   │   │   │       │       ├── IRadarChartDataSet.swift
│   │   │   │       │       └── IScatterChartDataSet.swift
│   │   │   │       ├── Filters/
│   │   │   │       │   ├── ChartDataApproximatorFilter.swift
│   │   │   │       │   └── ChartDataBaseFilter.swift
│   │   │   │       ├── Formatters/
│   │   │   │       │   ├── ChartDefaultFillFormatter.swift
│   │   │   │       │   ├── ChartDefaultXAxisValueFormatter.swift
│   │   │   │       │   ├── ChartFillFormatter.swift
│   │   │   │       │   └── ChartXAxisValueFormatter.swift
│   │   │   │       ├── Highlight/
│   │   │   │       │   ├── BarChartHighlighter.swift
│   │   │   │       │   ├── ChartHighlight.swift
│   │   │   │       │   ├── ChartHighlighter.swift
│   │   │   │       │   ├── ChartRange.swift
│   │   │   │       │   ├── CombinedHighlighter.swift
│   │   │   │       │   └── HorizontalBarChartHighlighter.swift
│   │   │   │       ├── Interfaces/
│   │   │   │       │   ├── BarChartDataProvider.swift
│   │   │   │       │   ├── BarLineScatterCandleBubbleChartDataProvider.swift
│   │   │   │       │   ├── BubbleChartDataProvider.swift
│   │   │   │       │   ├── CandleChartDataProvider.swift
│   │   │   │       │   ├── ChartDataProvider.swift
│   │   │   │       │   ├── LineChartDataProvider.swift
│   │   │   │       │   └── ScatterChartDataProvider.swift
│   │   │   │       ├── Jobs/
│   │   │   │       │   ├── AnimatedMoveViewJob.swift
│   │   │   │       │   ├── AnimatedViewPortJob.swift
│   │   │   │       │   ├── AnimatedZoomViewJob.swift
│   │   │   │       │   ├── ChartViewPortJob.swift
│   │   │   │       │   ├── MoveChartViewJob.swift
│   │   │   │       │   └── ZoomChartViewJob.swift
│   │   │   │       ├── Renderers/
│   │   │   │       │   ├── BarChartRenderer.swift
│   │   │   │       │   ├── BubbleChartRenderer.swift
│   │   │   │       │   ├── CandleStickChartRenderer.swift
│   │   │   │       │   ├── ChartAxisRendererBase.swift
│   │   │   │       │   ├── ChartDataRendererBase.swift
│   │   │   │       │   ├── ChartLegendRenderer.swift
│   │   │   │       │   ├── ChartRendererBase.swift
│   │   │   │       │   ├── ChartXAxisRenderer.swift
│   │   │   │       │   ├── ChartXAxisRendererBarChart.swift
│   │   │   │       │   ├── ChartXAxisRendererHorizontalBarChart.swift
│   │   │   │       │   ├── ChartXAxisRendererRadarChart.swift
│   │   │   │       │   ├── ChartYAxisRenderer.swift
│   │   │   │       │   ├── ChartYAxisRendererHorizontalBarChart.swift
│   │   │   │       │   ├── ChartYAxisRendererRadarChart.swift
│   │   │   │       │   ├── CombinedChartRenderer.swift
│   │   │   │       │   ├── HorizontalBarChartRenderer.swift
│   │   │   │       │   ├── LineChartRenderer.swift
│   │   │   │       │   ├── LineRadarChartRenderer.swift
│   │   │   │       │   ├── LineScatterCandleRadarChartRenderer.swift
│   │   │   │       │   ├── PieChartRenderer.swift
│   │   │   │       │   ├── RadarChartRenderer.swift
│   │   │   │       │   └── ScatterChartRenderer.swift
│   │   │   │       └── Utils/
│   │   │   │           ├── ChartColorTemplates.swift
│   │   │   │           ├── ChartFill.swift
│   │   │   │           ├── ChartPlatform.swift
│   │   │   │           ├── ChartSelectionDetail.swift
│   │   │   │           ├── ChartTransformer.swift
│   │   │   │           ├── ChartTransformerHorizontalBarChart.swift
│   │   │   │           ├── ChartUtils.swift
│   │   │   │           └── ChartViewPortHandler.swift
│   │   │   ├── LICENSE
│   │   │   └── README.md
│   │   ├── DGElasticPullToRefresh/
│   │   │   ├── DGElasticPullToRefresh/
│   │   │   │   ├── DGElasticPullToRefreshConstants.swift
│   │   │   │   ├── DGElasticPullToRefreshExtensions.swift
│   │   │   │   ├── DGElasticPullToRefreshLoadingView.swift
│   │   │   │   ├── DGElasticPullToRefreshLoadingViewCircle.swift
│   │   │   │   └── DGElasticPullToRefreshView.swift
│   │   │   ├── LICENSE
│   │   │   └── README.md
│   │   ├── EZAudio/
│   │   │   ├── EZAudio/
│   │   │   │   ├── AEFloatConverter.h
│   │   │   │   ├── AEFloatConverter.m
│   │   │   │   ├── EZAudio.h
│   │   │   │   ├── EZAudio.m
│   │   │   │   ├── EZAudioFile.h
│   │   │   │   ├── EZAudioFile.m
│   │   │   │   ├── EZAudioPlayer.h
│   │   │   │   ├── EZAudioPlayer.m
│   │   │   │   ├── EZAudioPlot.h
│   │   │   │   ├── EZAudioPlot.m
│   │   │   │   ├── EZAudioPlotGL.h
│   │   │   │   ├── EZAudioPlotGL.m
│   │   │   │   ├── EZAudioPlotGLKViewController.h
│   │   │   │   ├── EZAudioPlotGLKViewController.m
│   │   │   │   ├── EZMicrophone.h
│   │   │   │   ├── EZMicrophone.m
│   │   │   │   ├── EZOutput.h
│   │   │   │   ├── EZOutput.m
│   │   │   │   ├── EZPlot.h
│   │   │   │   ├── EZPlot.m
│   │   │   │   ├── EZRecorder.h
│   │   │   │   ├── EZRecorder.m
│   │   │   │   ├── TPCircularBuffer.c
│   │   │   │   └── TPCircularBuffer.h
│   │   │   ├── LICENSE
│   │   │   └── README.md
│   │   ├── Gifu/
│   │   │   ├── Carthage/
│   │   │   │   └── Checkouts/
│   │   │   │       └── Runes/
│   │   │   │           └── Source/
│   │   │   │               └── Runes.swift
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   └── Source/
│   │   │       ├── AnimatableImageView.swift
│   │   │       ├── AnimatedFrame.swift
│   │   │       ├── Animator.swift
│   │   │       ├── ArrayExtension.swift
│   │   │       ├── CGSizeExtension.swift
│   │   │       ├── FunctionalHelpers.swift
│   │   │       ├── Gifu.h
│   │   │       ├── ImageSourceHelpers.swift
│   │   │       └── UIImageExtension.swift
│   │   ├── NMSSH/
│   │   │   ├── LICENSE
│   │   │   ├── NMSSH/
│   │   │   │   ├── Config/
│   │   │   │   │   ├── NMSSH+Protected.h
│   │   │   │   │   ├── NMSSHLogger.h
│   │   │   │   │   ├── NMSSHLogger.m
│   │   │   │   │   ├── socket_helper.h
│   │   │   │   │   └── socket_helper.m
│   │   │   │   ├── NMSFTP.h
│   │   │   │   ├── NMSFTP.m
│   │   │   │   ├── NMSFTPFile.h
│   │   │   │   ├── NMSFTPFile.m
│   │   │   │   ├── NMSSH.h
│   │   │   │   ├── NMSSHChannel.h
│   │   │   │   ├── NMSSHChannel.m
│   │   │   │   ├── NMSSHConfig.h
│   │   │   │   ├── NMSSHConfig.m
│   │   │   │   ├── NMSSHHostConfig.h
│   │   │   │   ├── NMSSHHostConfig.m
│   │   │   │   ├── NMSSHSession.h
│   │   │   │   ├── NMSSHSession.m
│   │   │   │   └── Protocols/
│   │   │   │       ├── NMSSHChannelDelegate.h
│   │   │   │       └── NMSSHSessionDelegate.h
│   │   │   ├── NMSSH-iOS/
│   │   │   │   ├── Libraries/
│   │   │   │   │   ├── include/
│   │   │   │   │   │   └── libssh2/
│   │   │   │   │   │       ├── libssh2.h
│   │   │   │   │   │       ├── libssh2_publickey.h
│   │   │   │   │   │       └── libssh2_sftp.h
│   │   │   │   │   └── lib/
│   │   │   │   │       ├── libcrypto.a
│   │   │   │   │       ├── libssh2.a
│   │   │   │   │       └── libssl.a
│   │   │   │   └── NMSSH.h
│   │   │   └── README.md
│   │   ├── Pods.xcodeproj/
│   │   │   └── project.pbxproj
│   │   ├── RongCloudIMKit/
│   │   │   └── Rong_Cloud_iOS_IMKit_SDK_v2_4_9_dev/
│   │   │       ├── Emoji.plist
│   │   │       ├── RongCloud.bundle/
│   │   │       │   ├── sms-received.caf
│   │   │       │   └── unicode_to_hanyu_pinyin.txt
│   │   │       ├── RongIMKit.framework/
│   │   │       │   ├── Headers/
│   │   │       │   │   ├── RCAttributedLabel.h
│   │   │       │   │   ├── RCBaseViewController.h
│   │   │       │   │   ├── RCChatSessionInputBarControl.h
│   │   │       │   │   ├── RCContentView.h
│   │   │       │   │   ├── RCConversationBaseCell.h
│   │   │       │   │   ├── RCConversationCell.h
│   │   │       │   │   ├── RCConversationListViewController.h
│   │   │       │   │   ├── RCConversationModel.h
│   │   │       │   │   ├── RCConversationSettingTableViewController.h
│   │   │       │   │   ├── RCConversationSettingTableViewHeader.h
│   │   │       │   │   ├── RCConversationViewController.h
│   │   │       │   │   ├── RCEmojiBoardView.h
│   │   │       │   │   ├── RCIM.h
│   │   │       │   │   ├── RCImageMessageCell.h
│   │   │       │   │   ├── RCImageMessageProgressView.h
│   │   │       │   │   ├── RCImagePreviewController.h
│   │   │       │   │   ├── RCKitUtility.h
│   │   │       │   │   ├── RCLocationMessageCell.h
│   │   │       │   │   ├── RCLocationPickerViewController.h
│   │   │       │   │   ├── RCLocationViewController.h
│   │   │       │   │   ├── RCMessageBaseCell.h
│   │   │       │   │   ├── RCMessageBubbleTipView.h
│   │   │       │   │   ├── RCMessageCell.h
│   │   │       │   │   ├── RCMessageCellDelegate.h
│   │   │       │   │   ├── RCMessageCellNotificationModel.h
│   │   │       │   │   ├── RCMessageModel.h
│   │   │       │   │   ├── RCPluginBoardView.h
│   │   │       │   │   ├── RCPublicServiceChatViewController.h
│   │   │       │   │   ├── RCPublicServiceListViewController.h
│   │   │       │   │   ├── RCPublicServiceProfileViewController.h
│   │   │       │   │   ├── RCPublicServiceSearchViewController.h
│   │   │       │   │   ├── RCRichContentMessageCell.h
│   │   │       │   │   ├── RCSettingViewController.h
│   │   │       │   │   ├── RCTextMessageCell.h
│   │   │       │   │   ├── RCTextView.h
│   │   │       │   │   ├── RCThemeDefine.h
│   │   │       │   │   ├── RCTipLabel.h
│   │   │       │   │   ├── RCTipMessageCell.h
│   │   │       │   │   ├── RCUnknownMessageCell.h
│   │   │       │   │   ├── RCVoiceMessageCell.h
│   │   │       │   │   └── RongIMKit.h
│   │   │       │   ├── Info.plist
│   │   │       │   └── RongIMKit
│   │   │       ├── RongIMLib.framework/
│   │   │       │   ├── Headers/
│   │   │       │   │   ├── RCAMRDataConverter.h
│   │   │       │   │   ├── RCChatRoomInfo.h
│   │   │       │   │   ├── RCChatRoomMemberInfo.h
│   │   │       │   │   ├── RCCommandMessage.h
│   │   │       │   │   ├── RCCommandNotificationMessage.h
│   │   │       │   │   ├── RCContactNotificationMessage.h
│   │   │       │   │   ├── RCConversation.h
│   │   │       │   │   ├── RCDiscussion.h
│   │   │       │   │   ├── RCDiscussionNotificationMessage.h
│   │   │       │   │   ├── RCGroup.h
│   │   │       │   │   ├── RCGroupNotificationMessage.h
│   │   │       │   │   ├── RCHandShakeMessage.h
│   │   │       │   │   ├── RCIMClient.h
│   │   │       │   │   ├── RCImageMessage.h
│   │   │       │   │   ├── RCInformationNotificationMessage.h
│   │   │       │   │   ├── RCLocationMessage.h
│   │   │       │   │   ├── RCMessage.h
│   │   │       │   │   ├── RCMessageContent.h
│   │   │       │   │   ├── RCMessageContentView.h
│   │   │       │   │   ├── RCProfileNotificationMessage.h
│   │   │       │   │   ├── RCPublicServiceCommandMessage.h
│   │   │       │   │   ├── RCPublicServiceMenu.h
│   │   │       │   │   ├── RCPublicServiceMenuItem.h
│   │   │       │   │   ├── RCPublicServiceMultiRichContentMessage.h
│   │   │       │   │   ├── RCPublicServiceProfile.h
│   │   │       │   │   ├── RCPublicServiceRichContentMessage.h
│   │   │       │   │   ├── RCRealTimeLocationEndMessage.h
│   │   │       │   │   ├── RCRealTimeLocationManager.h
│   │   │       │   │   ├── RCRealTimeLocationStartMessage.h
│   │   │       │   │   ├── RCRichContentItem.h
│   │   │       │   │   ├── RCRichContentMessage.h
│   │   │       │   │   ├── RCStatusDefine.h
│   │   │       │   │   ├── RCStatusMessage.h
│   │   │       │   │   ├── RCSuspendMessage.h
│   │   │       │   │   ├── RCTextMessage.h
│   │   │       │   │   ├── RCUnknownMessage.h
│   │   │       │   │   ├── RCUploadImageStatusListener.h
│   │   │       │   │   ├── RCUserInfo.h
│   │   │       │   │   ├── RCUserTypingStatus.h
│   │   │       │   │   ├── RCUtilities.h
│   │   │       │   │   ├── RCVoiceMessage.h
│   │   │       │   │   ├── RCWatchKitStatusDelegate.h
│   │   │       │   │   ├── RongIMLib.h
│   │   │       │   │   ├── interf_dec.h
│   │   │       │   │   └── interf_enc.h
│   │   │       │   ├── Info.plist
│   │   │       │   ├── RCConfig.plist
│   │   │       │   └── RongIMLib
│   │   │       ├── en.lproj/
│   │   │       │   └── RongCloudKit.strings
│   │   │       ├── libopencore-amrnb.a
│   │   │       └── zh-Hans.lproj/
│   │   │           └── RongCloudKit.strings
│   │   ├── SJCSimplePDFView/
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   └── SJCSimplePDFView/
│   │   │       ├── SJCSimplePDFView.h
│   │   │       └── SJCSimplePDFView.m
│   │   ├── SSZipArchive/
│   │   │   ├── LICENSE.txt
│   │   │   ├── README.md
│   │   │   └── SSZipArchive/
│   │   │       ├── Common.h
│   │   │       ├── SSZipArchive.h
│   │   │       ├── SSZipArchive.m
│   │   │       ├── ZipArchive.h
│   │   │       ├── aes/
│   │   │       │   ├── aes.h
│   │   │       │   ├── aes_via_ace.h
│   │   │       │   ├── aescrypt.c
│   │   │       │   ├── aeskey.c
│   │   │       │   ├── aesopt.h
│   │   │       │   ├── aestab.c
│   │   │       │   ├── aestab.h
│   │   │       │   ├── brg_endian.h
│   │   │       │   ├── brg_types.h
│   │   │       │   ├── entropy.c
│   │   │       │   ├── entropy.h
│   │   │       │   ├── fileenc.c
│   │   │       │   ├── fileenc.h
│   │   │       │   ├── hmac.c
│   │   │       │   ├── hmac.h
│   │   │       │   ├── prng.c
│   │   │       │   ├── prng.h
│   │   │       │   ├── pwd2key.c
│   │   │       │   ├── pwd2key.h
│   │   │       │   ├── sha1.c
│   │   │       │   └── sha1.h
│   │   │       └── minizip/
│   │   │           ├── crypt.h
│   │   │           ├── ioapi.c
│   │   │           ├── ioapi.h
│   │   │           ├── mztools.c
│   │   │           ├── mztools.h
│   │   │           ├── unzip.c
│   │   │           ├── unzip.h
│   │   │           ├── zip.c
│   │   │           └── zip.h
│   │   ├── Swifter/
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   └── Sources/
│   │   │       ├── DemoServer.swift
│   │   │       ├── File.swift
│   │   │       ├── HttpHandlers+Files.swift
│   │   │       ├── HttpHandlers+WebSockets.swift
│   │   │       ├── HttpHandlers.swift
│   │   │       ├── HttpParser.swift
│   │   │       ├── HttpRequest.swift
│   │   │       ├── HttpResponse.swift
│   │   │       ├── HttpRouter.swift
│   │   │       ├── HttpServer.swift
│   │   │       ├── HttpServerIO.swift
│   │   │       ├── Socket.swift
│   │   │       ├── String+BASE64.swift
│   │   │       ├── String+Misc.swift
│   │   │       └── String+SHA1.swift
│   │   ├── SwiftyJSON/
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   └── Source/
│   │   │       └── SwiftyJSON.swift
│   │   ├── Target Support Files/
│   │   │   ├── AASquaresLoading/
│   │   │   │   ├── AASquaresLoading-dummy.m
│   │   │   │   ├── AASquaresLoading-prefix.pch
│   │   │   │   ├── AASquaresLoading-umbrella.h
│   │   │   │   ├── AASquaresLoading.modulemap
│   │   │   │   ├── AASquaresLoading.xcconfig
│   │   │   │   └── Info.plist
│   │   │   ├── Alamofire/
│   │   │   │   ├── Alamofire-dummy.m
│   │   │   │   ├── Alamofire-prefix.pch
│   │   │   │   ├── Alamofire-umbrella.h
│   │   │   │   ├── Alamofire.modulemap
│   │   │   │   ├── Alamofire.xcconfig
│   │   │   │   └── Info.plist
│   │   │   ├── AlamofireRSSParser/
│   │   │   │   ├── AlamofireRSSParser-dummy.m
│   │   │   │   ├── AlamofireRSSParser-prefix.pch
│   │   │   │   ├── AlamofireRSSParser-umbrella.h
│   │   │   │   ├── AlamofireRSSParser.modulemap
│   │   │   │   ├── AlamofireRSSParser.xcconfig
│   │   │   │   └── Info.plist
│   │   │   ├── CYRTextView/
│   │   │   │   ├── CYRTextView-dummy.m
│   │   │   │   ├── CYRTextView-prefix.pch
│   │   │   │   ├── CYRTextView-umbrella.h
│   │   │   │   ├── CYRTextView.modulemap
│   │   │   │   ├── CYRTextView.xcconfig
│   │   │   │   └── Info.plist
│   │   │   ├── Charts/
│   │   │   │   ├── Charts-dummy.m
│   │   │   │   ├── Charts-prefix.pch
│   │   │   │   ├── Charts-umbrella.h
│   │   │   │   ├── Charts.modulemap
│   │   │   │   ├── Charts.xcconfig
│   │   │   │   └── Info.plist
│   │   │   ├── DGElasticPullToRefresh/
│   │   │   │   ├── DGElasticPullToRefresh-dummy.m
│   │   │   │   ├── DGElasticPullToRefresh-prefix.pch
│   │   │   │   ├── DGElasticPullToRefresh-umbrella.h
│   │   │   │   ├── DGElasticPullToRefresh.modulemap
│   │   │   │   ├── DGElasticPullToRefresh.xcconfig
│   │   │   │   └── Info.plist
│   │   │   ├── EZAudio/
│   │   │   │   ├── EZAudio-dummy.m
│   │   │   │   ├── EZAudio-prefix.pch
│   │   │   │   ├── EZAudio-umbrella.h
│   │   │   │   ├── EZAudio.modulemap
│   │   │   │   ├── EZAudio.xcconfig
│   │   │   │   └── Info.plist
│   │   │   ├── Gifu/
│   │   │   │   ├── Gifu-dummy.m
│   │   │   │   ├── Gifu-prefix.pch
│   │   │   │   ├── Gifu-umbrella.h
│   │   │   │   ├── Gifu.modulemap
│   │   │   │   ├── Gifu.xcconfig
│   │   │   │   └── Info.plist
│   │   │   ├── NMSSH/
│   │   │   │   ├── Info.plist
│   │   │   │   ├── NMSSH-dummy.m
│   │   │   │   ├── NMSSH-prefix.pch
│   │   │   │   ├── NMSSH-umbrella.h
│   │   │   │   ├── NMSSH.modulemap
│   │   │   │   └── NMSSH.xcconfig
│   │   │   ├── Pods/
│   │   │   │   ├── Info.plist
│   │   │   │   ├── Pods-acknowledgements.markdown
│   │   │   │   ├── Pods-acknowledgements.plist
│   │   │   │   ├── Pods-dummy.m
│   │   │   │   ├── Pods-frameworks.sh
│   │   │   │   ├── Pods-resources.sh
│   │   │   │   ├── Pods-umbrella.h
│   │   │   │   ├── Pods.debug.xcconfig
│   │   │   │   ├── Pods.modulemap
│   │   │   │   └── Pods.release.xcconfig
│   │   │   ├── SJCSimplePDFView/
│   │   │   │   ├── Info.plist
│   │   │   │   ├── SJCSimplePDFView-dummy.m
│   │   │   │   ├── SJCSimplePDFView-prefix.pch
│   │   │   │   ├── SJCSimplePDFView-umbrella.h
│   │   │   │   ├── SJCSimplePDFView.modulemap
│   │   │   │   └── SJCSimplePDFView.xcconfig
│   │   │   ├── SSZipArchive/
│   │   │   │   ├── Info.plist
│   │   │   │   ├── SSZipArchive-dummy.m
│   │   │   │   ├── SSZipArchive-prefix.pch
│   │   │   │   ├── SSZipArchive-umbrella.h
│   │   │   │   ├── SSZipArchive.modulemap
│   │   │   │   └── SSZipArchive.xcconfig
│   │   │   ├── Swifter/
│   │   │   │   ├── Info.plist
│   │   │   │   ├── Swifter-dummy.m
│   │   │   │   ├── Swifter-prefix.pch
│   │   │   │   ├── Swifter-umbrella.h
│   │   │   │   ├── Swifter.modulemap
│   │   │   │   └── Swifter.xcconfig
│   │   │   ├── SwiftyJSON/
│   │   │   │   ├── Info.plist
│   │   │   │   ├── SwiftyJSON-dummy.m
│   │   │   │   ├── SwiftyJSON-prefix.pch
│   │   │   │   ├── SwiftyJSON-umbrella.h
│   │   │   │   ├── SwiftyJSON.modulemap
│   │   │   │   └── SwiftyJSON.xcconfig
│   │   │   ├── ZLMusicFlowWaveView/
│   │   │   │   ├── Info.plist
│   │   │   │   ├── ZLMusicFlowWaveView-dummy.m
│   │   │   │   ├── ZLMusicFlowWaveView-prefix.pch
│   │   │   │   ├── ZLMusicFlowWaveView-umbrella.h
│   │   │   │   ├── ZLMusicFlowWaveView.modulemap
│   │   │   │   └── ZLMusicFlowWaveView.xcconfig
│   │   │   └── ZLSinusWaveView/
│   │   │       ├── Info.plist
│   │   │       ├── ZLSinusWaveView-dummy.m
│   │   │       ├── ZLSinusWaveView-prefix.pch
│   │   │       ├── ZLSinusWaveView-umbrella.h
│   │   │       ├── ZLSinusWaveView.modulemap
│   │   │       └── ZLSinusWaveView.xcconfig
│   │   ├── ZLMusicFlowWaveView/
│   │   │   ├── LICENSE
│   │   │   ├── README.md
│   │   │   └── ZLMusicFlowWaveView/
│   │   │       ├── ZLMusicFlowDecorativeView.h
│   │   │       ├── ZLMusicFlowDecorativeView.m
│   │   │       ├── ZLMusicFlowWaveView.h
│   │   │       └── ZLMusicFlowWaveView.m
│   │   └── ZLSinusWaveView/
│   │       ├── LICENSE
│   │       ├── README.md
│   │       └── ZLSinusWaveView/
│   │           ├── ZLSinusWaveView.h
│   │           └── ZLSinusWaveView.m
│   ├── Sublime/
│   │   ├── AppDelegate.swift
│   │   ├── AppInfoViewController.swift
│   │   ├── Assets.xcassets/
│   │   │   ├── AppIcon.appiconset/
│   │   │   │   └── Contents.json
│   │   │   ├── Contents.json
│   │   │   ├── Repositories.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_douban_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_facebook_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_instagram.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_line_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_more_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_pinterest_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_qq_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_qzone_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_sina_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_twitter_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_wechat_session_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Share_wechat_timeline_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── Stars.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── add_friend_icon_addfriend.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── add_friend_icon_group.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── add_friend_icon_offical.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── app_small_icon.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── code_share_btn.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── comment.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── config_cycript.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── config_full_screen_code_reading.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── config_show_hidden_file.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── donate.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── donate1.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── donate2.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── donate3.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── donate4.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── donate5.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── donate_weixin.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── explore_codezZ.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_3fr.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_7z.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_aac.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_ai.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_asc.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_asp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_avi.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_bas.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_cls.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_code_share.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_cpp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_cr2.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_cs.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_css.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_csv.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_dll.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_dmg.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_dng.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_eps.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_exe.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_fff.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_flv.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_gif.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_gis.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_gpx.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_html.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_j2k.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_jp2.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_jpg.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_js.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_jsp.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_kml.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_kmz.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_mov.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_mp3.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_mp4.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_mpg.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_nef.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_nmea.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_ogg.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_osm.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_otf.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_pdf.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_png.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_ppt.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_pptx.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_ps.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_psd.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_py.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_rar.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_raw.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_svg.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_tar.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_tif.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_ttf.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_txt.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_unknown.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_vb.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_vbs.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_wav.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_wma.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_woff.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_word.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_wsh.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_xaml.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_xls.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_xml.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── file_zip.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── folder.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── function_rss.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── function_scan.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── gist_bg.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── github_avatar.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── github_folder.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── github_fork.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── github_login.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── github_star.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── github_watcher.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── open_safari.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── pdf_continuous.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── pdf_horizontal.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── pdf_vertical.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── repo_download.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── right_arrow.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_cache.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_configure.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_donate.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_feedback.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_github.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_license.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_reading.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_server.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_ssh.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_storage.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_sublime.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── setting_themes.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ssh_done.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ssh_keyboard.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ssh_password.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ssh_port.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ssh_server.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── ssh_user.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── tab_icon_explore.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── tab_icon_files.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── tab_icon_setting.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── user_author.imageset/
│   │   │   │   └── Contents.json
│   │   │   ├── user_info.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── user_robot.imageset/
│   │   │       └── Contents.json
│   │   ├── Base.lproj/
│   │   │   ├── LaunchScreen.storyboard
│   │   │   └── Main.storyboard
│   │   ├── BoardModel.swift
│   │   ├── BoardView.swift
│   │   ├── Code.swift
│   │   ├── CodeEngine.swift
│   │   ├── CodeViewController.swift
│   │   ├── ConfigTableViewController.swift
│   │   ├── Configure.swift
│   │   ├── Constant.swift
│   │   ├── ContactInfoViewController.swift
│   │   ├── ContactTableViewController.swift
│   │   ├── CustomServer.swift
│   │   ├── DonateViewController.swift
│   │   ├── ExploreTableViewController.swift
│   │   ├── FolderTableViewController.swift
│   │   ├── Gist.swift
│   │   ├── GistTable.swift
│   │   ├── GithubAccountTableViewController.swift
│   │   ├── GithubTableViewController.swift
│   │   ├── Global.swift
│   │   ├── GomokuAI.swift
│   │   ├── GomokuViewController.swift
│   │   ├── HTTPServerTableViewController.swift
│   │   ├── ImageFileViewController.swift
│   │   ├── ImagePageViewController.swift
│   │   ├── Info.plist
│   │   ├── LICENSE/
│   │   │   ├── AASquaresLoading.LICENSE
│   │   │   ├── Alamofire.LICENSE
│   │   │   ├── AlamofireRSSParser.LICENSE
│   │   │   ├── CYRTextView.LICENSE
│   │   │   ├── Charts.LICENSE
│   │   │   ├── DGElasticPullToRefresh.LICENSE
│   │   │   ├── EZAudio.LICENSE
│   │   │   ├── Gifu.LICENSE
│   │   │   ├── MobileVLCKit.LICENSE
│   │   │   ├── NMSSH.LICENSE
│   │   │   ├── RongCloudIMKit.LICENSE
│   │   │   ├── SJCSimplePDFView.LICENSE
│   │   │   ├── SSZipArchive.LICENSE
│   │   │   ├── Swifter.LICENSE
│   │   │   ├── SwiftyJSON.LICENSE
│   │   │   ├── ZLMusicFlowWaveView.LICENSE
│   │   │   └── ZLSinusWaveView.LICENSE
│   │   ├── LicenseTableViewController.swift
│   │   ├── LogoView.xib
│   │   ├── MainTableViewController.swift
│   │   ├── MessageListViewController.swift
│   │   ├── MusicViewController.swift
│   │   ├── NewFileViewController.swift
│   │   ├── PDFViewController.swift
│   │   ├── RCChatViewController.swift
│   │   ├── RSSItemListTableViewController.swift
│   │   ├── RSSListTableViewController.swift
│   │   ├── ReadingViewController.swift
│   │   ├── Repo.swift
│   │   ├── ReposTableViewController.swift
│   │   ├── SDK/
│   │   │   └── Weixin/
│   │   │       ├── WXApi.h
│   │   │       ├── WXApiObject.h
│   │   │       ├── WechatAuthSDK.h
│   │   │       └── libWeChatSDK.a
│   │   ├── SSHAddNewServerViewController.swift
│   │   ├── SSHServerListTableViewController.swift
│   │   ├── SSHTerminalViewController.swift
│   │   ├── SettingTableViewController.swift
│   │   ├── StorageViewController.swift
│   │   ├── Sublime-Bridging-Header.h
│   │   ├── SublimeSafari.swift
│   │   ├── SublimeServer.swift
│   │   ├── Utils/
│   │   │   ├── ActionSheet.swift
│   │   │   ├── Device.swift
│   │   │   ├── Extension/
│   │   │   │   ├── Array.swift
│   │   │   │   ├── Date.swift
│   │   │   │   ├── Number.swift
│   │   │   │   ├── Operation.swift
│   │   │   │   ├── Other.swift
│   │   │   │   ├── String.swift
│   │   │   │   ├── UIApplication.swift
│   │   │   │   ├── UIColor.swift
│   │   │   │   ├── UIImage.swift
│   │   │   │   ├── UIImageView.swift
│   │   │   │   ├── UITableView.swift
│   │   │   │   ├── UITextView.swift
│   │   │   │   ├── UIView.swift
│   │   │   │   └── UIViewController.swift
│   │   │   ├── File.swift
│   │   │   ├── Function.swift
│   │   │   ├── Github.swift
│   │   │   ├── Log.swift
│   │   │   ├── Network.swift
│   │   │   ├── NumberedTextView.swift
│   │   │   ├── Obj-C/
│   │   │   │   ├── MusicWave.h
│   │   │   │   ├── MusicWave.m
│   │   │   │   ├── ObjC.h
│   │   │   │   └── ObjC.m
│   │   │   ├── Plist.swift
│   │   │   ├── PopupMenu.swift
│   │   │   ├── QRCode.swift
│   │   │   ├── QRCodeReader.swift
│   │   │   ├── RCIM.swift
│   │   │   ├── RearrangeTable.swift
│   │   │   ├── ShareToWeixin.swift
│   │   │   ├── SublimeTable.swift
│   │   │   ├── UnitTest.swift
│   │   │   └── VideoPlayerTimeView.swift
│   │   ├── VideoViewController.swift
│   │   ├── Web/
│   │   │   ├── 404.html
│   │   │   ├── README.txt
│   │   │   ├── index.html
│   │   │   ├── js/
│   │   │   │   └── index.js
│   │   │   └── license.txt
│   │   ├── WebServerLog.swift
│   │   ├── en.lproj/
│   │   │   └── Localizable.strings
│   │   ├── zh-Hans.lproj/
│   │   │   └── Localizable.strings
│   │   └── 山外小楼夜听雨.m4a
│   ├── Sublime.xcodeproj/
│   │   ├── project.pbxproj
│   │   └── project.xcworkspace/
│   │       └── contents.xcworkspacedata
│   └── Sublime.xcworkspace/
│       └── contents.xcworkspacedata
└── Sublime_icons.sketch
Download .txt
SYMBOL INDEX (337 symbols across 42 files)

FILE: Sublime/Pods/EZAudio/EZAudio/EZAudioPlot.h
  function interface (line 48) | interface EZAudioPlot : EZPlot

FILE: Sublime/Pods/EZAudio/EZAudio/EZAudioPlotGL.h
  type EZAudioPlotGLPoint (line 58) | typedef struct {

FILE: Sublime/Pods/EZAudio/EZAudio/EZPlot.h
  type EZPlotTypeBuffer (line 34) | typedef NS_ENUM(NSInteger,EZPlotType){

FILE: Sublime/Pods/EZAudio/EZAudio/EZRecorder.h
  type EZRecorderFileTypeAIFF (line 37) | typedef NS_ENUM(NSInteger, EZRecorderFileType)

FILE: Sublime/Pods/EZAudio/EZAudio/TPCircularBuffer.c
  function _reportResult (line 35) | static inline bool _reportResult(kern_return_t result, const char *opera...
  function TPCircularBufferInit (line 43) | bool TPCircularBufferInit(TPCircularBuffer *buffer, int length) {
  function TPCircularBufferCleanup (line 126) | void TPCircularBufferCleanup(TPCircularBuffer *buffer) {
  function TPCircularBufferClear (line 131) | void TPCircularBufferClear(TPCircularBuffer *buffer) {

FILE: Sublime/Pods/EZAudio/EZAudio/TPCircularBuffer.h
  type TPCircularBuffer (line 53) | typedef struct {
  function TPCircularBufferConsume (line 116) | static __inline__ __attribute__((always_inline)) void TPCircularBufferCo...
  function TPCircularBufferConsumeNoBarrier (line 125) | static __inline__ __attribute__((always_inline)) void TPCircularBufferCo...
  function TPCircularBufferProduce (line 157) | static __inline__ __attribute__((always_inline)) void TPCircularBufferPr...
  function TPCircularBufferProduceNoBarrier (line 166) | static __inline__ __attribute__((always_inline)) void TPCircularBufferPr...
  function TPCircularBufferProduceBytes (line 182) | static __inline__ __attribute__((always_inline)) bool TPCircularBufferPr...

FILE: Sublime/Pods/NMSSH/NMSSH-iOS/Libraries/include/libssh2/libssh2.h
  type libssh2_uint64_t (line 130) | typedef unsigned __int64 libssh2_uint64_t;
  type __int64 (line 131) | typedef __int64 libssh2_int64_t;
  type SSIZE_T (line 133) | typedef SSIZE_T ssize_t;
  type libssh2_uint64_t (line 136) | typedef unsigned long long libssh2_uint64_t;
  type libssh2_int64_t (line 137) | typedef long long libssh2_int64_t;
  type SOCKET (line 141) | typedef SOCKET libssh2_socket_t;
  type libssh2_socket_t (line 144) | typedef int libssh2_socket_t;
  type LIBSSH2_USERAUTH_KBDINT_PROMPT (line 189) | typedef struct _LIBSSH2_USERAUTH_KBDINT_PROMPT
  type LIBSSH2_USERAUTH_KBDINT_RESPONSE (line 196) | typedef struct _LIBSSH2_USERAUTH_KBDINT_RESPONSE
  type LIBSSH2_SESSION (line 278) | typedef struct _LIBSSH2_SESSION                     LIBSSH2_SESSION;
  type LIBSSH2_CHANNEL (line 279) | typedef struct _LIBSSH2_CHANNEL                     LIBSSH2_CHANNEL;
  type LIBSSH2_LISTENER (line 280) | typedef struct _LIBSSH2_LISTENER                    LIBSSH2_LISTENER;
  type LIBSSH2_KNOWNHOSTS (line 281) | typedef struct _LIBSSH2_KNOWNHOSTS                  LIBSSH2_KNOWNHOSTS;
  type LIBSSH2_AGENT (line 282) | typedef struct _LIBSSH2_AGENT                       LIBSSH2_AGENT;
  type LIBSSH2_POLLFD (line 284) | typedef struct _LIBSSH2_POLLFD {
  type stat (line 810) | struct stat
  type libssh2_knownhost (line 832) | struct libssh2_knownhost {
  type libssh2_knownhost (line 895) | struct libssh2_knownhost
  type libssh2_knownhost (line 930) | struct libssh2_knownhost
  type libssh2_knownhost (line 960) | struct libssh2_knownhost
  type libssh2_knownhost (line 969) | struct libssh2_knownhost
  type libssh2_knownhost (line 980) | struct libssh2_knownhost
  type libssh2_knownhost (line 1034) | struct libssh2_knownhost
  type libssh2_knownhost (line 1066) | struct libssh2_knownhost
  type libssh2_knownhost (line 1067) | struct libssh2_knownhost
  type libssh2_agent_publickey (line 1071) | struct libssh2_agent_publickey {
  type libssh2_agent_publickey (line 1122) | struct libssh2_agent_publickey
  type libssh2_agent_publickey (line 1123) | struct libssh2_agent_publickey
  type libssh2_agent_publickey (line 1135) | struct libssh2_agent_publickey

FILE: Sublime/Pods/NMSSH/NMSSH-iOS/Libraries/include/libssh2/libssh2_publickey.h
  type LIBSSH2_PUBLICKEY (line 51) | typedef struct _LIBSSH2_PUBLICKEY               LIBSSH2_PUBLICKEY;
  type libssh2_publickey_attribute (line 53) | typedef struct _libssh2_publickey_attribute {
  type libssh2_publickey_list (line 61) | typedef struct _libssh2_publickey_list {

FILE: Sublime/Pods/NMSSH/NMSSH-iOS/Libraries/include/libssh2/libssh2_sftp.h
  type LIBSSH2_SFTP (line 58) | typedef struct _LIBSSH2_SFTP                LIBSSH2_SFTP;
  type LIBSSH2_SFTP_HANDLE (line 59) | typedef struct _LIBSSH2_SFTP_HANDLE         LIBSSH2_SFTP_HANDLE;
  type LIBSSH2_SFTP_ATTRIBUTES (line 60) | typedef struct _LIBSSH2_SFTP_ATTRIBUTES     LIBSSH2_SFTP_ATTRIBUTES;
  type LIBSSH2_SFTP_STATVFS (line 61) | typedef struct _LIBSSH2_SFTP_STATVFS        LIBSSH2_SFTP_STATVFS;
  type _LIBSSH2_SFTP_ATTRIBUTES (line 93) | struct _LIBSSH2_SFTP_ATTRIBUTES {
  type _LIBSSH2_SFTP_STATVFS (line 105) | struct _LIBSSH2_SFTP_STATVFS {

FILE: Sublime/Pods/NMSSH/NMSSH/NMSSHChannel.h
  type NMSSHChannelExecutionError (line 6) | typedef NS_ENUM(NSInteger, NMSSHChannelError) {
  type NMSSHChannelPtyTerminalVanilla (line 17) | typedef NS_ENUM(NSInteger, NMSSHChannelPtyTerminal) {
  type NMSSHChannelTypeClosed (line 26) | typedef NS_ENUM(NSInteger, NMSSHChannelType)  {

FILE: Sublime/Pods/NMSSH/NMSSH/NMSSHSession.h
  type NMSSHSessionHashMD5 (line 6) | typedef NS_ENUM(NSInteger, NMSSHSessionHash) {
  type NMSSHKnownHostStatusMatch (line 11) | typedef NS_ENUM(NSInteger, NMSSHKnownHostStatus) {

FILE: Sublime/Pods/RongCloudIMKit/Rong_Cloud_iOS_IMKit_SDK_v2_4_9_dev/RongIMKit.framework/Headers/RCMessageBubbleTipView.h
  type RC_MESSAGE_BUBBLE_TIP_VIEW_ALIGNMENT_TOP_LEFT (line 14) | typedef NS_ENUM(NSInteger, RCMessageBubbleTipViewAlignment) {

FILE: Sublime/Pods/RongCloudIMKit/Rong_Cloud_iOS_IMKit_SDK_v2_4_9_dev/RongIMLib.framework/Headers/RCRealTimeLocationManager.h
  type RC_REAL_TIME_LOCATION_STATUS_IDLE (line 16) | typedef NS_ENUM(NSInteger, RCRealTimeLocationStatus) {
  type RC_REAL_TIME_LOCATION_NOT_SUPPORT (line 38) | typedef NS_ENUM(NSInteger, RCRealTimeLocationErrorCode) {

FILE: Sublime/Pods/RongCloudIMKit/Rong_Cloud_iOS_IMKit_SDK_v2_4_9_dev/RongIMLib.framework/Headers/interf_enc.h
  type Mode (line 28) | enum Mode {
  type Mode (line 44) | enum Mode

FILE: Sublime/Pods/SJCSimplePDFView/SJCSimplePDFView/SJCSimplePDFView.h
  type kSJCPDFViewModeContinuous (line 26) | typedef NS_ENUM(NSUInteger, SJCPDFViewMode) {

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/Common.h
  type tm_unz (line 5) | typedef struct tm_unz_s
  type unz_file_info (line 15) | typedef struct unz_file_info_s
  type unz_file_info64 (line 37) | typedef struct unz_file_info64_s
  type unz_global_info (line 60) | typedef struct unz_global_info_s
  type unz_global_info64 (line 71) | typedef struct unz_global_info64

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/aes/aes.h
  type aes_inf (line 71) | typedef union
  type aes_encrypt_ctx (line 76) | typedef struct
  type aes_decrypt_ctx (line 81) | typedef struct

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/aes/aes_via_ace.h
  function INLINE (line 335) | INLINE int has_cpuid(void)
  function INLINE (line 351) | INLINE int is_via_cpu(void)
  function INLINE (line 370) | INLINE int read_via_flags(void)
  function INLINE (line 387) | INLINE int via_rng_in(void *buf)
  function INLINE (line 399) | INLINE volatile  void via_ecb_op5(
  function INLINE (line 413) | INLINE volatile  void via_cbc_op6(
  function INLINE (line 428) | INLINE volatile  void via_cbc_op7(
  function INLINE (line 446) | INLINE volatile  void via_cfb_op6(
  function INLINE (line 461) | INLINE volatile  void via_cfb_op7(
  function INLINE (line 479) | INLINE volatile  void via_ofb_op6(
  function INLINE (line 498) | INLINE int via_ace_test(void)
  function INLINE (line 506) | INLINE int via_rng_test(void)
  function INLINE (line 514) | INLINE int read_via_rng(void *buf, int count)

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/aes/aeskey.c
  function AES_RETURN (line 75) | AES_RETURN aes_encrypt_key128(const unsigned char *key, aes_encrypt_ctx ...
  function AES_RETURN (line 123) | AES_RETURN aes_encrypt_key192(const unsigned char *key, aes_encrypt_ctx ...
  function AES_RETURN (line 174) | AES_RETURN aes_encrypt_key256(const unsigned char *key, aes_encrypt_ctx ...
  function AES_RETURN (line 211) | AES_RETURN aes_encrypt_key(const unsigned char *key, int key_len, aes_en...
  function AES_RETURN (line 312) | AES_RETURN aes_decrypt_key128(const unsigned char *key, aes_decrypt_ctx ...
  function AES_RETURN (line 391) | AES_RETURN aes_decrypt_key192(const unsigned char *key, aes_decrypt_ctx ...
  function AES_RETURN (line 482) | AES_RETURN aes_decrypt_key256(const unsigned char *key, aes_decrypt_ctx ...
  function AES_RETURN (line 531) | AES_RETURN aes_decrypt_key(const unsigned char *key, int key_len, aes_de...

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/aes/aestab.c
  function AES_RETURN (line 187) | AES_RETURN aes_init(void)
  function uint_8t (line 211) | static uint_8t hibit(const uint_32t x)
  function uint_8t (line 221) | static uint_8t gf_inv(const uint_8t x)
  function uint_8t (line 256) | uint_8t fwd_affine(const uint_8t x)
  function uint_8t (line 262) | uint_8t inv_affine(const uint_8t x)
  function AES_RETURN (line 270) | AES_RETURN aes_init(void)

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/aes/brg_types.h
  type uint_8t (line 55) | typedef unsigned char uint_8t;
  type uint_16t (line 64) | typedef unsigned short uint_16t;
  type uint_32t (line 74) | typedef unsigned int uint_32t;
  type uint_32t (line 77) | typedef unsigned long uint_32t;
  type uint_64t (line 89) | typedef unsigned __int64 uint_64t;
  type uint_64t (line 93) | typedef unsigned __int64 uint_64t;
  type uint_64t (line 97) | typedef unsigned long long uint_64t;
  type uint_64t (line 101) | typedef unsigned int long long uint_64t;
  type uint_64t (line 106) | typedef unsigned int uint_64t;
  type uint_64t (line 112) | typedef unsigned long uint_64t;
  type uint_64t (line 118) | typedef unsigned long long uint_64t;
  type uint_64t (line 124) | typedef unsigned long long uint_64t;

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/aes/entropy.c
  function entropy_fun (line 15) | int entropy_fun(unsigned char buf[], unsigned int len)
  function entropy_fun (line 39) | int entropy_fun(unsigned char buf[], unsigned int len)

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/aes/fileenc.c
  function encr_data (line 52) | static void encr_data(unsigned char data[], unsigned long d_len, fcrypt_...
  function fcrypt_init (line 73) | int fcrypt_init(
  function fcrypt_encrypt (line 120) | void fcrypt_encrypt(unsigned char data[], unsigned int data_len, fcrypt_...
  function fcrypt_decrypt (line 128) | void fcrypt_decrypt(unsigned char data[], unsigned int data_len, fcrypt_...
  function fcrypt_end (line 136) | int fcrypt_end(unsigned char mac[], fcrypt_ctx cx[1])

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/aes/fileenc.h
  type fcrypt_ctx (line 84) | typedef struct

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/aes/hmac.c
  function hmac_sha_begin (line 44) | void hmac_sha_begin(hmac_ctx cx[1])
  function hmac_sha_key (line 50) | int hmac_sha_key(const unsigned char key[], unsigned long key_len, hmac_...
  function hmac_sha_data (line 74) | void hmac_sha_data(const unsigned char data[], unsigned long data_len, h...
  function hmac_sha_end (line 106) | void hmac_sha_end(unsigned char mac[], unsigned long mac_len, hmac_ctx c...
  function hmac_sha (line 132) | void hmac_sha(const unsigned char key[], unsigned long key_len,

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/aes/hmac.h
  type hmac_ctx (line 81) | typedef struct

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/aes/prng.c
  function prng_mix (line 52) | static void prng_mix(unsigned char buf[])
  function update_pool (line 81) | static void update_pool(prng_ctx ctx[1])
  function prng_init (line 100) | void prng_init(prng_entropy_fn fun, prng_ctx ctx[1])
  function prng_rand (line 122) | void prng_rand(unsigned char data[], unsigned int data_len, prng_ctx ctx...
  function prng_end (line 146) | void prng_end(prng_ctx ctx[1])

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/aes/prng.h
  type prng_ctx (line 62) | typedef struct

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/aes/pwd2key.c
  function derive_key (line 44) | void derive_key(const unsigned char pwd[],  /* the PASSWORD     */
  function main (line 165) | int main()

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/aes/sha1.c
  function VOID_RETURN (line 116) | VOID_RETURN sha1_compile(sha1_ctx ctx[1])
  function VOID_RETURN (line 172) | VOID_RETURN sha1_begin(sha1_ctx ctx[1])
  function VOID_RETURN (line 185) | VOID_RETURN sha1_hash(const unsigned char data[], unsigned long len, sha...
  function VOID_RETURN (line 206) | VOID_RETURN sha1_end(unsigned char hval[], sha1_ctx ctx[1])
  function VOID_RETURN (line 250) | VOID_RETURN sha1(unsigned char hval[], const unsigned char data[], unsig...

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/aes/sha1.h
  type sha1_ctx (line 49) | typedef struct

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/minizip/crypt.h
  function decrypt_byte (line 34) | static int decrypt_byte(unsigned long* pkeys, const unsigned long* pcrc_...
  function update_keys (line 47) | static int update_keys(unsigned long* pkeys,const unsigned long* pcrc_32...
  function init_keys (line 64) | static void init_keys(const char* passwd,unsigned long* pkeys,const unsi...
  function crypthead (line 89) | static int crypthead(const char* passwd,      /* password string */

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/minizip/ioapi.c
  function voidpf (line 45) | voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*...
  function call_zseek64 (line 59) | long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filest...
  function ZPOS64_T (line 70) | ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf fi...
  function fill_zlib_filefunc64_32_def_from_filefunc32 (line 81) | void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def*...
  type FILE_IOPOSIX (line 107) | typedef struct
  function voidpf (line 114) | static voidpf file_build_ioposix(FILE *file, const char *filename)
  function voidpf (line 127) | static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* file...
  function voidpf (line 146) | static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* fi...
  function voidpf (line 165) | static voidpf ZCALLBACK fopendisk64_file_func (voidpf opaque, voidpf str...
  function voidpf (line 190) | static voidpf ZCALLBACK fopendisk_file_func (voidpf opaque, voidpf strea...
  function uLong (line 215) | static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, vo...
  function uLong (line 226) | static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, c...
  function ftell_file_func (line 237) | static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream)
  function ZPOS64_T (line 248) | static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream)
  function fseek_file_func (line 259) | static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLo...
  function fseek64_file_func (line 288) | static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, Z...
  function fclose_file_func (line 320) | static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream)
  function ferror_file_func (line 334) | static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream)
  function fill_fopen_filefunc (line 345) | void fill_fopen_filefunc (zlib_filefunc_def* pzlib_filefunc_def)
  function fill_fopen64_filefunc (line 358) | void fill_fopen64_filefunc (zlib_filefunc64_def* pzlib_filefunc_def)

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/minizip/ioapi.h
  type IT_INT_CUSTOM_TYPE (line 60) | typedef 64BIT_INT_CUSTOM_TYPE ZPOS64_T;
  type ZPOS64_T (line 64) | typedef uint64_t ZPOS64_T;
  type ZPOS64_T (line 67) | typedef unsigned __int64 ZPOS64_T;
  type ZPOS64_T (line 69) | typedef unsigned long long int ZPOS64_T;
  type zlib_filefunc_def (line 108) | typedef struct zlib_filefunc_def_s
  type zlib_filefunc64_def (line 126) | typedef struct zlib_filefunc64_def_s
  type zlib_filefunc64_32_def (line 143) | typedef struct zlib_filefunc64_32_def_s

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/minizip/mztools.c
  function unzRepair (line 31) | extern int ZEXPORT unzRepair(file, fileOut, fileOutTmp, nRecovered, byte...

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/minizip/unzip.c
  type unz_file_info64_internal (line 97) | typedef struct unz_file_info64_internal_s {
  type file_in_zip64_read_info_s (line 108) | typedef struct {
  type unz64_s (line 141) | typedef struct {
  function local (line 169) | local void unz64local_DosDateToTmuDate(ZPOS64_T ulDosDate, tm_unz *ptm)
  function local (line 192) | local int unz64local_getByte(const zlib_filefunc64_32_def *pzlib_filefun...
  function local (line 206) | local int unz64local_getShort(const zlib_filefunc64_32_def *pzlib_filefu...
  function local (line 226) | local int unz64local_getLong(const zlib_filefunc64_32_def *pzlib_filefun...
  function local (line 252) | local int unz64local_getLong64(const zlib_filefunc64_32_def *pzlib_filef...
  function local (line 291) | local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def ...
  function local (line 350) | local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_de...
  function local (line 386) | local unzFile unzOpenInternal(const void *path, zlib_filefunc64_32_def *...
  function unzFile (line 538) | extern unzFile ZEXPORT unzOpen2(const char *path, zlib_filefunc_def *pzl...
  function unzFile (line 548) | extern unzFile ZEXPORT unzOpen2_64(const void *path, zlib_filefunc64_def...
  function unzFile (line 560) | extern unzFile ZEXPORT unzOpen(const char *path)
  function unzFile (line 565) | extern unzFile ZEXPORT unzOpen64(const void *path)
  function unzClose (line 570) | extern int ZEXPORT unzClose(unzFile file)
  function local (line 593) | local int unzGoToNextDisk(unzFile file)
  function unzGetGlobalInfo (line 633) | extern int ZEXPORT unzGetGlobalInfo(unzFile file, unz_global_info *pglob...
  function unzGetGlobalInfo64 (line 646) | extern int ZEXPORT unzGetGlobalInfo64(unzFile file, unz_global_info64 *p...
  function unzGetGlobalComment (line 656) | extern int ZEXPORT unzGetGlobalComment(unzFile file, char *comment, uLon...
  function local (line 682) | local int unz64local_GetCurrentFileInfoInternal(unzFile file, unz_file_i...
  function unzGetCurrentFileInfo (line 918) | extern int ZEXPORT unzGetCurrentFileInfo(unzFile file, unz_file_info *pf...
  function unzGetCurrentFileInfo64 (line 952) | extern int ZEXPORT unzGetCurrentFileInfo64(unzFile file, unz_file_info64...
  function local (line 962) | local int unz64local_CheckCurrentFileCoherencyHeader(unz64_s *s, uInt *p...
  function unzOpenCurrentFile3 (line 1047) | extern int ZEXPORT unzOpenCurrentFile3(unzFile file, int *method, int *l...
  function unzOpenCurrentFile (line 1238) | extern int ZEXPORT unzOpenCurrentFile(unzFile file)
  function unzOpenCurrentFilePassword (line 1243) | extern int ZEXPORT unzOpenCurrentFilePassword(unzFile file, const char *...
  function unzOpenCurrentFile2 (line 1248) | extern int ZEXPORT unzOpenCurrentFile2(unzFile file, int *method, int *l...
  function unzReadCurrentFile (line 1260) | extern int ZEXPORT unzReadCurrentFile(unzFile file, voidp buf, unsigned ...
  function ZPOS64_T (line 1485) | extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64(unzFile file)
  function unzGetLocalExtrafield (line 1498) | extern int ZEXPORT unzGetLocalExtrafield(unzFile file, voidp buf, unsign...
  function unzGoToFirstFile2 (line 1593) | extern int ZEXPORT unzGoToFirstFile2(unzFile file, unz_file_info64 *pfil...
  function unzGoToFirstFile (line 1611) | extern int ZEXPORT unzGoToFirstFile(unzFile file)
  function unzGoToNextFile2 (line 1616) | extern int ZEXPORT unzGoToNextFile2(unzFile file, unz_file_info64 *pfile...
  function unzGoToNextFile (line 1641) | extern int ZEXPORT unzGoToNextFile(unzFile file)
  function unzLocateFile (line 1646) | extern int ZEXPORT unzLocateFile(unzFile file, const char *filename, unz...
  function unzGetFilePos (line 1690) | extern int ZEXPORT unzGetFilePos(unzFile file, unz_file_pos *file_pos)
  function unzGoToFilePos (line 1701) | extern int ZEXPORT unzGoToFilePos(unzFile file, unz_file_pos *file_pos)
  function unzGetFilePos64 (line 1712) | extern int ZEXPORT unzGetFilePos64(unzFile file, unz64_file_pos *file_pos)
  function unzGoToFilePos64 (line 1728) | extern int ZEXPORT unzGoToFilePos64(unzFile file, const unz64_file_pos *...
  function uLong (line 1748) | extern uLong ZEXPORT unzGetOffset(unzFile file)
  function ZPOS64_T (line 1758) | extern ZPOS64_T ZEXPORT unzGetOffset64(unzFile file)
  function unzSetOffset (line 1773) | extern int ZEXPORT unzSetOffset(unzFile file, uLong pos)
  function unzSetOffset64 (line 1778) | extern int ZEXPORT unzSetOffset64(unzFile file, ZPOS64_T pos)
  function z_off_t (line 1794) | extern z_off_t ZEXPORT unztell(unzFile file)
  function ZPOS64_T (line 1807) | extern ZPOS64_T ZEXPORT unztell64(unzFile file)
  function unzeof (line 1823) | extern int ZEXPORT unzeof(unzFile file)

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/minizip/unzip.h
  type unzFile__ (line 45) | typedef struct TagunzFile__ { int unused; } unzFile__;
  type unzFile__ (line 46) | typedef unzFile__ *unzFile;
  type voidp (line 48) | typedef voidp unzFile;
  type unz_file_pos (line 209) | typedef struct unz_file_pos_s
  type unz64_file_pos (line 218) | typedef struct unz64_file_pos_s

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/minizip/zip.c
  type linkedlist_datablock_internal (line 110) | typedef struct linkedlist_datablock_internal_s {
  type linkedlist_data (line 118) | typedef struct linkedlist_data_s {
  type curfile64_info (line 123) | typedef struct {
  type zip64_internal (line 161) | typedef struct {
  function local (line 183) | local linkedlist_datablock_internal *allocate_new_datablock()
  function local (line 199) | local void free_datablock(linkedlist_datablock_internal *ldi)
  function local (line 210) | local void init_linkedlist(linkedlist_data *ll)
  function local (line 217) | local void free_linkedlist(linkedlist_data *ll)
  function local (line 225) | local int add_data_in_datablock(linkedlist_data *ll, const void *buf, uL...
  function local (line 274) | local uLong zip64local_TmzDateToDosDate(const tm_zip *ptm)
  function local (line 310) | local int zip64local_putValue(const zlib_filefunc64_32_def *pzlib_filefu...
  function local (line 333) | local void zip64local_putValue_inmemory(void *dest, ZPOS64_T x, int nbByte)
  function local (line 351) | local int zip64local_getByte(const zlib_filefunc64_32_def *pzlib_filefun...
  function local (line 365) | local int zip64local_getShort(const zlib_filefunc64_32_def *pzlib_filefu...
  function local (line 385) | local int zip64local_getLong(const zlib_filefunc64_32_def *pzlib_filefun...
  function local (line 411) | local int zip64local_getLong64(const zlib_filefunc64_32_def *pzlib_filef...
  function local (line 451) | local int zipGetDiskSizeAvailable(zipFile file, ZPOS64_T *size_available)
  function local (line 465) | local int zipGoToSpecificDisk(zipFile file, int number_disk, int open_ex...
  function local (line 489) | local int zipGoToFirstDisk(zipFile file)
  function local (line 513) | local int zipGoToNextDisk(zipFile file)
  function local (line 547) | local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def ...
  function local (line 606) | local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_de...
  function zipFile (line 642) | extern zipFile ZEXPORT zipOpen4(const void *pathname, int append, ZPOS64...
  function zipFile (line 878) | extern zipFile ZEXPORT zipOpen2(const char *pathname, int append, zipcha...
  function zipFile (line 889) | extern zipFile ZEXPORT zipOpen2_64(const void *pathname, int append, zip...
  function zipFile (line 902) | extern zipFile ZEXPORT zipOpen3(const char *pathname, int append, ZPOS64...
  function zipFile (line 913) | extern zipFile ZEXPORT zipOpen3_64(const void *pathname, int append, ZPO...
  function zipFile (line 926) | extern zipFile ZEXPORT zipOpen(const char *pathname, int append)
  function zipFile (line 931) | extern zipFile ZEXPORT zipOpen64(const void *pathname, int append)
  function zipOpenNewFileInZip4_64 (line 936) | extern int ZEXPORT zipOpenNewFileInZip4_64(zipFile file, const char *fil...
  function zipOpenNewFileInZip4 (line 1267) | extern int ZEXPORT zipOpenNewFileInZip4(zipFile file, const char *filena...
  function zipOpenNewFileInZip3 (line 1277) | extern int ZEXPORT zipOpenNewFileInZip3(zipFile file, const char *filena...
  function zipOpenNewFileInZip3_64 (line 1287) | extern int ZEXPORT zipOpenNewFileInZip3_64(zipFile file, const char *fil...
  function zipOpenNewFileInZip2 (line 1297) | extern int ZEXPORT zipOpenNewFileInZip2(zipFile file, const char *filena...
  function zipOpenNewFileInZip2_64 (line 1306) | extern int ZEXPORT zipOpenNewFileInZip2_64(zipFile file, const char *fil...
  function zipOpenNewFileInZip64 (line 1315) | extern int ZEXPORT zipOpenNewFileInZip64(zipFile file, const char *filen...
  function zipOpenNewFileInZip (line 1324) | extern int ZEXPORT zipOpenNewFileInZip(zipFile file, const char *filenam...
  function local (line 1335) | local int zip64FlushWriteBuffer(zip64_internal *zi)
  function zipWriteInFileInZip (line 1410) | extern int ZEXPORT zipWriteInFileInZip(zipFile file, const void *buf, un...
  function zipCloseFileInZipRaw (line 1494) | extern int ZEXPORT zipCloseFileInZipRaw(zipFile file, uLong uncompressed...
  function zipCloseFileInZipRaw64 (line 1499) | extern int ZEXPORT zipCloseFileInZipRaw64(zipFile file, ZPOS64_T uncompr...
  function zipCloseFileInZip (line 1747) | extern int ZEXPORT zipCloseFileInZip(zipFile file)
  function zipClose (line 1752) | extern int ZEXPORT zipClose(zipFile file, const char *global_comment)

FILE: Sublime/Pods/SSZipArchive/SSZipArchive/minizip/zip.h
  type zipFile__ (line 41) | typedef struct TagzipFile__ { int unused; } zipFile__;
  type zipFile__ (line 42) | typedef zipFile__ *zipFile;
  type voidp (line 44) | typedef voidp zipFile;
  type tm_zip (line 64) | typedef struct tm_zip_s
  type zip_fileinfo (line 74) | typedef struct

FILE: Sublime/Sublime/SDK/Weixin/WXApiObject.h
  type WXErrCode (line 14) | enum  WXErrCode {
  type WXScene (line 28) | enum WXScene {
  type WXAPISupport (line 36) | enum WXAPISupport {
  type WXBizProfileType (line 45) | enum WXBizProfileType{
  type WXMPWebviewType (line 55) | enum WXMPWebviewType {

FILE: Sublime/Sublime/SDK/Weixin/WechatAuthSDK.h
  type AuthErrCode (line 12) | enum  AuthErrCode {

FILE: Sublime/Sublime/Web/js/index.js
  function s (line 2) | function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindo...
  function gb (line 2) | function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)...
  function hb (line 2) | function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLengt...
  function ib (line 2) | function ib(a){return a[u]=!0,a}
  function jb (line 2) | function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){re...
  function kb (line 2) | function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[...
  function lb (line 2) | function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sou...
  function mb (line 2) | function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"...
  function nb (line 2) | function nb(a){return function(b){var c=b.nodeName.toLowerCase();return(...
  function ob (line 2) | function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,...
  function pb (line 2) | function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}
  function qb (line 2) | function qb(){}
  function rb (line 2) | function rb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}
  function sb (line 2) | function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.firs...
  function tb (line 2) | function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e-...
  function ub (line 2) | function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}
  function vb (line 2) | function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(...
  function wb (line 2) | function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)...
  function xb (line 2) | function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.r...
  function yb (line 2) | function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var...
  function x (line 2) | function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){retur...
  function D (line 2) | function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}
  function G (line 2) | function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b...
  function I (line 2) | function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEven...
  function K (line 2) | function K(){Object.defineProperty(this.cache={},0,{get:function(){retur...
  function P (line 2) | function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.rep...
  function Z (line 3) | function Z(){return!0}
  function $ (line 3) | function $(){return!1}
  function _ (line 3) | function _(){try{return l.activeElement}catch(a){}}
  function jb (line 3) | function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeTyp...
  function kb (line 3) | function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}
  function lb (line 3) | function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttrib...
  function mb (line 3) | function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",...
  function nb (line 3) | function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&...
  function ob (line 3) | function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||...
  function pb (line 3) | function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.ty...
  function sb (line 3) | function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getD...
  function tb (line 3) | function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(...
  function xb (line 3) | function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPr...
  function yb (line 3) | function yb(a,b){return{get:function(){return a()?void delete this.get:(...
  function g (line 3) | function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-siz...
  function Fb (line 3) | function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),...
  function Gb (line 3) | function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[...
  function Hb (line 3) | function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===...
  function Ib (line 3) | function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f...
  function Jb (line 3) | function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.styl...
  function Kb (line 3) | function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}
  function Sb (line 3) | function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}
  function Tb (line 3) | function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e[...
  function Ub (line 3) | function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.lengt...
  function Vb (line 3) | function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeTyp...
  function Wb (line 3) | function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a...
  function Xb (line 3) | function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(functio...
  function qc (line 4) | function qc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var ...
  function rc (line 4) | function rc(a,b,c,d){var e={},f=a===mc;function g(h){var i;return e[h]=!...
  function sc (line 4) | function sc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)voi...
  function tc (line 4) | function tc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[...
  function uc (line 4) | function uc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])fo...
  function x (line 4) | function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=v...
  function Ac (line 4) | function Ac(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||wc....
  function Jc (line 4) | function Jc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}
Condensed preview — 763 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,611K chars).
[
  {
    "path": ".gitignore",
    "chars": 1378,
    "preview": "# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n"
  },
  {
    "path": "LICENSE",
    "chars": 35141,
    "preview": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
  },
  {
    "path": "README.md",
    "chars": 1999,
    "preview": "# SublimeCode [![star this repo](http://github-svg-buttons.herokuapp.com/star.svg?user=Urinx&repo=SublimeCode&style=flat"
  },
  {
    "path": "Sublime/Cycript.framework/Headers/Cycript.h",
    "chars": 986,
    "preview": "/* Cycript - Optimizing JavaScript Compiler/Runtime\n * Copyright (C) 2009-2013  Jay Freeman (saurik)\n*/\n\n/* GNU General "
  },
  {
    "path": "Sublime/Podfile",
    "chars": 362,
    "preview": "source 'https://github.com/CocoaPods/Specs.git'\nplatform :ios, '8.0'\nuse_frameworks!\n\npod 'Alamofire', '~> 3.0'\npod 'CYR"
  },
  {
    "path": "Sublime/Pods/AASquaresLoading/LICENSE",
    "chars": 1080,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2015 Anas AIT ALI\n\nPermission is hereby granted, free of charge, to any person obta"
  },
  {
    "path": "Sublime/Pods/AASquaresLoading/README.md",
    "chars": 2469,
    "preview": "# AASquaresLoading\nSimple loading animation using squares\n\n![Screenshot](screenshot.gif)\n\n## Example\n```swift\nlet loadin"
  },
  {
    "path": "Sublime/Pods/AASquaresLoading/Source/AASquaresLoading.swift",
    "chars": 9138,
    "preview": "//\n//  AASquaresLoading.swift\n//  Etix Mobile\n//\n//  Created by Anas Ait Ali on 18/02/15.\n//  Copyright (c) 2015 Etix. A"
  },
  {
    "path": "Sublime/Pods/Alamofire/LICENSE",
    "chars": 1102,
    "preview": "Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/)\n\nPermission is hereby granted, free of cha"
  },
  {
    "path": "Sublime/Pods/Alamofire/README.md",
    "chars": 46982,
    "preview": "![Alamofire: Elegant Networking in Swift](https://raw.githubusercontent.com/Alamofire/Alamofire/assets/alamofire.png)\n\n["
  },
  {
    "path": "Sublime/Pods/Alamofire/Source/Alamofire.swift",
    "chars": 12333,
    "preview": "// Alamofire.swift\n//\n// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission "
  },
  {
    "path": "Sublime/Pods/Alamofire/Source/Download.swift",
    "chars": 10008,
    "preview": "// Download.swift\n//\n// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission i"
  },
  {
    "path": "Sublime/Pods/Alamofire/Source/Error.swift",
    "chars": 2883,
    "preview": "// Error.swift\n//\n// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is h"
  },
  {
    "path": "Sublime/Pods/Alamofire/Source/Manager.swift",
    "chars": 34217,
    "preview": "// Manager.swift\n//\n// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is"
  },
  {
    "path": "Sublime/Pods/Alamofire/Source/MultipartFormData.swift",
    "chars": 26889,
    "preview": "// MultipartFormData.swift\n//\n// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Per"
  },
  {
    "path": "Sublime/Pods/Alamofire/Source/NetworkReachabilityManager.swift",
    "chars": 8723,
    "preview": "// NetworkReachabilityManager.swift\n//\n// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/)\n"
  },
  {
    "path": "Sublime/Pods/Alamofire/Source/Notifications.swift",
    "chars": 2411,
    "preview": "// Notifications.swift\n//\n// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permiss"
  },
  {
    "path": "Sublime/Pods/Alamofire/Source/ParameterEncoding.swift",
    "chars": 11101,
    "preview": "// ParameterEncoding.swift\n//\n// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Per"
  },
  {
    "path": "Sublime/Pods/Alamofire/Source/Request.swift",
    "chars": 20127,
    "preview": "// Request.swift\n//\n// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is"
  },
  {
    "path": "Sublime/Pods/Alamofire/Source/Response.swift",
    "chars": 3797,
    "preview": "// Response.swift\n//\n// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission i"
  },
  {
    "path": "Sublime/Pods/Alamofire/Source/ResponseSerialization.swift",
    "chars": 14179,
    "preview": "// ResponseSerialization.swift\n//\n// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n//"
  },
  {
    "path": "Sublime/Pods/Alamofire/Source/Result.swift",
    "chars": 3538,
    "preview": "// Result.swift\n//\n// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is "
  },
  {
    "path": "Sublime/Pods/Alamofire/Source/ServerTrustPolicy.swift",
    "chars": 13047,
    "preview": "// ServerTrustPolicy.swift\n//\n// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Per"
  },
  {
    "path": "Sublime/Pods/Alamofire/Source/Stream.swift",
    "chars": 6589,
    "preview": "// Stream.swift\n//\n// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is "
  },
  {
    "path": "Sublime/Pods/Alamofire/Source/Timeline.swift",
    "chars": 5815,
    "preview": "// Timeline.swift\n//\n// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission i"
  },
  {
    "path": "Sublime/Pods/Alamofire/Source/Upload.swift",
    "chars": 15954,
    "preview": "// Upload.swift\n//\n// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission is "
  },
  {
    "path": "Sublime/Pods/Alamofire/Source/Validation.swift",
    "chars": 7103,
    "preview": "// Validation.swift\n//\n// Copyright (c) 2014–2016 Alamofire Software Foundation (http://alamofire.org/)\n//\n// Permission"
  },
  {
    "path": "Sublime/Pods/AlamofireRSSParser/LICENSE",
    "chars": 1080,
    "preview": "Copyright (c) 2016 Don Angelillo <dangelillo@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obt"
  },
  {
    "path": "Sublime/Pods/AlamofireRSSParser/Pod/Classes/AlamofireRSSParser.h",
    "chars": 567,
    "preview": "//\n//  AlamofireRSSParser.h\n//  AlamofireRSSParser\n//\n//  Created by Donald Angelillo on 3/1/16.\n//  Copyright © 2016 Do"
  },
  {
    "path": "Sublime/Pods/AlamofireRSSParser/Pod/Classes/AlamofireRSSParser.swift",
    "chars": 11145,
    "preview": "//\n//  AlamofireRSSParser.swift\n//  Pods\n//\n//  Created by Donald Angelillo on 3/2/16.\n//\n//\n\nimport Foundation\nimport A"
  },
  {
    "path": "Sublime/Pods/AlamofireRSSParser/Pod/Classes/RSSFeed.swift",
    "chars": 1390,
    "preview": "//\n//  RSSFeed.swift\n//  AlamofireRSSParser\n//\n//  Created by Donald Angelillo on 3/1/16.\n//  Copyright © 2016 Donald An"
  },
  {
    "path": "Sublime/Pods/AlamofireRSSParser/Pod/Classes/RSSItem.swift",
    "chars": 2682,
    "preview": "//\n//  RSSItem.swift\n//  AlamofireRSSParser\n//\n//  Created by Donald Angelillo on 3/1/16.\n//  Copyright © 2016 Donald An"
  },
  {
    "path": "Sublime/Pods/AlamofireRSSParser/README.md",
    "chars": 3251,
    "preview": "# AlamofireRSSParser\n\n[![CI Status](http://img.shields.io/travis/AdeptusAstartes/AlamofireRSSParser.svg?style=flat)](htt"
  },
  {
    "path": "Sublime/Pods/CYRTextView/CYRTextView/CYRLayoutManager.h",
    "chars": 1898,
    "preview": "//\n//  CYRLayoutManager.h\n//\n//  Version 0.4.0\n//\n//  Created by Illya Busigin on 01/05/2014.\n//  Copyright (c) 2014 Cyr"
  },
  {
    "path": "Sublime/Pods/CYRTextView/CYRTextView/CYRLayoutManager.m",
    "chars": 10335,
    "preview": "//\n//  CYRLayoutManager.h\n//\n//  Version 0.4.0\n//\n//  Created by Illya Busigin on 01/05/2014.\n//  Copyright (c) 2014 Cyr"
  },
  {
    "path": "Sublime/Pods/CYRTextView/CYRTextView/CYRTextStorage.h",
    "chars": 1646,
    "preview": "//\n//  CYRTextStorage.h\n//\n//  Version 0.4.0\n//\n//  Created by Illya Busigin on 01/05/2014.\n//  Copyright (c) 2014 Cyril"
  },
  {
    "path": "Sublime/Pods/CYRTextView/CYRTextView/CYRTextStorage.m",
    "chars": 5838,
    "preview": "//\n//  CYRTextStorage.m\n//\n//  Version 0.4.0\n//\n//  Created by Illya Busigin on 01/05/2014.\n//  Copyright (c) 2014 Cyril"
  },
  {
    "path": "Sublime/Pods/CYRTextView/CYRTextView/CYRTextView.h",
    "chars": 1962,
    "preview": "//\n//  CYRTextView.h\n//\n//  Version 0.4.0\n//\n//  Created by Illya Busigin on 01/05/2014.\n//  Copyright (c) 2014 Cyrillia"
  },
  {
    "path": "Sublime/Pods/CYRTextView/CYRTextView/CYRTextView.m",
    "chars": 10851,
    "preview": "//\n//  CYRTextView.m\n//\n//  Version 0.4.0\n//\n//  Created by Illya Busigin on 01/05/2014.\n//  Copyright (c) 2014 Cyrillia"
  },
  {
    "path": "Sublime/Pods/CYRTextView/CYRTextView/CYRToken.h",
    "chars": 1750,
    "preview": "//\n//  CYRTextAttribute.h\n//\n//  Version 0.4.0\n//\n//  Created by Illya Busigin on 01/05/2014.\n//  Copyright (c) 2014 Cyr"
  },
  {
    "path": "Sublime/Pods/CYRTextView/CYRTextView/CYRToken.m",
    "chars": 1778,
    "preview": "//\n//  CYRTextAttribute.m\n//\n//  Version 0.4.0\n//\n//  Created by Illya Busigin on 01/05/2014.\n//  Copyright (c) 2014 Cyr"
  },
  {
    "path": "Sublime/Pods/CYRTextView/LICENSE",
    "chars": 1082,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2014 Cyrillian, Inc.\n\nPermission is hereby granted, free of charge, to any person o"
  },
  {
    "path": "Sublime/Pods/CYRTextView/README.md",
    "chars": 2864,
    "preview": "# CYRTextView\n\nby **Illya Busigin**\n\n- Visit my blog at [http://illyabusigin.com/](http://illyabusigin.com/)\n- Follow [@"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Animation/ChartAnimationEasing.swift",
    "chars": 13754,
    "preview": "//\n//  ChartAnimationUtils.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 23/2/15.\n\n//\n//  Copyright 2015 Dani"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Animation/ChartAnimator.swift",
    "chars": 13253,
    "preview": "//\n//  ChartAnimator.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 3/3/15.\n//\n//  Copyright 2015 Daniel Cohen"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Charts/BarChartView.swift",
    "chars": 5806,
    "preview": "//\n//  BarChartView.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Daniel Cohen "
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Charts/BarLineChartViewBase.swift",
    "chars": 69996,
    "preview": "//\n//  BarLineChartViewBase.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Danie"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Charts/BubbleChartView.swift",
    "chars": 1671,
    "preview": "//\n//  BubbleChartView.swift\n//  Charts\n//\n//  Bubble chart implementation:\n//    Copyright 2015 Pierre-Marc Airoldi\n// "
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Charts/CandleStickChartView.swift",
    "chars": 1032,
    "preview": "//\n//  CandleStickChartView.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Danie"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Charts/ChartViewBase.swift",
    "chars": 35988,
    "preview": "//\n//  ChartViewBase.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 23/2/15.\n\n//\n//  Copyright 2015 Daniel Coh"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Charts/CombinedChartView.swift",
    "chars": 6981,
    "preview": "//\n//  CombinedChartView.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Daniel C"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Charts/HorizontalBarChartView.swift",
    "chars": 8169,
    "preview": "//\n//  HorizontalBarChartView.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Dan"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Charts/LineChartView.swift",
    "chars": 1012,
    "preview": "//\n//  LineChartView.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Daniel Cohen"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Charts/PieChartView.swift",
    "chars": 16205,
    "preview": "//\n//  PieChartView.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Daniel Cohen "
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Charts/PieRadarChartViewBase.swift",
    "chars": 31017,
    "preview": "//\n//  PieRadarChartViewBase.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Dani"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Charts/RadarChartView.swift",
    "chars": 7205,
    "preview": "//\n//  RadarChartView.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Daniel Cohe"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Charts/ScatterChartView.swift",
    "chars": 1213,
    "preview": "//\n//  ScatterChartView.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Daniel Co"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Components/ChartAxisBase.swift",
    "chars": 5241,
    "preview": "//\n//  ChartAxisBase.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 23/2/15.\n\n//\n//  Copyright 2015 Daniel Coh"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Components/ChartComponentBase.swift",
    "chars": 951,
    "preview": "//\n//  ChartComponentBase.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 16/3/15.\n//\n//  Copyright 2015 Daniel"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Components/ChartLegend.swift",
    "chars": 17184,
    "preview": "//\n//  ChartLegend.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 24/2/15.\n\n//\n//  Copyright 2015 Daniel Cohen"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Components/ChartLimitLine.swift",
    "chars": 2068,
    "preview": "//\n//  ChartLimitLine.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 23/2/15.\n\n//\n//  Copyright 2015 Daniel Co"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Components/ChartMarker.swift",
    "chars": 2152,
    "preview": "//\n//  ChartMarker.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 3/3/15.\n//\n//  Copyright 2015 Daniel Cohen G"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Components/ChartXAxis.swift",
    "chars": 5830,
    "preview": "//\n//  ChartXAxis.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 23/2/15.\n\n//\n//  Copyright 2015 Daniel Cohen "
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Components/ChartYAxis.swift",
    "chars": 9195,
    "preview": "//\n//  ChartYAxis.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 23/2/15.\n\n//\n//  Copyright 2015 Daniel Cohen "
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/ChartBaseDataSet.swift",
    "chars": 9449,
    "preview": "//\n//  BaseDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 16/1/15.\n\n//\n//  Copyright 2015 Daniel Cohen"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/BarChartData.swift",
    "chars": 1292,
    "preview": "//\n//  BarChartData.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copyright 2015 Daniel Cohen"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/BarChartDataEntry.swift",
    "chars": 3969,
    "preview": "//\n//  BarChartDataEntry.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Daniel C"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/BarChartDataSet.swift",
    "chars": 5624,
    "preview": "//\n//  BarChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Daniel Coh"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/BarLineScatterCandleBubbleChartData.swift",
    "chars": 723,
    "preview": "//\n//  BarLineScatterCandleBubbleChartData.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copy"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/BarLineScatterCandleBubbleChartDataSet.swift",
    "chars": 1258,
    "preview": "//\n//  BarLineScatterCandleBubbleChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  C"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/BubbleChartData.swift",
    "chars": 988,
    "preview": "//\n//  BubbleChartData.swift\n//  Charts\n//\n//  Bubble chart implementation:\n//    Copyright 2015 Pierre-Marc Airoldi\n// "
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/BubbleChartDataEntry.swift",
    "chars": 1385,
    "preview": "//\n//  BubbleDataEntry.swift\n//  Charts\n//\n//  Bubble chart implementation: \n//    Copyright 2015 Pierre-Marc Airoldi\n//"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/BubbleChartDataSet.swift",
    "chars": 3209,
    "preview": "//\n//  BubbleChartDataSet.swift\n//  Charts\n//\n//  Bubble chart implementation:\n//    Copyright 2015 Pierre-Marc Airoldi\n"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/CandleChartData.swift",
    "chars": 709,
    "preview": "//\n//  CandleChartData.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copyright 2015 Daniel Co"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/CandleChartDataEntry.swift",
    "chars": 2167,
    "preview": "//\n//  CandleChartDataEntry.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Danie"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/CandleChartDataSet.swift",
    "chars": 3643,
    "preview": "//\n//  CandleChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Daniel "
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/ChartData.swift",
    "chars": 24743,
    "preview": "//\n//  ChartData.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 23/2/15.\n\n//\n//  Copyright 2015 Daniel Cohen G"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/ChartDataEntry.swift",
    "chars": 2524,
    "preview": "//\n//  ChartDataEntry.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 23/2/15.\n\n//\n//  Copyright 2015 Daniel Co"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/ChartDataSet.swift",
    "chars": 12636,
    "preview": "//\n//  ChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 23/2/15.\n\n//\n//  Copyright 2015 Daniel Cohe"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/CombinedChartData.swift",
    "chars": 4723,
    "preview": "//\n//  CombinedChartData.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copyright 2015 Daniel "
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/LineChartData.swift",
    "chars": 751,
    "preview": "//\n//  LineChartData.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copyright 2015 Daniel Cohe"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/LineChartDataSet.swift",
    "chars": 5282,
    "preview": "//\n//  LineChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copyright 2015 Daniel C"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/LineRadarChartDataSet.swift",
    "chars": 2565,
    "preview": "//\n//  LineRadarChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copyright 2015 Dan"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/LineScatterCandleRadarChartDataSet.swift",
    "chars": 1964,
    "preview": "//\n//  LineScatterCandleRadarChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 29/7/15.\n//\n//  Copyr"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/PieChartData.swift",
    "chars": 2892,
    "preview": "//\n//  PieData.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 24/2/15.\n//\n//  Copyright 2015 Daniel Cohen Gind"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/PieChartDataSet.swift",
    "chars": 1738,
    "preview": "//\n//  PieChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 24/2/15.\n\n//\n//  Copyright 2015 Daniel C"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/RadarChartData.swift",
    "chars": 972,
    "preview": "//\n//  RadarChartData.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copyright 2015 Daniel Coh"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/RadarChartDataSet.swift",
    "chars": 1629,
    "preview": "//\n//  RadarChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 24/2/15.\n\n//\n//  Copyright 2015 Daniel"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/ScatterChartData.swift",
    "chars": 1453,
    "preview": "//\n//  ScatterChartData.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copyright 2015 Daniel C"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Implementations/Standard/ScatterChartDataSet.swift",
    "chars": 1690,
    "preview": "//\n//  ScatterChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copyright 2015 Danie"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Interfaces/IBarChartDataSet.swift",
    "chars": 1403,
    "preview": "//\n//  IBarChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copyright 2015 Daniel C"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Interfaces/IBarLineScatterCandleBubbleChartDataSet.swift",
    "chars": 723,
    "preview": "//\n//  IBarLineScatterCandleBubbleChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  "
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Interfaces/IBubbleChartDataSet.swift",
    "chars": 737,
    "preview": "//\n//  IBubbleChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copyright 2015 Danie"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Interfaces/ICandleChartDataSet.swift",
    "chars": 1875,
    "preview": "//\n//  ICandleChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copyright 2015 Danie"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Interfaces/IChartDataSet.swift",
    "chars": 7783,
    "preview": "//\n//  IChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copyright 2015 Daniel Cohe"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Interfaces/ILineChartDataSet.swift",
    "chars": 2933,
    "preview": "//\n//  ILineChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copyright 2015 Daniel "
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Interfaces/ILineRadarChartDataSet.swift",
    "chars": 1457,
    "preview": "//\n//  ILineRadarChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copyright 2015 Da"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Interfaces/ILineScatterCandleRadarChartDataSet.swift",
    "chars": 1311,
    "preview": "//\n//  ILineScatterCandleRadarChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copy"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Interfaces/IPieChartDataSet.swift",
    "chars": 706,
    "preview": "//\n//  IPieChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copyright 2015 Daniel C"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Interfaces/IRadarChartDataSet.swift",
    "chars": 1118,
    "preview": "//\n//  IRadarChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copyright 2015 Daniel"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Data/Interfaces/IScatterChartDataSet.swift",
    "chars": 1302,
    "preview": "//\n//  IScatterChartDataSet.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/2/15.\n//\n//  Copyright 2015 Dani"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Filters/ChartDataApproximatorFilter.swift",
    "chars": 7322,
    "preview": "//\n//  ChartDataApproximator.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 23/2/15.\n\n//\n//  Copyright 2015 Da"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Filters/ChartDataBaseFilter.swift",
    "chars": 558,
    "preview": "//\n//  ChartDataFilter.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 23/2/15.\n\n//\n//  Copyright 2015 Daniel C"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Formatters/ChartDefaultFillFormatter.swift",
    "chars": 1547,
    "preview": "//\n//  ChartDefaultFillFormatter.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 04/02/2016.\n//\n//  Copyright 2"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Formatters/ChartDefaultXAxisValueFormatter.swift",
    "chars": 645,
    "preview": "//\n//  ChartDefaultXAxisValueFormatter.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 27/2/15.\n//\n//  Copyrigh"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Formatters/ChartFillFormatter.swift",
    "chars": 739,
    "preview": "//\n//  ChartFillFormatter.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 6/3/15.\n//\n//  Copyright 2015 Daniel "
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Formatters/ChartXAxisValueFormatter.swift",
    "chars": 971,
    "preview": "//\n//  ChartXAxisValueFormatter.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 27/2/15.\n//\n//  Copyright 2015 "
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Highlight/BarChartHighlighter.swift",
    "chars": 6919,
    "preview": "//\n//  ChartBarHighlighter.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/7/15.\n\n//\n//  Copyright 2015 Dani"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Highlight/ChartHighlight.swift",
    "chars": 3414,
    "preview": "//\n//  ChartHighlight.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 23/2/15.\n\n//\n//  Copyright 2015 Daniel Co"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Highlight/ChartHighlighter.swift",
    "chars": 3655,
    "preview": "//\n//  ChartHighlighter.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/7/15.\n\n//\n//  Copyright 2015 Daniel "
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Highlight/ChartRange.swift",
    "chars": 1034,
    "preview": "//\n//  ChartRange.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/7/15.\n\n//\n//  Copyright 2015 Daniel Cohen "
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Highlight/CombinedHighlighter.swift",
    "chars": 2038,
    "preview": "//\n//  CombinedHighlighter.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/7/15.\n\n//\n//  Copyright 2015 Dani"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Highlight/HorizontalBarChartHighlighter.swift",
    "chars": 3610,
    "preview": "//\n//  HorizontalBarChartHighlighter.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 26/7/15.\n\n//\n//  Copyright"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Interfaces/BarChartDataProvider.swift",
    "chars": 598,
    "preview": "//\n//  BarChartDataProvider.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 27/2/15.\n//\n//  Copyright 2015 Dani"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Interfaces/BarLineScatterCandleBubbleChartDataProvider.swift",
    "chars": 699,
    "preview": "//\n//  BarLineScatterCandleBubbleChartDataProvider.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 27/2/15.\n//\n"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Interfaces/BubbleChartDataProvider.swift",
    "chars": 461,
    "preview": "//\n//  BubbleChartDataProvider.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 27/2/15.\n//\n//  Copyright 2015 D"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Interfaces/CandleChartDataProvider.swift",
    "chars": 461,
    "preview": "//\n//  CandleChartDataProvider.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 27/2/15.\n//\n//  Copyright 2015 D"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Interfaces/ChartDataProvider.swift",
    "chars": 980,
    "preview": "//\n//  ChartDataProvider.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 27/2/15.\n//\n//  Copyright 2015 Daniel "
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Interfaces/LineChartDataProvider.swift",
    "chars": 522,
    "preview": "//\n//  LineChartDataProvider.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 27/2/15.\n//\n//  Copyright 2015 Dan"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Interfaces/ScatterChartDataProvider.swift",
    "chars": 465,
    "preview": "//\n//  ScatterChartDataProvider.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 27/2/15.\n//\n//  Copyright 2015 "
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Jobs/AnimatedMoveViewJob.swift",
    "chars": 1486,
    "preview": "//\n//  AnimatedMoveChartViewJob.swift\n//  Charts\n//\n//  Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda\n//  A port of"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Jobs/AnimatedViewPortJob.swift",
    "chars": 3463,
    "preview": "//\n//  AnimatedViewPortJob.swift\n//  Charts\n//\n//  Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda\n//  A port of MPAn"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Jobs/AnimatedZoomViewJob.swift",
    "chars": 2970,
    "preview": "//\n//  AnimatedZoomChartViewJob.swift\n//  Charts\n//\n//  Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda\n//  A port of"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Jobs/ChartViewPortJob.swift",
    "chars": 1103,
    "preview": "//\n//  ChartViewPortJob.swift\n//  Charts\n//\n//  Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda\n//  A port of MPAndro"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Jobs/MoveChartViewJob.swift",
    "chars": 1159,
    "preview": "//\n//  MoveChartViewJob.swift\n//  Charts\n//\n//  Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda\n//  A port of MPAndro"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Jobs/ZoomChartViewJob.swift",
    "chars": 2129,
    "preview": "//\n//  ZoomChartViewJob.swift\n//  Charts\n//\n//  Copyright 2015 Daniel Cohen Gindi & Philipp Jahoda\n//  A port of MPAndro"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/BarChartRenderer.swift",
    "chars": 23528,
    "preview": "//\n//  BarChartRenderer.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Daniel Co"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/BubbleChartRenderer.swift",
    "chars": 11518,
    "preview": "//\n//  BubbleChartRenderer.swift\n//  Charts\n//\n//  Bubble chart implementation:\n//    Copyright 2015 Pierre-Marc Airoldi"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/CandleStickChartRenderer.swift",
    "chars": 14113,
    "preview": "//\n//  CandleStickChartRenderer.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 D"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/ChartAxisRendererBase.swift",
    "chars": 1561,
    "preview": "//\n//  ChartAxisRendererBase.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 3/3/15.\n//\n//  Copyright 2015 Dani"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/ChartDataRendererBase.swift",
    "chars": 1380,
    "preview": "//\n//  ChartDataRendererBase.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Dani"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/ChartLegendRenderer.swift",
    "chars": 15542,
    "preview": "//\n//  ChartLegendRenderer.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Daniel"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/ChartRendererBase.swift",
    "chars": 1454,
    "preview": "//\n//  ChartRendererBase.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 3/3/15.\n//\n//  Copyright 2015 Daniel C"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/ChartXAxisRenderer.swift",
    "chars": 14718,
    "preview": "//\n//  ChartXAxisRenderer.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 3/3/15.\n//\n//  Copyright 2015 Daniel "
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/ChartXAxisRendererBarChart.swift",
    "chars": 5892,
    "preview": "//\n//  ChartXAxisRendererBarChart.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 3/3/15.\n//\n//  Copyright 2015"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/ChartXAxisRendererHorizontalBarChart.swift",
    "chars": 13240,
    "preview": "//\n//  ChartXAxisRendererHorizontalBarChart.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 3/3/15.\n//\n//  Copy"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/ChartXAxisRendererRadarChart.swift",
    "chars": 2985,
    "preview": "//\n//  ChartXAxisRendererRadarChart.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 3/3/15.\n//\n//  Copyright 20"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/ChartYAxisRenderer.swift",
    "chars": 17274,
    "preview": "//\n//  ChartYAxisRenderer.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 3/3/15.\n//\n//  Copyright 2015 Daniel "
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/ChartYAxisRendererHorizontalBarChart.swift",
    "chars": 12090,
    "preview": "//\n//  ChartYAxisRendererHorizontalBarChart.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 3/3/15.\n//\n//  Copy"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/ChartYAxisRendererRadarChart.swift",
    "chars": 7905,
    "preview": "//\n//  ChartYAxisRendererRadarChart.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 3/3/15.\n//\n//  Copyright 20"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/CombinedChartRenderer.swift",
    "chars": 5737,
    "preview": "//\n//  CombinedChartRenderer.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Dani"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/HorizontalBarChartRenderer.swift",
    "chars": 20043,
    "preview": "//\n//  HorizontalBarChartRenderer.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/LineChartRenderer.swift",
    "chars": 26908,
    "preview": "//\n//  LineChartRenderer.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Daniel C"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/LineRadarChartRenderer.swift",
    "chars": 1723,
    "preview": "//\n//  LineRadarChartRenderer.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 27/01/2016.\n//\n//  Copyright 2015"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/LineScatterCandleRadarChartRenderer.swift",
    "chars": 1613,
    "preview": "//\n//  LineScatterCandleRadarChartRenderer.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 29/7/15.\n//\n//  Copy"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/PieChartRenderer.swift",
    "chars": 27872,
    "preview": "//\n//  PieChartRenderer.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Daniel Co"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/RadarChartRenderer.swift",
    "chars": 13704,
    "preview": "//\n//  RadarChartRenderer.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Daniel "
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Renderers/ScatterChartRenderer.swift",
    "chars": 16066,
    "preview": "//\n//  ScatterChartRenderer.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 4/3/15.\n//\n//  Copyright 2015 Danie"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Utils/ChartColorTemplates.swift",
    "chars": 7604,
    "preview": "//\n//  ChartColorTemplates.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 23/2/15.\n\n//\n//  Copyright 2015 Dani"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Utils/ChartFill.swift",
    "chars": 8757,
    "preview": "//\n//  ChartFill.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 27/01/2016.\n\n//\n//  Copyright 2015 Daniel Cohe"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Utils/ChartPlatform.swift",
    "chars": 15844,
    "preview": "import Foundation\n\n/** This file provides a thin abstraction layer atop of UIKit (iOS, tvOS) and Cocoa (OS X). The two A"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Utils/ChartSelectionDetail.swift",
    "chars": 2037,
    "preview": "//\n//  ChartSelectionDetail.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 23/2/15.\n\n//\n//  Copyright 2015 Dan"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Utils/ChartTransformer.swift",
    "chars": 7067,
    "preview": "//\n//  ChartTransformer.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 6/3/15.\n//\n//  Copyright 2015 Daniel Co"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Utils/ChartTransformerHorizontalBarChart.swift",
    "chars": 1050,
    "preview": "//\n//  ChartTransformerHorizontalBarChart.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 1/4/15.\n//\n//  Copyri"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Utils/ChartUtils.swift",
    "chars": 12170,
    "preview": "//\n//  Utils.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 23/2/15.\n\n//\n//  Copyright 2015 Daniel Cohen Gindi"
  },
  {
    "path": "Sublime/Pods/Charts/Charts/Classes/Utils/ChartViewPortHandler.swift",
    "chars": 15362,
    "preview": "//\n//  ChartViewPortHandler.swift\n//  Charts\n//\n//  Created by Daniel Cohen Gindi on 27/2/15.\n//\n//  Copyright 2015 Dani"
  },
  {
    "path": "Sublime/Pods/Charts/LICENSE",
    "chars": 11325,
    "preview": "Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licens"
  },
  {
    "path": "Sublime/Pods/Charts/README.md",
    "chars": 10447,
    "preview": "**Version 2.2.4**, synced to [MPAndroidChart #2e41714](https://github.com/PhilJay/MPAndroidChart/commit/2e41714)\n\n![alt "
  },
  {
    "path": "Sublime/Pods/DGElasticPullToRefresh/DGElasticPullToRefresh/DGElasticPullToRefreshConstants.swift",
    "chars": 1605,
    "preview": "/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 Danil Gontovnik\n\nPermission is hereby granted, free of charge, to any pers"
  },
  {
    "path": "Sublime/Pods/DGElasticPullToRefresh/DGElasticPullToRefresh/DGElasticPullToRefreshExtensions.swift",
    "chars": 6002,
    "preview": "/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 Danil Gontovnik\n\nPermission is hereby granted, free of charge, to any pers"
  },
  {
    "path": "Sublime/Pods/DGElasticPullToRefresh/DGElasticPullToRefresh/DGElasticPullToRefreshLoadingView.swift",
    "chars": 2106,
    "preview": "/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 Danil Gontovnik\n\nPermission is hereby granted, free of charge, to any pers"
  },
  {
    "path": "Sublime/Pods/DGElasticPullToRefresh/DGElasticPullToRefresh/DGElasticPullToRefreshLoadingViewCircle.swift",
    "chars": 4410,
    "preview": "/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 Danil Gontovnik\n\nPermission is hereby granted, free of charge, to any pers"
  },
  {
    "path": "Sublime/Pods/DGElasticPullToRefresh/DGElasticPullToRefresh/DGElasticPullToRefreshView.swift",
    "chars": 18019,
    "preview": "/*\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 Danil Gontovnik\n\nPermission is hereby granted, free of charge, to any pers"
  },
  {
    "path": "Sublime/Pods/DGElasticPullToRefresh/LICENSE",
    "chars": 1083,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2015 Danil Gontovnik\n\nPermission is hereby granted, free of charge, to any person o"
  },
  {
    "path": "Sublime/Pods/DGElasticPullToRefresh/README.md",
    "chars": 3912,
    "preview": "# DGElasticPullToRefresh\nElastic pull to refresh compontent developed in Swift\n\nInspired by this Dribbble post: [Pull Do"
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/AEFloatConverter.h",
    "chars": 5072,
    "preview": "//\n//  AEFloatConverter.h\n//  The Amazing Audio Engine\n//\n//  Created by Michael Tyson on 25/10/2012.\n//\n//  This softwa"
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/AEFloatConverter.m",
    "chars": 9630,
    "preview": "//\n//  AEFloatConverter.m\n//  The Amazing Audio Engine\n//\n//  Created by Michael Tyson on 25/10/2012.\n//\n//  This softwa"
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZAudio.h",
    "chars": 11768,
    "preview": "//\n//  EZAudio.h\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 11/21/13.\n//  Copyright (c) 2013 Syed Haris Ali. All ri"
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZAudio.m",
    "chars": 13872,
    "preview": "//\n//  EZAudio.m\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 11/21/13.\n//  Copyright (c) 2013 Syed Haris Ali. All ri"
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZAudioFile.h",
    "chars": 12182,
    "preview": "//\n//  EZAudioFile.h\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 12/1/13.\n//  Copyright (c) 2013 Syed Haris Ali. All"
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZAudioFile.m",
    "chars": 12281,
    "preview": "//\n//  EZAudioFile.m\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 12/1/13.\n//  Copyright (c) 2013 Syed Haris Ali. All"
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZAudioPlayer.h",
    "chars": 15425,
    "preview": "//\n//  EZAudioPlayer.h\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 1/16/14.\n//  Copyright (c) 2014 Syed Haris Ali. A"
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZAudioPlayer.m",
    "chars": 9468,
    "preview": "//\n//  EZAudioPlayer.m\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 1/16/14.\n//  Copyright (c) 2014 Syed Haris Ali. A"
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZAudioPlot.h",
    "chars": 3464,
    "preview": "//\n//  EZAudioPlot.h\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 9/2/13.\n//  Copyright (c) 2013 Syed Haris Ali. All "
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZAudioPlot.m",
    "chars": 8293,
    "preview": "//\n//  EZAudioPlot.m\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 9/2/13.\n//  Copyright (c) 2013 Syed Haris Ali. All "
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZAudioPlotGL.h",
    "chars": 9464,
    "preview": "//\n//  EZAudioPlotGL.h\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 11/22/13.\n//  Copyright (c) 2013 Syed Haris Ali. "
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZAudioPlotGL.m",
    "chars": 23322,
    "preview": "//\n//  EZAudioPlotGL.m\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 11/22/13.\n//  Copyright (c) 2013 Syed Haris Ali. "
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZAudioPlotGLKViewController.h",
    "chars": 6068,
    "preview": "//\n//  EZAudioPlotGLKViewController.h\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 11/22/13.\n//  Copyright (c) 2013 S"
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZAudioPlotGLKViewController.m",
    "chars": 14384,
    "preview": "//\n//  EZAudioPlotGLKViewController.m\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 11/22/13.\n//  Copyright (c) 2013 S"
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZMicrophone.h",
    "chars": 14761,
    "preview": "//\n//  EZMicrophone.h\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 9/2/13.\n//  Copyright (c) 2013 Syed Haris Ali. All"
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZMicrophone.m",
    "chars": 24476,
    "preview": "//\n//  EZMicrophone.m\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 9/2/13.\n//  Copyright (c) 2013 Syed Haris Ali. All"
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZOutput.h",
    "chars": 9026,
    "preview": "//\n//  EZOutput.h\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 12/2/13.\n//  Copyright (c) 2013 Syed Haris Ali. All ri"
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZOutput.m",
    "chars": 13790,
    "preview": "//\n//  EZOutput.m\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 12/2/13.\n//  Copyright (c) 2013 Syed Haris Ali. All ri"
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZPlot.h",
    "chars": 5663,
    "preview": "//\n//  EZPlot.h\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 11/24/13.\n//  Copyright (c) 2013 Syed Haris Ali. All rig"
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZPlot.m",
    "chars": 1503,
    "preview": "//\n//  EZPlot.m\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 11/24/13.\n//  Copyright (c) 2013 Syed Haris Ali. All rig"
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZRecorder.h",
    "chars": 6136,
    "preview": "//\n//  EZRecorder.h\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 12/1/13.\n//  Copyright (c) 2013 Syed Haris Ali. All "
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/EZRecorder.m",
    "chars": 7223,
    "preview": "//\n//  EZRecorder.m\n//  EZAudio\n//\n//  Created by Syed Haris Ali on 12/1/13.\n//  Copyright (c) 2013 Syed Haris Ali. All "
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/TPCircularBuffer.c",
    "chars": 5570,
    "preview": "//\n//  TPCircularBuffer.c\n//  Circular/Ring buffer implementation\n//\n//  https://github.com/michaeltyson/TPCircularBuffe"
  },
  {
    "path": "Sublime/Pods/EZAudio/EZAudio/TPCircularBuffer.h",
    "chars": 6504,
    "preview": "//\n//  TPCircularBuffer.h\n//  Circular/Ring buffer implementation\n//\n//  https://github.com/michaeltyson/TPCircularBuffe"
  },
  {
    "path": "Sublime/Pods/EZAudio/LICENSE",
    "chars": 1089,
    "preview": "The MIT License (MIT)\n\nEZAudio\nCopyright (c) 2013 Syed Haris Ali\n\nPermission is hereby granted, free of charge, to any p"
  },
  {
    "path": "Sublime/Pods/EZAudio/README.md",
    "chars": 27969,
    "preview": "![alt text](https://s3-us-west-1.amazonaws.com/ezaudio-media/EZAudioJumbo-Alt.png \"EZAudioLogo\")\n\n#EZAudio\nA simple, int"
  },
  {
    "path": "Sublime/Pods/Gifu/Carthage/Checkouts/Runes/Source/Runes.swift",
    "chars": 1136,
    "preview": "/**\nmap a function over a value with context\n\nExpected function type: `(a -> b) -> f a -> f b`\n\n*/\ninfix operator <^> {\n"
  },
  {
    "path": "Sublime/Pods/Gifu/LICENSE",
    "chars": 1181,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2014 Kaishin & Co.\n\nPermission is hereby granted, free of charge, to any person obt"
  },
  {
    "path": "Sublime/Pods/Gifu/README.md",
    "chars": 2590,
    "preview": "# ![Gifu](https://db.tt/mZ1iMNXO)\n\nAdds performant animated GIF support to UIKit. If you're looking for the Japanese pre"
  },
  {
    "path": "Sublime/Pods/Gifu/Source/AnimatableImageView.swift",
    "chars": 3060,
    "preview": "import UIKit\n\n/// A subclass of `UIImageView` that can be animated using an image name string or raw data.\npublic class "
  },
  {
    "path": "Sublime/Pods/Gifu/Source/AnimatedFrame.swift",
    "chars": 256,
    "preview": "/// Keeps a reference to an `UIImage` instance and its duration as a GIF frame.\nstruct AnimatedFrame {\n  let image: UIIm"
  },
  {
    "path": "Sublime/Pods/Gifu/Source/Animator.swift",
    "chars": 4221,
    "preview": "import UIKit\nimport ImageIO\n\n/// Responsible for storing and updating the frames of a `AnimatableImageView` instance via"
  },
  {
    "path": "Sublime/Pods/Gifu/Source/ArrayExtension.swift",
    "chars": 117,
    "preview": "extension Array {\n  subscript(safe index: Int) -> Element? {\n    return indices ~= index ? self[index] : .None\n  }\n}\n"
  },
  {
    "path": "Sublime/Pods/Gifu/Source/CGSizeExtension.swift",
    "chars": 1358,
    "preview": "extension CGSize {\n  /// Calculates the aspect ratio of the size.\n  ///\n  /// - returns: aspectRatio The aspect ratio of"
  },
  {
    "path": "Sublime/Pods/Gifu/Source/FunctionalHelpers.swift",
    "chars": 371,
    "preview": "func <^> <T, U>(@noescape f: T -> U, a: T?) -> U? {\n  return a.map(f)\n}\nfunc <*> <T, U>(f: (T -> U)?, a: T?) -> U? {\n  r"
  }
]

// ... and 563 more files (download for full content)

About this extraction

This page contains the full source code of the Urinx/SublimeCode GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 763 files (87.4 MB), approximately 1.1M tokens, and a symbol index with 337 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!