Full Code of developerjet/JetChat for AI

master 859faaa91272 cached
2279 files
18.0 MB
4.8M tokens
4426 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (19,527K chars total). Download the full file to get everything.
Repository: developerjet/JetChat
Branch: master
Commit: 859faaa91272
Files: 2279
Total size: 18.0 MB

Directory structure:
gitextract_i1lra9d3/

├── .gitignore
├── JetChat/
│   ├── FY-IMChat/
│   │   ├── Assets.xcassets/
│   │   │   ├── AppIcon.appiconset/
│   │   │   │   └── Contents.json
│   │   │   ├── ChatView/
│   │   │   │   ├── Contents.json
│   │   │   │   ├── MessageVideoDownload.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── MessageVideoPlay.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── ReceiverImageNodeBorder.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── ic_avatar_placeholder.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── ic_group_placeholder.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── ic_msg_forward_n.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── ic_msg_forward_s.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_receiver_background_highlight.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_receiver_background_normal.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_receiver_background_reversed.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_sender_background_highlight.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_sender_background_normal.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_sender_background_reversed.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_voice_receiver_normal.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_voice_receiver_playing_1.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_voice_receiver_playing_2.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_voice_receiver_playing_3.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_voice_sender_normal.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_voice_sender_playing_1.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_voice_sender_playing_2.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_voice_sender_playing_3.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── play_btn_normal.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── play_btn_pressed.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── player_back_button.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── player_suspend_button.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── Common/
│   │   │   │   ├── Contents.json
│   │   │   │   ├── ic_list_selection.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── ic_placeholder.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── Contents.json
│   │   │   ├── LaunchImage.launchimage/
│   │   │   │   └── Contents.json
│   │   │   ├── Mine/
│   │   │   │   ├── Contents.json
│   │   │   │   └── icon_arrow_right.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── Moments/
│   │   │   │   ├── Contents.json
│   │   │   │   ├── ic_album_reflash.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── ic_comment_normal.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── ic_comment_selected.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── ic_star_normal.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── ic_star_selected.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── nav_camera_black.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── nav_camera_white.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── Nav/
│   │   │   │   ├── Contents.json
│   │   │   │   ├── icon_more_add.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── nav_back_black.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── nav_back_white.imageset/
│   │   │   │       └── Contents.json
│   │   │   └── TabBar/
│   │   │       ├── Contents.json
│   │   │       ├── ic_tabbar01_normal.imageset/
│   │   │       │   └── Contents.json
│   │   │       ├── ic_tabbar01_selected.imageset/
│   │   │       │   └── Contents.json
│   │   │       ├── ic_tabbar02_normal.imageset/
│   │   │       │   └── Contents.json
│   │   │       ├── ic_tabbar02_selected.imageset/
│   │   │       │   └── Contents.json
│   │   │       ├── ic_tabbar03_normal.imageset/
│   │   │       │   └── Contents.json
│   │   │       ├── ic_tabbar03_selected.imageset/
│   │   │       │   └── Contents.json
│   │   │       ├── ic_tabbar04_normal.imageset/
│   │   │       │   └── Contents.json
│   │   │       └── ic_tabbar04_selected.imageset/
│   │   │           └── Contents.json
│   │   ├── Classes/
│   │   │   ├── AppDelegate/
│   │   │   │   ├── AppDelegate+Utils.swift
│   │   │   │   ├── AppDelegate+Wcdb.swift
│   │   │   │   └── AppDelegate.swift
│   │   │   ├── Base/
│   │   │   │   ├── FYBaseIGListViewController.swift
│   │   │   │   ├── FYBaseNavigationController.swift
│   │   │   │   ├── FYBaseTabBarController.swift
│   │   │   │   ├── FYBaseViewController.swift
│   │   │   │   ├── Model/
│   │   │   │   │   └── FYCellDataConfig.swift
│   │   │   │   └── ViewModel/
│   │   │   │       └── BaseViewModel.swift
│   │   │   ├── Common/
│   │   │   │   └── AppCommon.swift
│   │   │   ├── Extensions/
│   │   │   │   ├── Array/
│   │   │   │   │   └── Array+Extension.swift
│   │   │   │   ├── Dictionary/
│   │   │   │   │   └── Dictionary+Exted.swift
│   │   │   │   ├── Notification/
│   │   │   │   │   └── Notification+Name.swift
│   │   │   │   ├── RxSwift/
│   │   │   │   │   ├── JFButton+Rx.swift
│   │   │   │   │   ├── MJRefresh+Rx.swift
│   │   │   │   │   └── Observable+Operators.swift
│   │   │   │   ├── SnapKit/
│   │   │   │   │   ├── ConstraintArray+Extensions.swift
│   │   │   │   │   └── ConstraintArrayDSL.swift
│   │   │   │   ├── Strings/
│   │   │   │   │   ├── String+Date.swift
│   │   │   │   │   └── String+Extension.swift
│   │   │   │   ├── UIColor/
│   │   │   │   │   └── UIColor+Extension.swift
│   │   │   │   ├── UIKit/
│   │   │   │   │   ├── UIAlert+Extension.swift
│   │   │   │   │   ├── UIButton+Extension.swift
│   │   │   │   │   ├── UIFont+PingFang.swift
│   │   │   │   │   ├── UIImage+Extension.swift
│   │   │   │   │   ├── UIImageView+Kingfisher.swift
│   │   │   │   │   ├── UILabel+Extension.swift
│   │   │   │   │   ├── UINavBarItem+Extension.swift
│   │   │   │   │   └── UITableView+Extension.swift
│   │   │   │   └── UIView/
│   │   │   │       ├── UIView+Extensions.swift
│   │   │   │       └── UIViewController+Extend.swift
│   │   │   ├── Libraries/
│   │   │   │   ├── ActionSheet/
│   │   │   │   │   ├── FYActionSheet.swift
│   │   │   │   │   └── FYActionSheetCell.swift
│   │   │   │   ├── HUDProgress/
│   │   │   │   │   ├── HUDAssets.bundle/
│   │   │   │   │   │   └── Info.plist
│   │   │   │   │   └── MBConfiguredHUD.swift
│   │   │   │   ├── NavPopup/
│   │   │   │   │   ├── Cell/
│   │   │   │   │   │   └── FYNavDropMenuCell.swift
│   │   │   │   │   └── FYNavPopuListMenu.swift
│   │   │   │   └── Refreshing/
│   │   │   │       └── FYMomentsHeaderRefresh.swift
│   │   │   ├── MainModule/
│   │   │   │   ├── ChatRoom/
│   │   │   │   │   ├── Controller/
│   │   │   │   │   │   ├── FYChatBaseViewController.swift
│   │   │   │   │   │   ├── FYChatRoomListViewController.swift
│   │   │   │   │   │   └── FYMessageForwardViewController.swift
│   │   │   │   │   ├── Model/
│   │   │   │   │   │   ├── FYMessageBaseModel.swift
│   │   │   │   │   │   ├── FYMessageChatModel.swift
│   │   │   │   │   │   └── FYMessageItem.swift
│   │   │   │   │   ├── View/
│   │   │   │   │   │   ├── FYImageMessageCell.swift
│   │   │   │   │   │   ├── FYMessageBaseCell.swift
│   │   │   │   │   │   ├── FYTextMessageCell.swift
│   │   │   │   │   │   └── FYVideoMessageCell.swift
│   │   │   │   │   └── ViewModel/
│   │   │   │   │       └── FYMessageViewModel.swift
│   │   │   │   ├── Contacts/
│   │   │   │   │   ├── Controller/
│   │   │   │   │   │   ├── FYContactsInfoViewController.swift
│   │   │   │   │   │   ├── FYContactsListViewController.swift
│   │   │   │   │   │   └── FYEditChatInfoViewController.swift
│   │   │   │   │   └── View/
│   │   │   │   │       ├── FYContactsInfoView.swift
│   │   │   │   │       └── FYContactsTableViewCell.swift
│   │   │   │   ├── Conversation/
│   │   │   │   │   ├── Controller/
│   │   │   │   │   │   └── FYSesstionListViewController.swift
│   │   │   │   │   └── View/
│   │   │   │   │       └── FYConversationCell.swift
│   │   │   │   ├── Mine/
│   │   │   │   │   ├── Controller/
│   │   │   │   │   │   ├── FYMineViewController.swift
│   │   │   │   │   │   ├── FYSettingViewController.swift
│   │   │   │   │   │   └── FYThemeSelectionListVC.swift
│   │   │   │   │   └── View/
│   │   │   │   │       └── FYFastGridListView.swift
│   │   │   │   ├── Moments/
│   │   │   │   │   ├── FYMomentsViewController.swift
│   │   │   │   │   ├── JSONData/
│   │   │   │   │   │   ├── moments1.json
│   │   │   │   │   │   └── moments2.json
│   │   │   │   │   ├── Model/
│   │   │   │   │   │   ├── FYCommentInfo.swift
│   │   │   │   │   │   ├── FYMoUserInfo.swift
│   │   │   │   │   │   └── FYMomentInfo.swift
│   │   │   │   │   ├── Sections/
│   │   │   │   │   │   └── FYMomentBindingSection.swift
│   │   │   │   │   └── View/
│   │   │   │   │       ├── Cell/
│   │   │   │   │       │   ├── CommentContentCell.swift
│   │   │   │   │       │   ├── CommentContentView.swift
│   │   │   │   │       │   ├── CommentInputView.swift
│   │   │   │   │       │   ├── CommentThumbView.swift
│   │   │   │   │       │   ├── MomentBottomCell.swift
│   │   │   │   │       │   ├── MomentCommentCell.swift
│   │   │   │   │       │   ├── MomentHeaderCell.swift
│   │   │   │   │       │   ├── MomentHeaderImageCell.swift
│   │   │   │   │       │   ├── MomentLocationCell.swift
│   │   │   │   │       │   └── MomentTopCell.swift
│   │   │   │   │       ├── FYMomentNavBar.swift
│   │   │   │   │       ├── MomentLabel/
│   │   │   │   │       │   ├── FYLabel.swift
│   │   │   │   │       │   └── FYLabelType.swift
│   │   │   │   │       ├── NineImageView.swift
│   │   │   │   │       ├── OperateMenuView.swift
│   │   │   │   │       └── TextView/
│   │   │   │   │           └── FYTextView.swift
│   │   │   │   └── QrScan/
│   │   │   │       └── ScanQRCodeViewController.swift
│   │   │   ├── Resource/
│   │   │   │   ├── Languages/
│   │   │   │   │   ├── en.lproj/
│   │   │   │   │   │   ├── InfoPlist.strings
│   │   │   │   │   │   └── Localizable.strings
│   │   │   │   │   └── zh-Hans.lproj/
│   │   │   │   │       ├── InfoPlist.strings
│   │   │   │   │       ├── LWLocalizations.strings
│   │   │   │   │       └── Localizable.strings
│   │   │   │   ├── LaunchScreen.storyboard
│   │   │   │   └── R.generated.swift
│   │   │   ├── Thirdparty/
│   │   │   │   ├── BottomPopupController/
│   │   │   │   │   ├── BottomPopupDismissAnimator.swift
│   │   │   │   │   ├── BottomPopupDismissInteractionController.swift
│   │   │   │   │   ├── BottomPopupNavigationController.swift
│   │   │   │   │   ├── BottomPopupPresentAnimator.swift
│   │   │   │   │   ├── BottomPopupPresentationController.swift
│   │   │   │   │   ├── BottomPopupTransitionHandler.swift
│   │   │   │   │   ├── BottomPopupUtils.swift
│   │   │   │   │   ├── BottomPopupViewController.swift
│   │   │   │   │   └── CSBottomPopupNavigationController.swift
│   │   │   │   ├── NavigationHandy/
│   │   │   │   │   ├── NSObject+BinAdd.h
│   │   │   │   │   ├── NSObject+BinAdd.m
│   │   │   │   │   ├── UINavigationController+Extensions.h
│   │   │   │   │   └── UINavigationController+Extensions.m
│   │   │   │   ├── RxActivityIndicator/
│   │   │   │   │   └── ActivityIndicator.swift
│   │   │   │   └── RxErrorTracker/
│   │   │   │       └── ErrorTracker.swift
│   │   │   └── Utilites/
│   │   │       ├── DataBase/
│   │   │       │   ├── WCDBManager/
│   │   │       │   │   └── DBQuery/
│   │   │       │   │       ├── FYDBQueryHelper.swift
│   │   │       │   │       └── FYMessageUserModel.swift
│   │   │       │   ├── WCDataBaseManager.swift
│   │   │       │   └── WCDataBaseTable.swift
│   │   │       ├── FPSLabel/
│   │   │       │   ├── FPSLabel.swift
│   │   │       │   ├── WeakProxy.h
│   │   │       │   └── WeakProxy.m
│   │   │       ├── FileSizeManager/
│   │   │       │   ├── FYFileSizeManager.swift
│   │   │       │   └── FYUserDefaultManager.swift
│   │   │       ├── Helpers/
│   │   │       │   ├── CountDownHandy.swift
│   │   │       │   └── LanguageManager.swift
│   │   │       ├── KeyboardCore/
│   │   │       │   ├── Cell/
│   │   │       │   │   ├── ChatAppleEmojiCell.swift
│   │   │       │   │   ├── ChatKeyboardFlowLayout.swift
│   │   │       │   │   └── ChatMoreMenuCell.swift
│   │   │       │   ├── ChatEmojiListView.swift
│   │   │       │   ├── ChatGrowingTextView.swift
│   │   │       │   ├── ChatKeyboard+Extensions.swift
│   │   │       │   ├── ChatKeyboardView.swift
│   │   │       │   ├── ChatMoreMenuView.swift
│   │   │       │   ├── Helper/
│   │   │       │   │   ├── ChatEmotionAttachment.swift
│   │   │       │   │   ├── ChatEmotionHelper.swift
│   │   │       │   │   └── ChatFindEmotion.swift
│   │   │       │   ├── Model/
│   │   │       │   │   ├── ChatEmoticon.swift
│   │   │       │   │   └── ChatMoreMnueConfig.swift
│   │   │       │   └── Resource/
│   │   │       │       ├── Emoji/
│   │   │       │       │   └── Emoticons.bundle/
│   │   │       │       │       └── com.apple.emoji/
│   │   │       │       │           └── info.plist
│   │   │       │       └── Emotion/
│   │   │       │           └── Expression.plist
│   │   │       └── Theme/
│   │   │           ├── FYDarkTheme.swift
│   │   │           ├── FYLightTheme.swift
│   │   │           ├── FYThemeCenter.swift
│   │   │           └── FYThemeColors.swift
│   │   ├── FY-IMChat.entitlements
│   │   ├── FYObjcBridge.h
│   │   └── Info.plist
│   ├── FY-IMChat.xcodeproj/
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace/
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcshareddata/
│   │   │       └── IDEWorkspaceChecks.plist
│   │   └── xcshareddata/
│   │       └── xcschemes/
│   │           └── FY-IMChat.xcscheme
│   ├── FY-IMChat.xcworkspace/
│   │   ├── contents.xcworkspacedata
│   │   └── xcshareddata/
│   │       └── IDEWorkspaceChecks.plist
│   ├── FY-IMChatTests/
│   │   ├── FY_IMChatTests.swift
│   │   └── Info.plist
│   ├── FY-IMChatUITests/
│   │   ├── FY_IMChatUITests.swift
│   │   └── Info.plist
│   ├── JetChatWidget/
│   │   ├── Assets.xcassets/
│   │   │   ├── AccentColor.colorset/
│   │   │   │   └── Contents.json
│   │   │   ├── AppIcon.appiconset/
│   │   │   │   └── Contents.json
│   │   │   ├── Contents.json
│   │   │   ├── WidgetBackground.colorset/
│   │   │   │   └── Contents.json
│   │   │   └── icon_widget_bg.imageset/
│   │   │       └── Contents.json
│   │   ├── Info.plist
│   │   ├── JetChatWidget.intentdefinition
│   │   └── JetChatWidget.swift
│   ├── JetChatWidgetExtension.entitlements
│   ├── Podfile
│   └── Pods/
│       ├── Alamofire/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Source/
│       │       ├── AFError.swift
│       │       ├── Alamofire.swift
│       │       ├── AlamofireExtended.swift
│       │       ├── AuthenticationInterceptor.swift
│       │       ├── CachedResponseHandler.swift
│       │       ├── Combine.swift
│       │       ├── Concurrency.swift
│       │       ├── DispatchQueue+Alamofire.swift
│       │       ├── EventMonitor.swift
│       │       ├── HTTPHeaders.swift
│       │       ├── HTTPMethod.swift
│       │       ├── MultipartFormData.swift
│       │       ├── MultipartUpload.swift
│       │       ├── NetworkReachabilityManager.swift
│       │       ├── Notifications.swift
│       │       ├── OperationQueue+Alamofire.swift
│       │       ├── ParameterEncoder.swift
│       │       ├── ParameterEncoding.swift
│       │       ├── Protected.swift
│       │       ├── RedirectHandler.swift
│       │       ├── Request.swift
│       │       ├── RequestInterceptor.swift
│       │       ├── RequestTaskMap.swift
│       │       ├── Response.swift
│       │       ├── ResponseSerialization.swift
│       │       ├── Result+Alamofire.swift
│       │       ├── RetryPolicy.swift
│       │       ├── ServerTrustEvaluation.swift
│       │       ├── Session.swift
│       │       ├── SessionDelegate.swift
│       │       ├── StringEncoding+Alamofire.swift
│       │       ├── URLConvertible+URLRequestConvertible.swift
│       │       ├── URLEncodedFormEncoder.swift
│       │       ├── URLRequest+Alamofire.swift
│       │       ├── URLSessionConfiguration+Alamofire.swift
│       │       └── Validation.swift
│       ├── Alamofire.xcodeproj/
│       │   └── project.pbxproj
│       ├── FDFullscreenPopGesture/
│       │   ├── FDFullscreenPopGesture/
│       │   │   ├── UINavigationController+FDFullscreenPopGesture.h
│       │   │   └── UINavigationController+FDFullscreenPopGesture.m
│       │   ├── LICENSE
│       │   └── README.md
│       ├── FDFullscreenPopGesture.xcodeproj/
│       │   └── project.pbxproj
│       ├── HandyJSON/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Source/
│       │       ├── AnyExtensions.swift
│       │       ├── BuiltInBasicType.swift
│       │       ├── BuiltInBridgeType.swift
│       │       ├── CBridge.swift
│       │       ├── Configuration.swift
│       │       ├── ContextDescriptorType.swift
│       │       ├── CustomDateFormatTransform.swift
│       │       ├── DataTransform.swift
│       │       ├── DateFormatterTransform.swift
│       │       ├── DateTransform.swift
│       │       ├── Deserializer.swift
│       │       ├── EnumTransform.swift
│       │       ├── EnumType.swift
│       │       ├── Export.swift
│       │       ├── ExtendCustomBasicType.swift
│       │       ├── ExtendCustomModelType.swift
│       │       ├── FieldDescriptor.swift
│       │       ├── HandyJSON.h
│       │       ├── HelpingMapper.swift
│       │       ├── HexColorTransform.swift
│       │       ├── ISO8601DateTransform.swift
│       │       ├── Logger.swift
│       │       ├── MangledName.swift
│       │       ├── Measuable.swift
│       │       ├── Metadata.swift
│       │       ├── NSDecimalNumberTransform.swift
│       │       ├── OtherExtension.swift
│       │       ├── PointerType.swift
│       │       ├── Properties.swift
│       │       ├── PropertyInfo.swift
│       │       ├── ReflectionHelper.swift
│       │       ├── Serializer.swift
│       │       ├── TransformOf.swift
│       │       ├── TransformType.swift
│       │       ├── Transformable.swift
│       │       └── URLTransform.swift
│       ├── HandyJSON.xcodeproj/
│       │   └── project.pbxproj
│       ├── IGListDiffKit/
│       │   ├── LICENSE.md
│       │   ├── README.md
│       │   └── Source/
│       │       └── IGListDiffKit/
│       │           ├── IGListAssert.h
│       │           ├── IGListBatchUpdateData.h
│       │           ├── IGListBatchUpdateData.mm
│       │           ├── IGListCompatibility.h
│       │           ├── IGListDiff.h
│       │           ├── IGListDiff.mm
│       │           ├── IGListDiffKit.h
│       │           ├── IGListDiffable.h
│       │           ├── IGListExperiments.h
│       │           ├── IGListIndexPathResult.h
│       │           ├── IGListIndexPathResult.m
│       │           ├── IGListIndexSetResult.h
│       │           ├── IGListIndexSetResult.m
│       │           ├── IGListMacros.h
│       │           ├── IGListMoveIndex.h
│       │           ├── IGListMoveIndex.m
│       │           ├── IGListMoveIndexPath.h
│       │           ├── IGListMoveIndexPath.m
│       │           ├── Internal/
│       │           │   ├── IGListIndexPathResultInternal.h
│       │           │   ├── IGListIndexSetResultInternal.h
│       │           │   ├── IGListMoveIndexInternal.h
│       │           │   └── IGListMoveIndexPathInternal.h
│       │           ├── NSNumber+IGListDiffable.h
│       │           ├── NSNumber+IGListDiffable.m
│       │           ├── NSString+IGListDiffable.h
│       │           └── NSString+IGListDiffable.m
│       ├── IGListDiffKit.xcodeproj/
│       │   └── project.pbxproj
│       ├── IGListKit/
│       │   ├── LICENSE.md
│       │   ├── README.md
│       │   └── Source/
│       │       ├── IGListDiffKit/
│       │       │   └── Internal/
│       │       │       ├── IGListIndexPathResultInternal.h
│       │       │       ├── IGListIndexSetResultInternal.h
│       │       │       ├── IGListMoveIndexInternal.h
│       │       │       └── IGListMoveIndexPathInternal.h
│       │       └── IGListKit/
│       │           ├── IGListAdapter.h
│       │           ├── IGListAdapter.m
│       │           ├── IGListAdapterDataSource.h
│       │           ├── IGListAdapterDelegate.h
│       │           ├── IGListAdapterMoveDelegate.h
│       │           ├── IGListAdapterPerformanceDelegate.h
│       │           ├── IGListAdapterUpdateListener.h
│       │           ├── IGListAdapterUpdater.h
│       │           ├── IGListAdapterUpdater.m
│       │           ├── IGListAdapterUpdaterDelegate.h
│       │           ├── IGListBatchContext.h
│       │           ├── IGListBindable.h
│       │           ├── IGListBindingSectionController.h
│       │           ├── IGListBindingSectionController.m
│       │           ├── IGListBindingSectionControllerDataSource.h
│       │           ├── IGListBindingSectionControllerSelectionDelegate.h
│       │           ├── IGListCollectionContext.h
│       │           ├── IGListCollectionScrollingTraits.h
│       │           ├── IGListCollectionView.h
│       │           ├── IGListCollectionView.m
│       │           ├── IGListCollectionViewDelegateLayout.h
│       │           ├── IGListCollectionViewLayout.h
│       │           ├── IGListCollectionViewLayout.mm
│       │           ├── IGListCollectionViewLayoutCompatible.h
│       │           ├── IGListDisplayDelegate.h
│       │           ├── IGListGenericSectionController.h
│       │           ├── IGListGenericSectionController.m
│       │           ├── IGListKit.h
│       │           ├── IGListReloadDataUpdater.h
│       │           ├── IGListReloadDataUpdater.m
│       │           ├── IGListScrollDelegate.h
│       │           ├── IGListSectionController.h
│       │           ├── IGListSectionController.m
│       │           ├── IGListSingleSectionController.h
│       │           ├── IGListSingleSectionController.m
│       │           ├── IGListSupplementaryViewSource.h
│       │           ├── IGListTransitionDelegate.h
│       │           ├── IGListUpdatingDelegate.h
│       │           ├── IGListWorkingRangeDelegate.h
│       │           └── Internal/
│       │               ├── IGListAdapter+DebugDescription.h
│       │               ├── IGListAdapter+DebugDescription.m
│       │               ├── IGListAdapter+UICollectionView.h
│       │               ├── IGListAdapter+UICollectionView.m
│       │               ├── IGListAdapterInternal.h
│       │               ├── IGListAdapterProxy.h
│       │               ├── IGListAdapterProxy.m
│       │               ├── IGListAdapterUpdater+DebugDescription.h
│       │               ├── IGListAdapterUpdater+DebugDescription.m
│       │               ├── IGListAdapterUpdaterInternal.h
│       │               ├── IGListArrayUtilsInternal.h
│       │               ├── IGListBatchUpdateData+DebugDescription.h
│       │               ├── IGListBatchUpdateData+DebugDescription.m
│       │               ├── IGListBatchUpdateState.h
│       │               ├── IGListBatchUpdates.h
│       │               ├── IGListBatchUpdates.m
│       │               ├── IGListBindingSectionController+DebugDescription.h
│       │               ├── IGListBindingSectionController+DebugDescription.m
│       │               ├── IGListCollectionViewLayoutInternal.h
│       │               ├── IGListDebugger.h
│       │               ├── IGListDebugger.m
│       │               ├── IGListDebuggingUtilities.h
│       │               ├── IGListDebuggingUtilities.m
│       │               ├── IGListDisplayHandler.h
│       │               ├── IGListDisplayHandler.m
│       │               ├── IGListReloadIndexPath.h
│       │               ├── IGListReloadIndexPath.m
│       │               ├── IGListSectionControllerInternal.h
│       │               ├── IGListSectionMap+DebugDescription.h
│       │               ├── IGListSectionMap+DebugDescription.m
│       │               ├── IGListSectionMap.h
│       │               ├── IGListSectionMap.m
│       │               ├── IGListWorkingRangeHandler.h
│       │               ├── IGListWorkingRangeHandler.mm
│       │               ├── UICollectionView+DebugDescription.h
│       │               ├── UICollectionView+DebugDescription.m
│       │               ├── UICollectionView+IGListBatchUpdateData.h
│       │               ├── UICollectionView+IGListBatchUpdateData.m
│       │               ├── UICollectionViewLayout+InteractiveReordering.h
│       │               ├── UICollectionViewLayout+InteractiveReordering.m
│       │               ├── UIScrollView+IGListKit.h
│       │               └── UIScrollView+IGListKit.m
│       ├── IGListKit.xcodeproj/
│       │   └── project.pbxproj
│       ├── IQKeyboardManagerSwift/
│       │   ├── IQKeyboardManagerSwift/
│       │   │   ├── Categories/
│       │   │   │   ├── IQNSArray+Sort.swift
│       │   │   │   ├── IQUIScrollView+Additions.swift
│       │   │   │   ├── IQUITextFieldView+Additions.swift
│       │   │   │   ├── IQUIView+Hierarchy.swift
│       │   │   │   └── IQUIViewController+Additions.swift
│       │   │   ├── Constants/
│       │   │   │   ├── IQKeyboardManagerConstants.swift
│       │   │   │   └── IQKeyboardManagerConstantsInternal.swift
│       │   │   ├── IQKeyboardManager+Debug.swift
│       │   │   ├── IQKeyboardManager+Internal.swift
│       │   │   ├── IQKeyboardManager+OrientationNotification.swift
│       │   │   ├── IQKeyboardManager+Position.swift
│       │   │   ├── IQKeyboardManager+Toolbar.swift
│       │   │   ├── IQKeyboardManager+UIKeyboardNotification.swift
│       │   │   ├── IQKeyboardManager+UITextFieldViewNotification.swift
│       │   │   ├── IQKeyboardManager.swift
│       │   │   ├── IQKeyboardReturnKeyHandler.swift
│       │   │   ├── IQTextView/
│       │   │   │   └── IQTextView.swift
│       │   │   └── IQToolbar/
│       │   │       ├── IQBarButtonItem.swift
│       │   │       ├── IQInvocation.swift
│       │   │       ├── IQPreviousNextView.swift
│       │   │       ├── IQTitleBarButtonItem.swift
│       │   │       ├── IQToolbar.swift
│       │   │       └── IQUIView+IQKeyboardToolbar.swift
│       │   ├── LICENSE.md
│       │   └── README.md
│       ├── IQKeyboardManagerSwift.xcodeproj/
│       │   └── project.pbxproj
│       ├── Kingfisher/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Sources/
│       │       ├── Cache/
│       │       │   ├── CacheSerializer.swift
│       │       │   ├── DiskStorage.swift
│       │       │   ├── FormatIndicatedCacheSerializer.swift
│       │       │   ├── ImageCache.swift
│       │       │   ├── MemoryStorage.swift
│       │       │   └── Storage.swift
│       │       ├── Extensions/
│       │       │   ├── ImageView+Kingfisher.swift
│       │       │   ├── NSButton+Kingfisher.swift
│       │       │   ├── NSTextAttachment+Kingfisher.swift
│       │       │   ├── TVMonogramView+Kingfisher.swift
│       │       │   ├── UIButton+Kingfisher.swift
│       │       │   └── WKInterfaceImage+Kingfisher.swift
│       │       ├── General/
│       │       │   ├── ImageSource/
│       │       │   │   ├── AVAssetImageDataProvider.swift
│       │       │   │   ├── ImageDataProvider.swift
│       │       │   │   ├── Resource.swift
│       │       │   │   └── Source.swift
│       │       │   ├── KF.swift
│       │       │   ├── KFOptionsSetter.swift
│       │       │   ├── Kingfisher.swift
│       │       │   ├── KingfisherError.swift
│       │       │   ├── KingfisherManager.swift
│       │       │   └── KingfisherOptionsInfo.swift
│       │       ├── Image/
│       │       │   ├── Filter.swift
│       │       │   ├── GIFAnimatedImage.swift
│       │       │   ├── GraphicsContext.swift
│       │       │   ├── Image.swift
│       │       │   ├── ImageDrawing.swift
│       │       │   ├── ImageFormat.swift
│       │       │   ├── ImageProcessor.swift
│       │       │   ├── ImageProgressive.swift
│       │       │   ├── ImageTransition.swift
│       │       │   └── Placeholder.swift
│       │       ├── Networking/
│       │       │   ├── AuthenticationChallengeResponsable.swift
│       │       │   ├── ImageDataProcessor.swift
│       │       │   ├── ImageDownloader.swift
│       │       │   ├── ImageDownloaderDelegate.swift
│       │       │   ├── ImageModifier.swift
│       │       │   ├── ImagePrefetcher.swift
│       │       │   ├── RedirectHandler.swift
│       │       │   ├── RequestModifier.swift
│       │       │   ├── RetryStrategy.swift
│       │       │   ├── SessionDataTask.swift
│       │       │   └── SessionDelegate.swift
│       │       ├── SwiftUI/
│       │       │   ├── ImageBinder.swift
│       │       │   ├── KFImage.swift
│       │       │   └── KFImageOptions.swift
│       │       ├── Utility/
│       │       │   ├── Box.swift
│       │       │   ├── CallbackQueue.swift
│       │       │   ├── Delegate.swift
│       │       │   ├── ExtensionHelpers.swift
│       │       │   ├── Result.swift
│       │       │   ├── Runtime.swift
│       │       │   ├── SizeExtensions.swift
│       │       │   └── String+MD5.swift
│       │       └── Views/
│       │           ├── AnimatedImageView.swift
│       │           └── Indicator.swift
│       ├── Kingfisher.xcodeproj/
│       │   └── project.pbxproj
│       ├── Localize-Swift/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Sources/
│       │       ├── Localize.swift
│       │       ├── Localize_Swift.h
│       │       ├── String+LocalizeBundle.swift
│       │       ├── String+LocalizeTableName.swift
│       │       ├── String+LocalizedBundleTableName.swift
│       │       └── UI/
│       │           └── IBDesignable+Localize.swift
│       ├── Localize-Swift.xcodeproj/
│       │   └── project.pbxproj
│       ├── LookinServer/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Src/
│       │       ├── Server/
│       │       │   ├── Category/
│       │       │   │   ├── CALayer+LookinServer.h
│       │       │   │   ├── CALayer+LookinServer.m
│       │       │   │   ├── NSObject+LookinServer.h
│       │       │   │   ├── NSObject+LookinServer.m
│       │       │   │   ├── UIBlurEffect+LookinServer.h
│       │       │   │   ├── UIBlurEffect+LookinServer.m
│       │       │   │   ├── UIColor+LookinServer.h
│       │       │   │   ├── UIColor+LookinServer.m
│       │       │   │   ├── UIGestureRecognizer+LookinServer.h
│       │       │   │   ├── UIGestureRecognizer+LookinServer.m
│       │       │   │   ├── UIImage+LookinServer.h
│       │       │   │   ├── UIImage+LookinServer.m
│       │       │   │   ├── UIImageView+LookinServer.h
│       │       │   │   ├── UIImageView+LookinServer.m
│       │       │   │   ├── UILabel+LookinServer.h
│       │       │   │   ├── UILabel+LookinServer.m
│       │       │   │   ├── UITableView+LookinServer.h
│       │       │   │   ├── UITableView+LookinServer.m
│       │       │   │   ├── UITextField+LookinServer.h
│       │       │   │   ├── UITextField+LookinServer.m
│       │       │   │   ├── UITextView+LookinServer.h
│       │       │   │   ├── UITextView+LookinServer.m
│       │       │   │   ├── UIView+LookinServer.h
│       │       │   │   ├── UIView+LookinServer.m
│       │       │   │   ├── UIViewController+LookinServer.h
│       │       │   │   ├── UIViewController+LookinServer.m
│       │       │   │   ├── UIVisualEffectView+LookinServer.h
│       │       │   │   └── UIVisualEffectView+LookinServer.m
│       │       │   ├── Connection/
│       │       │   │   ├── LKS_ConnectionManager.h
│       │       │   │   ├── LKS_ConnectionManager.m
│       │       │   │   ├── LKS_RequestHandler.h
│       │       │   │   ├── LKS_RequestHandler.m
│       │       │   │   └── RequestHandler/
│       │       │   │       ├── LKS_AttrModificationHandler.h
│       │       │   │       ├── LKS_AttrModificationHandler.m
│       │       │   │       ├── LKS_AttrModificationPatchHandler.h
│       │       │   │       ├── LKS_AttrModificationPatchHandler.m
│       │       │   │       ├── LKS_HierarchyDetailsHandler.h
│       │       │   │       └── LKS_HierarchyDetailsHandler.m
│       │       │   ├── Inspect/
│       │       │   │   ├── LKS_LocalInspectManager.h
│       │       │   │   ├── LKS_LocalInspectManager.m
│       │       │   │   ├── LKS_LocalInspectPanelLabelView.h
│       │       │   │   ├── LKS_LocalInspectPanelLabelView.m
│       │       │   │   ├── LKS_LocalInspectViewController.h
│       │       │   │   └── LKS_LocalInspectViewController.m
│       │       │   ├── LookinServer.h
│       │       │   ├── Others/
│       │       │   │   ├── LKS_AttrGroupsMaker.h
│       │       │   │   ├── LKS_AttrGroupsMaker.m
│       │       │   │   ├── LKS_EventHandlerMaker.h
│       │       │   │   ├── LKS_EventHandlerMaker.m
│       │       │   │   ├── LKS_ExportManager.h
│       │       │   │   ├── LKS_ExportManager.m
│       │       │   │   ├── LKS_Helper.h
│       │       │   │   ├── LKS_Helper.m
│       │       │   │   ├── LKS_HierarchyDisplayItemsMaker.h
│       │       │   │   ├── LKS_HierarchyDisplayItemsMaker.m
│       │       │   │   ├── LKS_MethodTraceManager.h
│       │       │   │   ├── LKS_MethodTraceManager.m
│       │       │   │   ├── LKS_ObjectRegistry.h
│       │       │   │   ├── LKS_ObjectRegistry.m
│       │       │   │   ├── LKS_TraceManager.h
│       │       │   │   ├── LKS_TraceManager.m
│       │       │   │   └── LookinServerDefines.h
│       │       │   └── Perspective/
│       │       │       ├── LKS_PerspectiveDataSource.h
│       │       │       ├── LKS_PerspectiveDataSource.m
│       │       │       ├── LKS_PerspectiveHierarchyCell.h
│       │       │       ├── LKS_PerspectiveHierarchyCell.m
│       │       │       ├── LKS_PerspectiveHierarchyView.h
│       │       │       ├── LKS_PerspectiveHierarchyView.m
│       │       │       ├── LKS_PerspectiveItemLayer.h
│       │       │       ├── LKS_PerspectiveItemLayer.m
│       │       │       ├── LKS_PerspectiveLayer.h
│       │       │       ├── LKS_PerspectiveLayer.m
│       │       │       ├── LKS_PerspectiveManager.h
│       │       │       ├── LKS_PerspectiveManager.m
│       │       │       ├── LKS_PerspectiveToolbarButtons.h
│       │       │       ├── LKS_PerspectiveToolbarButtons.m
│       │       │       ├── LKS_PerspectiveViewController.h
│       │       │       └── LKS_PerspectiveViewController.m
│       │       └── Shared/
│       │           ├── Category/
│       │           │   ├── CALayer+Lookin.h
│       │           │   ├── CALayer+Lookin.m
│       │           │   ├── NSArray+Lookin.h
│       │           │   ├── NSArray+Lookin.m
│       │           │   ├── NSObject+Lookin.h
│       │           │   ├── NSObject+Lookin.m
│       │           │   ├── NSSet+Lookin.h
│       │           │   ├── NSSet+Lookin.m
│       │           │   ├── NSString+Lookin.h
│       │           │   └── NSString+Lookin.m
│       │           ├── LookinAppInfo.h
│       │           ├── LookinAppInfo.m
│       │           ├── LookinAttrIdentifiers.h
│       │           ├── LookinAttrIdentifiers.m
│       │           ├── LookinAttrType.h
│       │           ├── LookinAttribute.h
│       │           ├── LookinAttribute.m
│       │           ├── LookinAttributeModification.h
│       │           ├── LookinAttributeModification.m
│       │           ├── LookinAttributesGroup.h
│       │           ├── LookinAttributesGroup.m
│       │           ├── LookinAttributesSection.h
│       │           ├── LookinAttributesSection.m
│       │           ├── LookinAutoLayoutConstraint.h
│       │           ├── LookinAutoLayoutConstraint.m
│       │           ├── LookinCodingValueType.h
│       │           ├── LookinConnectionAttachment.h
│       │           ├── LookinConnectionAttachment.m
│       │           ├── LookinConnectionResponseAttachment.h
│       │           ├── LookinConnectionResponseAttachment.m
│       │           ├── LookinDashboardBlueprint.h
│       │           ├── LookinDashboardBlueprint.m
│       │           ├── LookinDefines.h
│       │           ├── LookinDisplayItem.h
│       │           ├── LookinDisplayItem.m
│       │           ├── LookinDisplayItemDetail.h
│       │           ├── LookinDisplayItemDetail.m
│       │           ├── LookinEventHandler.h
│       │           ├── LookinEventHandler.m
│       │           ├── LookinHierarchyFile.h
│       │           ├── LookinHierarchyFile.m
│       │           ├── LookinHierarchyInfo.h
│       │           ├── LookinHierarchyInfo.m
│       │           ├── LookinIvarTrace.h
│       │           ├── LookinIvarTrace.m
│       │           ├── LookinMethodTraceRecord.h
│       │           ├── LookinMethodTraceRecord.m
│       │           ├── LookinObject.h
│       │           ├── LookinObject.m
│       │           ├── LookinScreenshotFetchManager.h
│       │           ├── LookinStaticAsyncUpdateTask.h
│       │           ├── LookinStaticAsyncUpdateTask.m
│       │           ├── LookinTuple.h
│       │           ├── LookinTuple.m
│       │           ├── LookinWeakContainer.h
│       │           ├── LookinWeakContainer.m
│       │           ├── Message/
│       │           │   ├── LookinMsgAttribute.h
│       │           │   ├── LookinMsgAttribute.m
│       │           │   ├── LookinMsgTargetAction.h
│       │           │   └── LookinMsgTargetAction.m
│       │           └── Peertalk/
│       │               ├── Lookin_PTChannel.h
│       │               ├── Lookin_PTChannel.m
│       │               ├── Lookin_PTPrivate.h
│       │               ├── Lookin_PTProtocol.h
│       │               ├── Lookin_PTProtocol.m
│       │               ├── Lookin_PTUSBHub.h
│       │               ├── Lookin_PTUSBHub.m
│       │               └── Peertalk.h
│       ├── LookinServer.xcodeproj/
│       │   └── project.pbxproj
│       ├── MBProgressHUD/
│       │   ├── LICENSE
│       │   ├── MBProgressHUD.h
│       │   ├── MBProgressHUD.m
│       │   └── README.mdown
│       ├── MBProgressHUD.xcodeproj/
│       │   └── project.pbxproj
│       ├── MJRefresh/
│       │   ├── LICENSE
│       │   ├── MJRefresh/
│       │   │   ├── Base/
│       │   │   │   ├── MJRefreshAutoFooter.h
│       │   │   │   ├── MJRefreshAutoFooter.m
│       │   │   │   ├── MJRefreshBackFooter.h
│       │   │   │   ├── MJRefreshBackFooter.m
│       │   │   │   ├── MJRefreshComponent.h
│       │   │   │   ├── MJRefreshComponent.m
│       │   │   │   ├── MJRefreshFooter.h
│       │   │   │   ├── MJRefreshFooter.m
│       │   │   │   ├── MJRefreshHeader.h
│       │   │   │   ├── MJRefreshHeader.m
│       │   │   │   ├── MJRefreshTrailer.h
│       │   │   │   └── MJRefreshTrailer.m
│       │   │   ├── Custom/
│       │   │   │   ├── Footer/
│       │   │   │   │   ├── Auto/
│       │   │   │   │   │   ├── MJRefreshAutoGifFooter.h
│       │   │   │   │   │   ├── MJRefreshAutoGifFooter.m
│       │   │   │   │   │   ├── MJRefreshAutoNormalFooter.h
│       │   │   │   │   │   ├── MJRefreshAutoNormalFooter.m
│       │   │   │   │   │   ├── MJRefreshAutoStateFooter.h
│       │   │   │   │   │   └── MJRefreshAutoStateFooter.m
│       │   │   │   │   └── Back/
│       │   │   │   │       ├── MJRefreshBackGifFooter.h
│       │   │   │   │       ├── MJRefreshBackGifFooter.m
│       │   │   │   │       ├── MJRefreshBackNormalFooter.h
│       │   │   │   │       ├── MJRefreshBackNormalFooter.m
│       │   │   │   │       ├── MJRefreshBackStateFooter.h
│       │   │   │   │       └── MJRefreshBackStateFooter.m
│       │   │   │   ├── Header/
│       │   │   │   │   ├── MJRefreshGifHeader.h
│       │   │   │   │   ├── MJRefreshGifHeader.m
│       │   │   │   │   ├── MJRefreshNormalHeader.h
│       │   │   │   │   ├── MJRefreshNormalHeader.m
│       │   │   │   │   ├── MJRefreshStateHeader.h
│       │   │   │   │   └── MJRefreshStateHeader.m
│       │   │   │   └── Trailer/
│       │   │   │       ├── MJRefreshNormalTrailer.h
│       │   │   │       ├── MJRefreshNormalTrailer.m
│       │   │   │       ├── MJRefreshStateTrailer.h
│       │   │   │       └── MJRefreshStateTrailer.m
│       │   │   ├── MJRefresh.bundle/
│       │   │   │   ├── en.lproj/
│       │   │   │   │   └── Localizable.strings
│       │   │   │   ├── ko.lproj/
│       │   │   │   │   └── Localizable.strings
│       │   │   │   ├── ru.lproj/
│       │   │   │   │   └── Localizable.strings
│       │   │   │   ├── uk.lproj/
│       │   │   │   │   └── Localizable.strings
│       │   │   │   ├── zh-Hans.lproj/
│       │   │   │   │   └── Localizable.strings
│       │   │   │   └── zh-Hant.lproj/
│       │   │   │       └── Localizable.strings
│       │   │   ├── MJRefresh.h
│       │   │   ├── MJRefreshConfig.h
│       │   │   ├── MJRefreshConfig.m
│       │   │   ├── MJRefreshConst.h
│       │   │   ├── MJRefreshConst.m
│       │   │   ├── NSBundle+MJRefresh.h
│       │   │   ├── NSBundle+MJRefresh.m
│       │   │   ├── UICollectionViewLayout+MJRefresh.h
│       │   │   ├── UICollectionViewLayout+MJRefresh.m
│       │   │   ├── UIScrollView+MJExtension.h
│       │   │   ├── UIScrollView+MJExtension.m
│       │   │   ├── UIScrollView+MJRefresh.h
│       │   │   ├── UIScrollView+MJRefresh.m
│       │   │   ├── UIView+MJExtension.h
│       │   │   └── UIView+MJExtension.m
│       │   └── README.md
│       ├── MJRefresh.xcodeproj/
│       │   └── project.pbxproj
│       ├── Moya/
│       │   ├── License.md
│       │   ├── Readme.md
│       │   └── Sources/
│       │       ├── Moya/
│       │       │   ├── AnyEncodable.swift
│       │       │   ├── Atomic.swift
│       │       │   ├── Cancellable.swift
│       │       │   ├── Endpoint.swift
│       │       │   ├── Image.swift
│       │       │   ├── Moya+Alamofire.swift
│       │       │   ├── MoyaError.swift
│       │       │   ├── MoyaProvider+Defaults.swift
│       │       │   ├── MoyaProvider+Internal.swift
│       │       │   ├── MoyaProvider.swift
│       │       │   ├── MultiTarget.swift
│       │       │   ├── MultipartFormData.swift
│       │       │   ├── Plugin.swift
│       │       │   ├── Plugins/
│       │       │   │   ├── AccessTokenPlugin.swift
│       │       │   │   ├── CredentialsPlugin.swift
│       │       │   │   ├── NetworkActivityPlugin.swift
│       │       │   │   └── NetworkLoggerPlugin.swift
│       │       │   ├── RequestTypeWrapper.swift
│       │       │   ├── Response.swift
│       │       │   ├── TargetType.swift
│       │       │   ├── Task.swift
│       │       │   ├── URL+Moya.swift
│       │       │   ├── URLRequest+Encoding.swift
│       │       │   └── ValidationType.swift
│       │       └── RxMoya/
│       │           ├── MoyaProvider+Rx.swift
│       │           ├── Observable+Response.swift
│       │           └── Single+Response.swift
│       ├── Moya.xcodeproj/
│       │   └── project.pbxproj
│       ├── NSObject+Rx/
│       │   ├── HasDisposeBag.swift
│       │   ├── LICENSE
│       │   ├── NSObject+Rx.swift
│       │   └── Readme.md
│       ├── NSObject+Rx.xcodeproj/
│       │   └── project.pbxproj
│       ├── Pods.xcodeproj/
│       │   └── project.pbxproj
│       ├── R.swift/
│       │   ├── License
│       │   └── rswift
│       ├── R.swift.Library/
│       │   ├── Library/
│       │   │   ├── Core/
│       │   │   │   ├── ColorResource.swift
│       │   │   │   ├── FileResource.swift
│       │   │   │   ├── FontResource.swift
│       │   │   │   ├── Identifier.swift
│       │   │   │   ├── ImageResource.swift
│       │   │   │   ├── NibResource.swift
│       │   │   │   ├── ReuseIdentifierProtocol.swift
│       │   │   │   ├── StoryboardResource.swift
│       │   │   │   ├── StoryboardSegueIdentifierProtocol.swift
│       │   │   │   ├── StoryboardViewControllerResource.swift
│       │   │   │   ├── StringResource.swift
│       │   │   │   └── Validatable.swift
│       │   │   ├── Foundation/
│       │   │   │   ├── Bundle+FileResource.swift
│       │   │   │   └── Data+FileResource.swift
│       │   │   └── UIKit/
│       │   │       ├── NibResource+UIKit.swift
│       │   │       ├── StoryboardResourceWithInitialController+UIKit.swift
│       │   │       ├── TypedStoryboardSegueInfo+UIStoryboardSegue.swift
│       │   │       ├── UICollectionView+ReuseIdentifierProtocol.swift
│       │   │       ├── UIColor+ColorResource.swift
│       │   │       ├── UIFont+FontResource.swift
│       │   │       ├── UIImage+ImageResource.swift
│       │   │       ├── UINib+NibResource.swift
│       │   │       ├── UIStoryboard+StoryboardResource.swift
│       │   │       ├── UIStoryboard+StoryboardViewControllerResource.swift
│       │   │       ├── UITableView+ReuseIdentifierProtocol.swift
│       │   │       ├── UIViewController+NibResource.swift
│       │   │       └── UIViewController+StoryboardSegueIdentifierProtocol.swift
│       │   ├── License
│       │   └── Readme.md
│       ├── R.swift.Library.xcodeproj/
│       │   └── project.pbxproj
│       ├── R.swift.xcodeproj/
│       │   └── project.pbxproj
│       ├── ReachabilitySwift/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Sources/
│       │       └── Reachability.swift
│       ├── ReachabilitySwift.xcodeproj/
│       │   └── project.pbxproj
│       ├── RxCocoa/
│       │   ├── LICENSE.md
│       │   ├── Platform/
│       │   │   ├── DataStructures/
│       │   │   │   ├── Bag.swift
│       │   │   │   ├── InfiniteSequence.swift
│       │   │   │   ├── PriorityQueue.swift
│       │   │   │   └── Queue.swift
│       │   │   ├── DispatchQueue+Extensions.swift
│       │   │   ├── Platform.Darwin.swift
│       │   │   ├── Platform.Linux.swift
│       │   │   └── RecursiveLock.swift
│       │   ├── README.md
│       │   └── RxCocoa/
│       │       ├── Common/
│       │       │   ├── ControlTarget.swift
│       │       │   ├── DelegateProxy.swift
│       │       │   ├── DelegateProxyType.swift
│       │       │   ├── Infallible+Bind.swift
│       │       │   ├── Observable+Bind.swift
│       │       │   ├── RxCocoaObjCRuntimeError+Extensions.swift
│       │       │   ├── RxTarget.swift
│       │       │   ├── SectionedViewDataSourceType.swift
│       │       │   └── TextInput.swift
│       │       ├── Foundation/
│       │       │   ├── KVORepresentable+CoreGraphics.swift
│       │       │   ├── KVORepresentable+Swift.swift
│       │       │   ├── KVORepresentable.swift
│       │       │   ├── NSObject+Rx+KVORepresentable.swift
│       │       │   ├── NSObject+Rx+RawRepresentable.swift
│       │       │   ├── NSObject+Rx.swift
│       │       │   ├── NotificationCenter+Rx.swift
│       │       │   └── URLSession+Rx.swift
│       │       ├── Runtime/
│       │       │   ├── _RX.m
│       │       │   ├── _RXDelegateProxy.m
│       │       │   ├── _RXKVOObserver.m
│       │       │   ├── _RXObjCRuntime.m
│       │       │   └── include/
│       │       │       ├── RxCocoaRuntime.h
│       │       │       ├── _RX.h
│       │       │       ├── _RXDelegateProxy.h
│       │       │       ├── _RXKVOObserver.h
│       │       │       └── _RXObjCRuntime.h
│       │       ├── RxCocoa.h
│       │       ├── RxCocoa.swift
│       │       ├── Traits/
│       │       │   ├── ControlEvent.swift
│       │       │   ├── ControlProperty.swift
│       │       │   ├── Driver/
│       │       │   │   ├── BehaviorRelay+Driver.swift
│       │       │   │   ├── ControlEvent+Driver.swift
│       │       │   │   ├── ControlProperty+Driver.swift
│       │       │   │   ├── Driver+Subscription.swift
│       │       │   │   ├── Driver.swift
│       │       │   │   └── ObservableConvertibleType+Driver.swift
│       │       │   ├── SharedSequence/
│       │       │   │   ├── ObservableConvertibleType+SharedSequence.swift
│       │       │   │   ├── SchedulerType+SharedSequence.swift
│       │       │   │   ├── SharedSequence+Concurrency.swift
│       │       │   │   ├── SharedSequence+Operators+arity.swift
│       │       │   │   ├── SharedSequence+Operators.swift
│       │       │   │   └── SharedSequence.swift
│       │       │   └── Signal/
│       │       │       ├── ControlEvent+Signal.swift
│       │       │       ├── ObservableConvertibleType+Signal.swift
│       │       │       ├── PublishRelay+Signal.swift
│       │       │       ├── Signal+Subscription.swift
│       │       │       └── Signal.swift
│       │       ├── iOS/
│       │       │   ├── DataSources/
│       │       │   │   ├── RxCollectionViewReactiveArrayDataSource.swift
│       │       │   │   ├── RxPickerViewAdapter.swift
│       │       │   │   └── RxTableViewReactiveArrayDataSource.swift
│       │       │   ├── Events/
│       │       │   │   └── ItemEvents.swift
│       │       │   ├── NSTextStorage+Rx.swift
│       │       │   ├── Protocols/
│       │       │   │   ├── RxCollectionViewDataSourceType.swift
│       │       │   │   ├── RxPickerViewDataSourceType.swift
│       │       │   │   └── RxTableViewDataSourceType.swift
│       │       │   ├── Proxies/
│       │       │   │   ├── RxCollectionViewDataSourcePrefetchingProxy.swift
│       │       │   │   ├── RxCollectionViewDataSourceProxy.swift
│       │       │   │   ├── RxCollectionViewDelegateProxy.swift
│       │       │   │   ├── RxNavigationControllerDelegateProxy.swift
│       │       │   │   ├── RxPickerViewDataSourceProxy.swift
│       │       │   │   ├── RxPickerViewDelegateProxy.swift
│       │       │   │   ├── RxScrollViewDelegateProxy.swift
│       │       │   │   ├── RxSearchBarDelegateProxy.swift
│       │       │   │   ├── RxSearchControllerDelegateProxy.swift
│       │       │   │   ├── RxTabBarControllerDelegateProxy.swift
│       │       │   │   ├── RxTabBarDelegateProxy.swift
│       │       │   │   ├── RxTableViewDataSourcePrefetchingProxy.swift
│       │       │   │   ├── RxTableViewDataSourceProxy.swift
│       │       │   │   ├── RxTableViewDelegateProxy.swift
│       │       │   │   ├── RxTextStorageDelegateProxy.swift
│       │       │   │   ├── RxTextViewDelegateProxy.swift
│       │       │   │   └── RxWKNavigationDelegateProxy.swift
│       │       │   ├── UIActivityIndicatorView+Rx.swift
│       │       │   ├── UIApplication+Rx.swift
│       │       │   ├── UIBarButtonItem+Rx.swift
│       │       │   ├── UIButton+Rx.swift
│       │       │   ├── UICollectionView+Rx.swift
│       │       │   ├── UIControl+Rx.swift
│       │       │   ├── UIDatePicker+Rx.swift
│       │       │   ├── UIGestureRecognizer+Rx.swift
│       │       │   ├── UINavigationController+Rx.swift
│       │       │   ├── UIPickerView+Rx.swift
│       │       │   ├── UIRefreshControl+Rx.swift
│       │       │   ├── UIScrollView+Rx.swift
│       │       │   ├── UISearchBar+Rx.swift
│       │       │   ├── UISearchController+Rx.swift
│       │       │   ├── UISegmentedControl+Rx.swift
│       │       │   ├── UISlider+Rx.swift
│       │       │   ├── UIStepper+Rx.swift
│       │       │   ├── UISwitch+Rx.swift
│       │       │   ├── UITabBar+Rx.swift
│       │       │   ├── UITabBarController+Rx.swift
│       │       │   ├── UITableView+Rx.swift
│       │       │   ├── UITextField+Rx.swift
│       │       │   ├── UITextView+Rx.swift
│       │       │   └── WKWebView+Rx.swift
│       │       └── macOS/
│       │           ├── NSButton+Rx.swift
│       │           ├── NSControl+Rx.swift
│       │           ├── NSSlider+Rx.swift
│       │           ├── NSTextField+Rx.swift
│       │           ├── NSTextView+Rx.swift
│       │           └── NSView+Rx.swift
│       ├── RxCocoa.xcodeproj/
│       │   └── project.pbxproj
│       ├── RxRelay/
│       │   ├── LICENSE.md
│       │   ├── README.md
│       │   └── RxRelay/
│       │       ├── BehaviorRelay.swift
│       │       ├── Observable+Bind.swift
│       │       ├── PublishRelay.swift
│       │       ├── ReplayRelay.swift
│       │       └── Utils.swift
│       ├── RxRelay.xcodeproj/
│       │   └── project.pbxproj
│       ├── RxSwift/
│       │   ├── LICENSE.md
│       │   ├── Platform/
│       │   │   ├── AtomicInt.swift
│       │   │   ├── DataStructures/
│       │   │   │   ├── Bag.swift
│       │   │   │   ├── InfiniteSequence.swift
│       │   │   │   ├── PriorityQueue.swift
│       │   │   │   └── Queue.swift
│       │   │   ├── DispatchQueue+Extensions.swift
│       │   │   ├── Platform.Darwin.swift
│       │   │   ├── Platform.Linux.swift
│       │   │   └── RecursiveLock.swift
│       │   ├── README.md
│       │   └── RxSwift/
│       │       ├── AnyObserver.swift
│       │       ├── Binder.swift
│       │       ├── Cancelable.swift
│       │       ├── Concurrency/
│       │       │   ├── AsyncLock.swift
│       │       │   ├── Lock.swift
│       │       │   ├── LockOwnerType.swift
│       │       │   ├── SynchronizedDisposeType.swift
│       │       │   ├── SynchronizedOnType.swift
│       │       │   └── SynchronizedUnsubscribeType.swift
│       │       ├── ConnectableObservableType.swift
│       │       ├── Date+Dispatch.swift
│       │       ├── Disposable.swift
│       │       ├── Disposables/
│       │       │   ├── AnonymousDisposable.swift
│       │       │   ├── BinaryDisposable.swift
│       │       │   ├── BooleanDisposable.swift
│       │       │   ├── CompositeDisposable.swift
│       │       │   ├── Disposables.swift
│       │       │   ├── DisposeBag.swift
│       │       │   ├── DisposeBase.swift
│       │       │   ├── NopDisposable.swift
│       │       │   ├── RefCountDisposable.swift
│       │       │   ├── ScheduledDisposable.swift
│       │       │   ├── SerialDisposable.swift
│       │       │   ├── SingleAssignmentDisposable.swift
│       │       │   └── SubscriptionDisposable.swift
│       │       ├── Errors.swift
│       │       ├── Event.swift
│       │       ├── Extensions/
│       │       │   └── Bag+Rx.swift
│       │       ├── GroupedObservable.swift
│       │       ├── ImmediateSchedulerType.swift
│       │       ├── Observable+Concurrency.swift
│       │       ├── Observable.swift
│       │       ├── ObservableConvertibleType.swift
│       │       ├── ObservableType+Extensions.swift
│       │       ├── ObservableType.swift
│       │       ├── Observables/
│       │       │   ├── AddRef.swift
│       │       │   ├── Amb.swift
│       │       │   ├── AsMaybe.swift
│       │       │   ├── AsSingle.swift
│       │       │   ├── Buffer.swift
│       │       │   ├── Catch.swift
│       │       │   ├── CombineLatest+Collection.swift
│       │       │   ├── CombineLatest+arity.swift
│       │       │   ├── CombineLatest.swift
│       │       │   ├── CompactMap.swift
│       │       │   ├── Concat.swift
│       │       │   ├── Create.swift
│       │       │   ├── Debounce.swift
│       │       │   ├── Debug.swift
│       │       │   ├── Decode.swift
│       │       │   ├── DefaultIfEmpty.swift
│       │       │   ├── Deferred.swift
│       │       │   ├── Delay.swift
│       │       │   ├── DelaySubscription.swift
│       │       │   ├── Dematerialize.swift
│       │       │   ├── DistinctUntilChanged.swift
│       │       │   ├── Do.swift
│       │       │   ├── ElementAt.swift
│       │       │   ├── Empty.swift
│       │       │   ├── Enumerated.swift
│       │       │   ├── Error.swift
│       │       │   ├── Filter.swift
│       │       │   ├── First.swift
│       │       │   ├── Generate.swift
│       │       │   ├── GroupBy.swift
│       │       │   ├── Just.swift
│       │       │   ├── Map.swift
│       │       │   ├── Materialize.swift
│       │       │   ├── Merge.swift
│       │       │   ├── Multicast.swift
│       │       │   ├── Never.swift
│       │       │   ├── ObserveOn.swift
│       │       │   ├── Optional.swift
│       │       │   ├── Producer.swift
│       │       │   ├── Range.swift
│       │       │   ├── Reduce.swift
│       │       │   ├── Repeat.swift
│       │       │   ├── RetryWhen.swift
│       │       │   ├── Sample.swift
│       │       │   ├── Scan.swift
│       │       │   ├── Sequence.swift
│       │       │   ├── ShareReplayScope.swift
│       │       │   ├── SingleAsync.swift
│       │       │   ├── Sink.swift
│       │       │   ├── Skip.swift
│       │       │   ├── SkipUntil.swift
│       │       │   ├── SkipWhile.swift
│       │       │   ├── StartWith.swift
│       │       │   ├── SubscribeOn.swift
│       │       │   ├── Switch.swift
│       │       │   ├── SwitchIfEmpty.swift
│       │       │   ├── Take.swift
│       │       │   ├── TakeLast.swift
│       │       │   ├── TakeWithPredicate.swift
│       │       │   ├── Throttle.swift
│       │       │   ├── Timeout.swift
│       │       │   ├── Timer.swift
│       │       │   ├── ToArray.swift
│       │       │   ├── Using.swift
│       │       │   ├── Window.swift
│       │       │   ├── WithLatestFrom.swift
│       │       │   ├── WithUnretained.swift
│       │       │   ├── Zip+Collection.swift
│       │       │   ├── Zip+arity.swift
│       │       │   └── Zip.swift
│       │       ├── ObserverType.swift
│       │       ├── Observers/
│       │       │   ├── AnonymousObserver.swift
│       │       │   ├── ObserverBase.swift
│       │       │   └── TailRecursiveSink.swift
│       │       ├── Reactive.swift
│       │       ├── Rx.swift
│       │       ├── RxMutableBox.swift
│       │       ├── SchedulerType.swift
│       │       ├── Schedulers/
│       │       │   ├── ConcurrentDispatchQueueScheduler.swift
│       │       │   ├── ConcurrentMainScheduler.swift
│       │       │   ├── CurrentThreadScheduler.swift
│       │       │   ├── HistoricalScheduler.swift
│       │       │   ├── HistoricalSchedulerTimeConverter.swift
│       │       │   ├── Internal/
│       │       │   │   ├── DispatchQueueConfiguration.swift
│       │       │   │   ├── InvocableScheduledItem.swift
│       │       │   │   ├── InvocableType.swift
│       │       │   │   ├── ScheduledItem.swift
│       │       │   │   └── ScheduledItemType.swift
│       │       │   ├── MainScheduler.swift
│       │       │   ├── OperationQueueScheduler.swift
│       │       │   ├── RecursiveScheduler.swift
│       │       │   ├── SchedulerServices+Emulation.swift
│       │       │   ├── SerialDispatchQueueScheduler.swift
│       │       │   ├── VirtualTimeConverterType.swift
│       │       │   └── VirtualTimeScheduler.swift
│       │       ├── Subjects/
│       │       │   ├── AsyncSubject.swift
│       │       │   ├── BehaviorSubject.swift
│       │       │   ├── PublishSubject.swift
│       │       │   ├── ReplaySubject.swift
│       │       │   └── SubjectType.swift
│       │       ├── SwiftSupport/
│       │       │   └── SwiftSupport.swift
│       │       └── Traits/
│       │           ├── Infallible/
│       │           │   ├── Infallible+CombineLatest+arity.swift
│       │           │   ├── Infallible+Concurrency.swift
│       │           │   ├── Infallible+Create.swift
│       │           │   ├── Infallible+Operators.swift
│       │           │   ├── Infallible+Zip+arity.swift
│       │           │   ├── Infallible.swift
│       │           │   └── ObservableConvertibleType+Infallible.swift
│       │           └── PrimitiveSequence/
│       │               ├── Completable+AndThen.swift
│       │               ├── Completable.swift
│       │               ├── Maybe.swift
│       │               ├── ObservableType+PrimitiveSequence.swift
│       │               ├── PrimitiveSequence+Concurrency.swift
│       │               ├── PrimitiveSequence+Zip+arity.swift
│       │               ├── PrimitiveSequence.swift
│       │               └── Single.swift
│       ├── RxSwift.xcodeproj/
│       │   └── project.pbxproj
│       ├── RxTheme/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Sources/
│       │       ├── Extensions/
│       │       │   ├── CALayer+Theme.swift
│       │       │   ├── CAShapeLayer+Theme.swift
│       │       │   ├── UIActivityIndicatorView+Theme.swift
│       │       │   ├── UIBarButtonItem+Theme.swift
│       │       │   ├── UIButton+Theme.swift
│       │       │   ├── UILabel+Theme.swift
│       │       │   ├── UINavigationBar+Theme.swift
│       │       │   ├── UIPageControl+Theme.swift
│       │       │   ├── UIProgressView+Theme.swift
│       │       │   ├── UISearchBar+Theme.swift
│       │       │   ├── UISegmentedControl+Theme.swift
│       │       │   ├── UISlider+Theme.swift
│       │       │   ├── UISwitch+Theme.swift
│       │       │   ├── UITAbleViewCell+Theme.swift
│       │       │   ├── UITabBar+Theme.swift
│       │       │   ├── UITableView+Theme.swift
│       │       │   ├── UITextField+Theme.swift
│       │       │   ├── UITextView+Theme.swift
│       │       │   ├── UIToolbar+Theme.swift
│       │       │   └── UIView+Theme.swift
│       │       ├── ThemeAttribute.swift
│       │       ├── ThemeProvider.swift
│       │       ├── ThemeProxy.swift
│       │       └── ThemeService.swift
│       ├── RxTheme.xcodeproj/
│       │   └── project.pbxproj
│       ├── SDWebImage/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   ├── SDWebImage/
│       │   │   ├── Core/
│       │   │   │   ├── NSButton+WebCache.h
│       │   │   │   ├── NSButton+WebCache.m
│       │   │   │   ├── NSData+ImageContentType.h
│       │   │   │   ├── NSData+ImageContentType.m
│       │   │   │   ├── NSImage+Compatibility.h
│       │   │   │   ├── NSImage+Compatibility.m
│       │   │   │   ├── SDAnimatedImage.h
│       │   │   │   ├── SDAnimatedImage.m
│       │   │   │   ├── SDAnimatedImagePlayer.h
│       │   │   │   ├── SDAnimatedImagePlayer.m
│       │   │   │   ├── SDAnimatedImageRep.h
│       │   │   │   ├── SDAnimatedImageRep.m
│       │   │   │   ├── SDAnimatedImageView+WebCache.h
│       │   │   │   ├── SDAnimatedImageView+WebCache.m
│       │   │   │   ├── SDAnimatedImageView.h
│       │   │   │   ├── SDAnimatedImageView.m
│       │   │   │   ├── SDDiskCache.h
│       │   │   │   ├── SDDiskCache.m
│       │   │   │   ├── SDGraphicsImageRenderer.h
│       │   │   │   ├── SDGraphicsImageRenderer.m
│       │   │   │   ├── SDImageAPNGCoder.h
│       │   │   │   ├── SDImageAPNGCoder.m
│       │   │   │   ├── SDImageAWebPCoder.h
│       │   │   │   ├── SDImageAWebPCoder.m
│       │   │   │   ├── SDImageCache.h
│       │   │   │   ├── SDImageCache.m
│       │   │   │   ├── SDImageCacheConfig.h
│       │   │   │   ├── SDImageCacheConfig.m
│       │   │   │   ├── SDImageCacheDefine.h
│       │   │   │   ├── SDImageCacheDefine.m
│       │   │   │   ├── SDImageCachesManager.h
│       │   │   │   ├── SDImageCachesManager.m
│       │   │   │   ├── SDImageCoder.h
│       │   │   │   ├── SDImageCoder.m
│       │   │   │   ├── SDImageCoderHelper.h
│       │   │   │   ├── SDImageCoderHelper.m
│       │   │   │   ├── SDImageCodersManager.h
│       │   │   │   ├── SDImageCodersManager.m
│       │   │   │   ├── SDImageFrame.h
│       │   │   │   ├── SDImageFrame.m
│       │   │   │   ├── SDImageGIFCoder.h
│       │   │   │   ├── SDImageGIFCoder.m
│       │   │   │   ├── SDImageGraphics.h
│       │   │   │   ├── SDImageGraphics.m
│       │   │   │   ├── SDImageHEICCoder.h
│       │   │   │   ├── SDImageHEICCoder.m
│       │   │   │   ├── SDImageIOAnimatedCoder.h
│       │   │   │   ├── SDImageIOAnimatedCoder.m
│       │   │   │   ├── SDImageIOCoder.h
│       │   │   │   ├── SDImageIOCoder.m
│       │   │   │   ├── SDImageLoader.h
│       │   │   │   ├── SDImageLoader.m
│       │   │   │   ├── SDImageLoadersManager.h
│       │   │   │   ├── SDImageLoadersManager.m
│       │   │   │   ├── SDImageTransformer.h
│       │   │   │   ├── SDImageTransformer.m
│       │   │   │   ├── SDMemoryCache.h
│       │   │   │   ├── SDMemoryCache.m
│       │   │   │   ├── SDWebImageCacheKeyFilter.h
│       │   │   │   ├── SDWebImageCacheKeyFilter.m
│       │   │   │   ├── SDWebImageCacheSerializer.h
│       │   │   │   ├── SDWebImageCacheSerializer.m
│       │   │   │   ├── SDWebImageCompat.h
│       │   │   │   ├── SDWebImageCompat.m
│       │   │   │   ├── SDWebImageDefine.h
│       │   │   │   ├── SDWebImageDefine.m
│       │   │   │   ├── SDWebImageDownloader.h
│       │   │   │   ├── SDWebImageDownloader.m
│       │   │   │   ├── SDWebImageDownloaderConfig.h
│       │   │   │   ├── SDWebImageDownloaderConfig.m
│       │   │   │   ├── SDWebImageDownloaderDecryptor.h
│       │   │   │   ├── SDWebImageDownloaderDecryptor.m
│       │   │   │   ├── SDWebImageDownloaderOperation.h
│       │   │   │   ├── SDWebImageDownloaderOperation.m
│       │   │   │   ├── SDWebImageDownloaderRequestModifier.h
│       │   │   │   ├── SDWebImageDownloaderRequestModifier.m
│       │   │   │   ├── SDWebImageDownloaderResponseModifier.h
│       │   │   │   ├── SDWebImageDownloaderResponseModifier.m
│       │   │   │   ├── SDWebImageError.h
│       │   │   │   ├── SDWebImageError.m
│       │   │   │   ├── SDWebImageIndicator.h
│       │   │   │   ├── SDWebImageIndicator.m
│       │   │   │   ├── SDWebImageManager.h
│       │   │   │   ├── SDWebImageManager.m
│       │   │   │   ├── SDWebImageOperation.h
│       │   │   │   ├── SDWebImageOperation.m
│       │   │   │   ├── SDWebImageOptionsProcessor.h
│       │   │   │   ├── SDWebImageOptionsProcessor.m
│       │   │   │   ├── SDWebImagePrefetcher.h
│       │   │   │   ├── SDWebImagePrefetcher.m
│       │   │   │   ├── SDWebImageTransition.h
│       │   │   │   ├── SDWebImageTransition.m
│       │   │   │   ├── UIButton+WebCache.h
│       │   │   │   ├── UIButton+WebCache.m
│       │   │   │   ├── UIImage+ExtendedCacheData.h
│       │   │   │   ├── UIImage+ExtendedCacheData.m
│       │   │   │   ├── UIImage+ForceDecode.h
│       │   │   │   ├── UIImage+ForceDecode.m
│       │   │   │   ├── UIImage+GIF.h
│       │   │   │   ├── UIImage+GIF.m
│       │   │   │   ├── UIImage+MemoryCacheCost.h
│       │   │   │   ├── UIImage+MemoryCacheCost.m
│       │   │   │   ├── UIImage+Metadata.h
│       │   │   │   ├── UIImage+Metadata.m
│       │   │   │   ├── UIImage+MultiFormat.h
│       │   │   │   ├── UIImage+MultiFormat.m
│       │   │   │   ├── UIImage+Transform.h
│       │   │   │   ├── UIImage+Transform.m
│       │   │   │   ├── UIImageView+HighlightedWebCache.h
│       │   │   │   ├── UIImageView+HighlightedWebCache.m
│       │   │   │   ├── UIImageView+WebCache.h
│       │   │   │   ├── UIImageView+WebCache.m
│       │   │   │   ├── UIView+WebCache.h
│       │   │   │   ├── UIView+WebCache.m
│       │   │   │   ├── UIView+WebCacheOperation.h
│       │   │   │   └── UIView+WebCacheOperation.m
│       │   │   └── Private/
│       │   │       ├── NSBezierPath+SDRoundedCorners.h
│       │   │       ├── NSBezierPath+SDRoundedCorners.m
│       │   │       ├── SDAssociatedObject.h
│       │   │       ├── SDAssociatedObject.m
│       │   │       ├── SDAsyncBlockOperation.h
│       │   │       ├── SDAsyncBlockOperation.m
│       │   │       ├── SDDeviceHelper.h
│       │   │       ├── SDDeviceHelper.m
│       │   │       ├── SDDisplayLink.h
│       │   │       ├── SDDisplayLink.m
│       │   │       ├── SDFileAttributeHelper.h
│       │   │       ├── SDFileAttributeHelper.m
│       │   │       ├── SDImageAssetManager.h
│       │   │       ├── SDImageAssetManager.m
│       │   │       ├── SDImageCachesManagerOperation.h
│       │   │       ├── SDImageCachesManagerOperation.m
│       │   │       ├── SDImageIOAnimatedCoderInternal.h
│       │   │       ├── SDInternalMacros.h
│       │   │       ├── SDInternalMacros.m
│       │   │       ├── SDWeakProxy.h
│       │   │       ├── SDWeakProxy.m
│       │   │       ├── SDWebImageTransitionInternal.h
│       │   │       ├── SDmetamacros.h
│       │   │       ├── UIColor+SDHexString.h
│       │   │       └── UIColor+SDHexString.m
│       │   └── WebImage/
│       │       └── SDWebImage.h
│       ├── SDWebImage.xcodeproj/
│       │   └── project.pbxproj
│       ├── SQLiteRepairKit/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── repair/
│       │       ├── SQLiteRepairKit.h
│       │       ├── sqliterk.c
│       │       ├── sqliterk.h
│       │       ├── sqliterk_api.c
│       │       ├── sqliterk_btree.c
│       │       ├── sqliterk_btree.h
│       │       ├── sqliterk_column.c
│       │       ├── sqliterk_column.h
│       │       ├── sqliterk_crypto.c
│       │       ├── sqliterk_crypto.h
│       │       ├── sqliterk_os.c
│       │       ├── sqliterk_os.h
│       │       ├── sqliterk_output.cpp
│       │       ├── sqliterk_pager.c
│       │       ├── sqliterk_pager.h
│       │       ├── sqliterk_util.c
│       │       ├── sqliterk_util.h
│       │       ├── sqliterk_values.c
│       │       └── sqliterk_values.h
│       ├── SQLiteRepairKit.xcodeproj/
│       │   └── project.pbxproj
│       ├── SnapKit/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Sources/
│       │       ├── Constraint.swift
│       │       ├── ConstraintAttributes.swift
│       │       ├── ConstraintConfig.swift
│       │       ├── ConstraintConstantTarget.swift
│       │       ├── ConstraintDSL.swift
│       │       ├── ConstraintDescription.swift
│       │       ├── ConstraintDirectionalInsetTarget.swift
│       │       ├── ConstraintDirectionalInsets.swift
│       │       ├── ConstraintInsetTarget.swift
│       │       ├── ConstraintInsets.swift
│       │       ├── ConstraintItem.swift
│       │       ├── ConstraintLayoutGuide+Extensions.swift
│       │       ├── ConstraintLayoutGuide.swift
│       │       ├── ConstraintLayoutGuideDSL.swift
│       │       ├── ConstraintLayoutSupport.swift
│       │       ├── ConstraintLayoutSupportDSL.swift
│       │       ├── ConstraintMaker.swift
│       │       ├── ConstraintMakerEditable.swift
│       │       ├── ConstraintMakerExtendable.swift
│       │       ├── ConstraintMakerFinalizable.swift
│       │       ├── ConstraintMakerPrioritizable.swift
│       │       ├── ConstraintMakerRelatable+Extensions.swift
│       │       ├── ConstraintMakerRelatable.swift
│       │       ├── ConstraintMultiplierTarget.swift
│       │       ├── ConstraintOffsetTarget.swift
│       │       ├── ConstraintPriority.swift
│       │       ├── ConstraintPriorityTarget.swift
│       │       ├── ConstraintRelatableTarget.swift
│       │       ├── ConstraintRelation.swift
│       │       ├── ConstraintView+Extensions.swift
│       │       ├── ConstraintView.swift
│       │       ├── ConstraintViewDSL.swift
│       │       ├── Debugging.swift
│       │       ├── LayoutConstraint.swift
│       │       ├── LayoutConstraintItem.swift
│       │       ├── Typealiases.swift
│       │       └── UILayoutSupport+Extensions.swift
│       ├── SnapKit.xcodeproj/
│       │   └── project.pbxproj
│       ├── SwiftDate/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Sources/
│       │       └── SwiftDate/
│       │           ├── Date/
│       │           │   ├── Date+Compare.swift
│       │           │   ├── Date+Components.swift
│       │           │   ├── Date+Create.swift
│       │           │   ├── Date+Math.swift
│       │           │   └── Date.swift
│       │           ├── DateInRegion/
│       │           │   ├── DateInRegion+Compare.swift
│       │           │   ├── DateInRegion+Components.swift
│       │           │   ├── DateInRegion+Create.swift
│       │           │   ├── DateInRegion+Math.swift
│       │           │   ├── DateInRegion.swift
│       │           │   └── Region.swift
│       │           ├── DateRepresentable.swift
│       │           ├── Formatters/
│       │           │   ├── DotNetParserFormatter.swift
│       │           │   ├── Formatter+Protocols.swift
│       │           │   ├── ISOFormatter.swift
│       │           │   ├── ISOParser.swift
│       │           │   └── RelativeFormatter/
│       │           │       ├── RelativeFormatter+Style.swift
│       │           │       ├── RelativeFormatter.swift
│       │           │       ├── RelativeFormatterLanguage.swift
│       │           │       └── langs/
│       │           │           ├── af.json
│       │           │           ├── am.json
│       │           │           ├── ar.json
│       │           │           ├── ar_AE.json
│       │           │           ├── as.json
│       │           │           ├── be.json
│       │           │           ├── bg.json
│       │           │           ├── bn.json
│       │           │           ├── br.json
│       │           │           ├── bs-Cyrl.json
│       │           │           ├── bs.json
│       │           │           ├── ca.json
│       │           │           ├── cs.json
│       │           │           ├── cy.json
│       │           │           ├── da.json
│       │           │           ├── de.json
│       │           │           ├── dsb.json
│       │           │           ├── dz.json
│       │           │           ├── ee.json
│       │           │           ├── el.json
│       │           │           ├── en.json
│       │           │           ├── es.json
│       │           │           ├── es_AR.json
│       │           │           ├── es_MX.json
│       │           │           ├── es_PY.json
│       │           │           ├── es_US.json
│       │           │           ├── et.json
│       │           │           ├── eu.json
│       │           │           ├── fa.json
│       │           │           ├── fi.json
│       │           │           ├── fil.json
│       │           │           ├── fo.json
│       │           │           ├── fr.json
│       │           │           ├── fr_CA.json
│       │           │           ├── fur.json
│       │           │           ├── fy.json
│       │           │           ├── ga.json
│       │           │           ├── gd.json
│       │           │           ├── gl.json
│       │           │           ├── gu.json
│       │           │           ├── he.json
│       │           │           ├── hi.json
│       │           │           ├── hr.json
│       │           │           ├── hsb.json
│       │           │           ├── hu.json
│       │           │           ├── hy.json
│       │           │           ├── id.json
│       │           │           ├── is.json
│       │           │           ├── it.json
│       │           │           ├── ja.json
│       │           │           ├── jgo.json
│       │           │           ├── ka.json
│       │           │           ├── kea.json
│       │           │           ├── kk.json
│       │           │           ├── kl.json
│       │           │           ├── km.json
│       │           │           ├── kn.json
│       │           │           ├── ko.json
│       │           │           ├── kok.json
│       │           │           ├── ksh.json
│       │           │           ├── ky.json
│       │           │           ├── lb.json
│       │           │           ├── lkt.json
│       │           │           ├── lo.json
│       │           │           ├── lt.json
│       │           │           ├── lv.json
│       │           │           ├── mk.json
│       │           │           ├── ml.json
│       │           │           ├── mn.json
│       │           │           ├── mr.json
│       │           │           ├── ms.json
│       │           │           ├── mt.json
│       │           │           ├── my.json
│       │           │           ├── mzn.json
│       │           │           ├── nb.json
│       │           │           ├── ne.json
│       │           │           ├── nl.json
│       │           │           ├── nn.json
│       │           │           ├── or.json
│       │           │           ├── pa.json
│       │           │           ├── pl.json
│       │           │           ├── ps.json
│       │           │           ├── pt.json
│       │           │           ├── ro.json
│       │           │           ├── ru.json
│       │           │           ├── sah.json
│       │           │           ├── sd.json
│       │           │           ├── se.json
│       │           │           ├── se_FI.json
│       │           │           ├── si.json
│       │           │           ├── sk.json
│       │           │           ├── sl.json
│       │           │           ├── sq.json
│       │           │           ├── sr.json
│       │           │           ├── sr_Latn.json
│       │           │           ├── sv.json
│       │           │           ├── sw.json
│       │           │           ├── ta.json
│       │           │           ├── te.json
│       │           │           ├── th.json
│       │           │           ├── ti.json
│       │           │           ├── tk.json
│       │           │           ├── to.json
│       │           │           ├── tr.json
│       │           │           ├── ug.json
│       │           │           ├── uk.json
│       │           │           ├── ur.json
│       │           │           ├── ur_IN.json
│       │           │           ├── uz.json
│       │           │           ├── uz_Cyrl.json
│       │           │           ├── vi.json
│       │           │           ├── wae.json
│       │           │           ├── yi.json
│       │           │           ├── yue_Hans.json
│       │           │           ├── yue_Hant.json
│       │           │           ├── zh.json
│       │           │           ├── zh_Hans.json
│       │           │           ├── zh_Hans_HK.json
│       │           │           ├── zh_Hans_MO.json
│       │           │           ├── zh_Hans_SG.json
│       │           │           ├── zh_Hant.json
│       │           │           ├── zh_Hant_HK.json
│       │           │           └── zu.json
│       │           ├── Foundation+Extras/
│       │           │   ├── DateComponents+Extras.swift
│       │           │   ├── Int+DateComponents.swift
│       │           │   ├── String+Parser.swift
│       │           │   └── TimeInterval+Formatter.swift
│       │           ├── Supports/
│       │           │   ├── AssociatedValues.swift
│       │           │   ├── Calendars.swift
│       │           │   ├── Commons.swift
│       │           │   ├── Locales.swift
│       │           │   ├── TimeStructures.swift
│       │           │   └── Zones.swift
│       │           ├── SwiftDate.swift
│       │           └── TimePeriod/
│       │               ├── Groups/
│       │               │   ├── TimePeriodChain.swift
│       │               │   ├── TimePeriodCollection.swift
│       │               │   └── TimePeriodGroup.swift
│       │               ├── TimePeriod+Support.swift
│       │               ├── TimePeriod.swift
│       │               └── TimePeriodProtocol.swift
│       ├── SwiftDate.xcodeproj/
│       │   └── project.pbxproj
│       ├── SwifterSwift/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Sources/
│       │       └── SwifterSwift/
│       │           ├── AppKit/
│       │           │   ├── NSColorExtensions.swift
│       │           │   ├── NSImageExtensions.swift
│       │           │   └── NSViewExtensions.swift
│       │           ├── CoreAnimation/
│       │           │   ├── CAGradientLayerExtensions.swift
│       │           │   └── CATransform3DExtensions.swift
│       │           ├── CoreGraphics/
│       │           │   ├── CGAffineTransformExtensions.swift
│       │           │   ├── CGColorExtensions.swift
│       │           │   ├── CGFloatExtensions.swift
│       │           │   ├── CGPointExtensions.swift
│       │           │   ├── CGRectExtensions.swift
│       │           │   ├── CGSizeExtensions.swift
│       │           │   └── CGVectorExtensions.swift
│       │           ├── CoreLocation/
│       │           │   ├── CLLocationArrayExtensions.swift
│       │           │   ├── CLLocationExtensions.swift
│       │           │   └── CLVisitExtensions.swift
│       │           ├── Dispatch/
│       │           │   └── DispatchQueueExtensions.swift
│       │           ├── Foundation/
│       │           │   ├── CalendarExtensions.swift
│       │           │   ├── DataExtensions.swift
│       │           │   ├── DateExtensions.swift
│       │           │   ├── FileManagerExtensions.swift
│       │           │   ├── LocaleExtensions.swift
│       │           │   ├── NSAttributedStringExtensions.swift
│       │           │   ├── NSPredicateExtensions.swift
│       │           │   ├── NSRegularExpressionExtensions.swift
│       │           │   ├── NotificationCenterExtensions.swift
│       │           │   ├── URLExtensions.swift
│       │           │   ├── URLRequestExtensions.swift
│       │           │   └── UserDefaultsExtensions.swift
│       │           ├── MapKit/
│       │           │   ├── MKMapViewExtensions.swift
│       │           │   └── MKPolylineExtensions.swift
│       │           ├── SceneKit/
│       │           │   ├── SCNBoxExtensions.swift
│       │           │   ├── SCNCapsuleExtensions.swift
│       │           │   ├── SCNConeExtensions.swift
│       │           │   ├── SCNCylinderExtensions.swift
│       │           │   ├── SCNGeometryExtensions.swift
│       │           │   ├── SCNMaterialExtensions.swift
│       │           │   ├── SCNPlaneExtensions.swift
│       │           │   ├── SCNShapeExtensions.swift
│       │           │   ├── SCNSphereExtensions.swift
│       │           │   └── SCNVector3Extensions.swift
│       │           ├── Shared/
│       │           │   ├── ColorExtensions.swift
│       │           │   └── EdgeInsetsExtensions.swift
│       │           ├── SpriteKit/
│       │           │   └── SKNodeExtensions.swift
│       │           ├── StoreKit/
│       │           │   └── SKProductExtensions.swift
│       │           ├── SwiftStdlib/
│       │           │   ├── ArrayExtensions.swift
│       │           │   ├── BidirectionalCollectionExtensions.swift
│       │           │   ├── BinaryFloatingPointExtensions.swift
│       │           │   ├── BoolExtensions.swift
│       │           │   ├── CharacterExtensions.swift
│       │           │   ├── CollectionExtensions.swift
│       │           │   ├── ComparableExtensions.swift
│       │           │   ├── DecodableExtensions.swift
│       │           │   ├── Deprecated/
│       │           │   │   └── StdlibDeprecated.swift
│       │           │   ├── DictionaryExtensions.swift
│       │           │   ├── DoubleExtensions.swift
│       │           │   ├── FloatExtensions.swift
│       │           │   ├── FloatingPointExtensions.swift
│       │           │   ├── IntExtensions.swift
│       │           │   ├── KeyedDecodingContainerExtensions.swift
│       │           │   ├── MutableCollectionExtensions.swift
│       │           │   ├── OptionalExtensions.swift
│       │           │   ├── RandomAccessCollectionExtensions.swift
│       │           │   ├── RangeReplaceableCollectionExtensions.swift
│       │           │   ├── SequenceExtensions.swift
│       │           │   ├── SignedIntegerExtensions.swift
│       │           │   ├── SignedNumericExtensions.swift
│       │           │   ├── StringExtensions.swift
│       │           │   └── StringProtocolExtensions.swift
│       │           └── UIKit/
│       │               ├── UIActivityExtensions.swift
│       │               ├── UIAlertControllerExtensions.swift
│       │               ├── UIApplicationExtensions.swift
│       │               ├── UIBarButtonItemExtensions.swift
│       │               ├── UIBezierPathExtensions.swift
│       │               ├── UIButtonExtensions.swift
│       │               ├── UICollectionViewExtensions.swift
│       │               ├── UIColorExtensions.swift
│       │               ├── UIDatePickerExtensions.swift
│       │               ├── UIFontExtensions.swift
│       │               ├── UIGestureRecognizerExtensions.swift
│       │               ├── UIImageExtensions.swift
│       │               ├── UIImageViewExtensions.swift
│       │               ├── UILabelExtensions.swift
│       │               ├── UILayoutPriorityExtensions.swift
│       │               ├── UINavigationBarExtensions.swift
│       │               ├── UINavigationControllerExtensions.swift
│       │               ├── UINavigationItemExtensions.swift
│       │               ├── UIRefreshControlExtensions.swift
│       │               ├── UIScrollViewExtensions.swift
│       │               ├── UISearchBarExtensions.swift
│       │               ├── UISegmentedControlExtensions.swift
│       │               ├── UISliderExtensions.swift
│       │               ├── UIStackViewExtensions.swift
│       │               ├── UIStoryboardExtensions.swift
│       │               ├── UISwitchExtensions.swift
│       │               ├── UITabBarExtensions.swift
│       │               ├── UITableViewExtensions.swift
│       │               ├── UITextFieldExtensions.swift
│       │               ├── UITextViewExtensions.swift
│       │               ├── UIViewControllerExtensions.swift
│       │               ├── UIViewExtensions.swift
│       │               └── UIWindowExtensions.swift
│       ├── SwifterSwift.xcodeproj/
│       │   └── project.pbxproj
│       ├── SwiftyJSON/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Source/
│       │       └── SwiftyJSON/
│       │           └── SwiftyJSON.swift
│       ├── SwiftyJSON.xcodeproj/
│       │   └── project.pbxproj
│       ├── TZImagePickerController/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── TZImagePickerController/
│       │       └── TZImagePickerController/
│       │           ├── NSBundle+TZImagePicker.h
│       │           ├── NSBundle+TZImagePicker.m
│       │           ├── TZAssetCell.h
│       │           ├── TZAssetCell.m
│       │           ├── TZAssetModel.h
│       │           ├── TZAssetModel.m
│       │           ├── TZAuthLimitedFooterTipView.h
│       │           ├── TZAuthLimitedFooterTipView.m
│       │           ├── TZGifPhotoPreviewController.h
│       │           ├── TZGifPhotoPreviewController.m
│       │           ├── TZImageCropManager.h
│       │           ├── TZImageCropManager.m
│       │           ├── TZImageManager.h
│       │           ├── TZImageManager.m
│       │           ├── TZImagePickerController.bundle/
│       │           │   ├── ar.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── de.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── en.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── es.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── fr.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── ja.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── ko-KP.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── pt.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── ru.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── vi.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── zh-Hans.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   └── zh-Hant.lproj/
│       │           │       └── Localizable.strings
│       │           ├── TZImagePickerController.h
│       │           ├── TZImagePickerController.m
│       │           ├── TZImageRequestOperation.h
│       │           ├── TZImageRequestOperation.m
│       │           ├── TZLocationManager.h
│       │           ├── TZLocationManager.m
│       │           ├── TZPhotoPickerController.h
│       │           ├── TZPhotoPickerController.m
│       │           ├── TZPhotoPreviewCell.h
│       │           ├── TZPhotoPreviewCell.m
│       │           ├── TZPhotoPreviewController.h
│       │           ├── TZPhotoPreviewController.m
│       │           ├── TZProgressView.h
│       │           ├── TZProgressView.m
│       │           ├── TZVideoCropController.h
│       │           ├── TZVideoCropController.m
│       │           ├── TZVideoEditedPreviewController.h
│       │           ├── TZVideoEditedPreviewController.m
│       │           ├── TZVideoPlayerController.h
│       │           ├── TZVideoPlayerController.m
│       │           ├── UIView+TZLayout.h
│       │           └── UIView+TZLayout.m
│       ├── TZImagePickerController.xcodeproj/
│       │   └── project.pbxproj
│       ├── Target Support Files/
│       │   ├── Alamofire/
│       │   │   ├── Alamofire-Info.plist
│       │   │   ├── Alamofire-dummy.m
│       │   │   ├── Alamofire-prefix.pch
│       │   │   ├── Alamofire-umbrella.h
│       │   │   ├── Alamofire.debug.xcconfig
│       │   │   ├── Alamofire.modulemap
│       │   │   └── Alamofire.release.xcconfig
│       │   ├── FDFullscreenPopGesture/
│       │   │   ├── FDFullscreenPopGesture-Info.plist
│       │   │   ├── FDFullscreenPopGesture-dummy.m
│       │   │   ├── FDFullscreenPopGesture-prefix.pch
│       │   │   ├── FDFullscreenPopGesture-umbrella.h
│       │   │   ├── FDFullscreenPopGesture.debug.xcconfig
│       │   │   ├── FDFullscreenPopGesture.modulemap
│       │   │   └── FDFullscreenPopGesture.release.xcconfig
│       │   ├── HandyJSON/
│       │   │   ├── HandyJSON-Info.plist
│       │   │   ├── HandyJSON-dummy.m
│       │   │   ├── HandyJSON-prefix.pch
│       │   │   ├── HandyJSON-umbrella.h
│       │   │   ├── HandyJSON.debug.xcconfig
│       │   │   ├── HandyJSON.modulemap
│       │   │   └── HandyJSON.release.xcconfig
│       │   ├── IGListDiffKit/
│       │   │   ├── IGListDiffKit-Info.plist
│       │   │   ├── IGListDiffKit-dummy.m
│       │   │   ├── IGListDiffKit-prefix.pch
│       │   │   ├── IGListDiffKit-umbrella.h
│       │   │   ├── IGListDiffKit.debug.xcconfig
│       │   │   ├── IGListDiffKit.modulemap
│       │   │   └── IGListDiffKit.release.xcconfig
│       │   ├── IGListKit/
│       │   │   ├── IGListKit-Info.plist
│       │   │   ├── IGListKit-dummy.m
│       │   │   ├── IGListKit-prefix.pch
│       │   │   ├── IGListKit-umbrella.h
│       │   │   ├── IGListKit.debug.xcconfig
│       │   │   ├── IGListKit.modulemap
│       │   │   └── IGListKit.release.xcconfig
│       │   ├── IQKeyboardManagerSwift/
│       │   │   ├── IQKeyboardManagerSwift-Info.plist
│       │   │   ├── IQKeyboardManagerSwift-dummy.m
│       │   │   ├── IQKeyboardManagerSwift-prefix.pch
│       │   │   ├── IQKeyboardManagerSwift-umbrella.h
│       │   │   ├── IQKeyboardManagerSwift.debug.xcconfig
│       │   │   ├── IQKeyboardManagerSwift.modulemap
│       │   │   └── IQKeyboardManagerSwift.release.xcconfig
│       │   ├── Kingfisher/
│       │   │   ├── Kingfisher-Info.plist
│       │   │   ├── Kingfisher-dummy.m
│       │   │   ├── Kingfisher-prefix.pch
│       │   │   ├── Kingfisher-umbrella.h
│       │   │   ├── Kingfisher.debug.xcconfig
│       │   │   ├── Kingfisher.modulemap
│       │   │   └── Kingfisher.release.xcconfig
│       │   ├── Localize-Swift/
│       │   │   ├── Localize-Swift-Info.plist
│       │   │   ├── Localize-Swift-dummy.m
│       │   │   ├── Localize-Swift-prefix.pch
│       │   │   ├── Localize-Swift-umbrella.h
│       │   │   ├── Localize-Swift.debug.xcconfig
│       │   │   ├── Localize-Swift.modulemap
│       │   │   └── Localize-Swift.release.xcconfig
│       │   ├── LookinServer/
│       │   │   ├── LookinServer-Info.plist
│       │   │   ├── LookinServer-dummy.m
│       │   │   ├── LookinServer-prefix.pch
│       │   │   ├── LookinServer-umbrella.h
│       │   │   ├── LookinServer.debug.xcconfig
│       │   │   ├── LookinServer.modulemap
│       │   │   └── LookinServer.release.xcconfig
│       │   ├── MBProgressHUD/
│       │   │   ├── MBProgressHUD-Info.plist
│       │   │   ├── MBProgressHUD-dummy.m
│       │   │   ├── MBProgressHUD-prefix.pch
│       │   │   ├── MBProgressHUD-umbrella.h
│       │   │   ├── MBProgressHUD.debug.xcconfig
│       │   │   ├── MBProgressHUD.modulemap
│       │   │   └── MBProgressHUD.release.xcconfig
│       │   ├── MJRefresh/
│       │   │   ├── MJRefresh-Info.plist
│       │   │   ├── MJRefresh-dummy.m
│       │   │   ├── MJRefresh-prefix.pch
│       │   │   ├── MJRefresh-umbrella.h
│       │   │   ├── MJRefresh.debug.xcconfig
│       │   │   ├── MJRefresh.modulemap
│       │   │   └── MJRefresh.release.xcconfig
│       │   ├── Moya/
│       │   │   ├── Moya-Info.plist
│       │   │   ├── Moya-dummy.m
│       │   │   ├── Moya-prefix.pch
│       │   │   ├── Moya-umbrella.h
│       │   │   ├── Moya.debug.xcconfig
│       │   │   ├── Moya.modulemap
│       │   │   └── Moya.release.xcconfig
│       │   ├── NSObject+Rx/
│       │   │   ├── NSObject+Rx-Info.plist
│       │   │   ├── NSObject+Rx-dummy.m
│       │   │   ├── NSObject+Rx-prefix.pch
│       │   │   ├── NSObject+Rx-umbrella.h
│       │   │   ├── NSObject+Rx.debug.xcconfig
│       │   │   ├── NSObject+Rx.modulemap
│       │   │   └── NSObject+Rx.release.xcconfig
│       │   ├── Pods-FY-IMChat/
│       │   │   ├── Pods-FY-IMChat-Info.plist
│       │   │   ├── Pods-FY-IMChat-acknowledgements.markdown
│       │   │   ├── Pods-FY-IMChat-acknowledgements.plist
│       │   │   ├── Pods-FY-IMChat-dummy.m
│       │   │   ├── Pods-FY-IMChat-frameworks.sh
│       │   │   ├── Pods-FY-IMChat-umbrella.h
│       │   │   ├── Pods-FY-IMChat.debug.xcconfig
│       │   │   ├── Pods-FY-IMChat.modulemap
│       │   │   └── Pods-FY-IMChat.release.xcconfig
│       │   ├── R.swift/
│       │   │   ├── R.swift.debug.xcconfig
│       │   │   └── R.swift.release.xcconfig
│       │   ├── R.swift.Library/
│       │   │   ├── R.swift.Library-Info.plist
│       │   │   ├── R.swift.Library-dummy.m
│       │   │   ├── R.swift.Library-prefix.pch
│       │   │   ├── R.swift.Library-umbrella.h
│       │   │   ├── R.swift.Library.debug.xcconfig
│       │   │   ├── R.swift.Library.modulemap
│       │   │   └── R.swift.Library.release.xcconfig
│       │   ├── ReachabilitySwift/
│       │   │   ├── ReachabilitySwift-Info.plist
│       │   │   ├── ReachabilitySwift-dummy.m
│       │   │   ├── ReachabilitySwift-prefix.pch
│       │   │   ├── ReachabilitySwift-umbrella.h
│       │   │   ├── ReachabilitySwift.debug.xcconfig
│       │   │   ├── ReachabilitySwift.modulemap
│       │   │   └── ReachabilitySwift.release.xcconfig
│       │   ├── RxCocoa/
│       │   │   ├── RxCocoa-Info.plist
│       │   │   ├── RxCocoa-dummy.m
│       │   │   ├── RxCocoa-prefix.pch
│       │   │   ├── RxCocoa-umbrella.h
│       │   │   ├── RxCocoa.debug.xcconfig
│       │   │   ├── RxCocoa.modulemap
│       │   │   └── RxCocoa.release.xcconfig
│       │   ├── RxRelay/
│       │   │   ├── RxRelay-Info.plist
│       │   │   ├── RxRelay-dummy.m
│       │   │   ├── RxRelay-prefix.pch
│       │   │   ├── RxRelay-umbrella.h
│       │   │   ├── RxRelay.debug.xcconfig
│       │   │   ├── RxRelay.modulemap
│       │   │   └── RxRelay.release.xcconfig
│       │   ├── RxSwift/
│       │   │   ├── RxSwift-Info.plist
│       │   │   ├── RxSwift-dummy.m
│       │   │   ├── RxSwift-prefix.pch
│       │   │   ├── RxSwift-umbrella.h
│       │   │   ├── RxSwift.debug.xcconfig
│       │   │   ├── RxSwift.modulemap
│       │   │   └── RxSwift.release.xcconfig
│       │   ├── RxTheme/
│       │   │   ├── RxTheme-Info.plist
│       │   │   ├── RxTheme-dummy.m
│       │   │   ├── RxTheme-prefix.pch
│       │   │   ├── RxTheme-umbrella.h
│       │   │   ├── RxTheme.debug.xcconfig
│       │   │   ├── RxTheme.modulemap
│       │   │   └── RxTheme.release.xcconfig
│       │   ├── SDWebImage/
│       │   │   ├── SDWebImage-Info.plist
│       │   │   ├── SDWebImage-dummy.m
│       │   │   ├── SDWebImage-prefix.pch
│       │   │   ├── SDWebImage-umbrella.h
│       │   │   ├── SDWebImage.debug.xcconfig
│       │   │   ├── SDWebImage.modulemap
│       │   │   └── SDWebImage.release.xcconfig
│       │   ├── SQLiteRepairKit/
│       │   │   ├── SQLiteRepairKit-Info.plist
│       │   │   ├── SQLiteRepairKit-dummy.m
│       │   │   ├── SQLiteRepairKit-prefix.pch
│       │   │   ├── SQLiteRepairKit-umbrella.h
│       │   │   ├── SQLiteRepairKit.debug.xcconfig
│       │   │   ├── SQLiteRepairKit.modulemap
│       │   │   └── SQLiteRepairKit.release.xcconfig
│       │   ├── SnapKit/
│       │   │   ├── SnapKit-Info.plist
│       │   │   ├── SnapKit-dummy.m
│       │   │   ├── SnapKit-prefix.pch
│       │   │   ├── SnapKit-umbrella.h
│       │   │   ├── SnapKit.debug.xcconfig
│       │   │   ├── SnapKit.modulemap
│       │   │   └── SnapKit.release.xcconfig
│       │   ├── SwiftDate/
│       │   │   ├── SwiftDate-Info.plist
│       │   │   ├── SwiftDate-dummy.m
│       │   │   ├── SwiftDate-prefix.pch
│       │   │   ├── SwiftDate-umbrella.h
│       │   │   ├── SwiftDate.debug.xcconfig
│       │   │   ├── SwiftDate.modulemap
│       │   │   └── SwiftDate.release.xcconfig
│       │   ├── SwifterSwift/
│       │   │   ├── SwifterSwift-Info.plist
│       │   │   ├── SwifterSwift-dummy.m
│       │   │   ├── SwifterSwift-prefix.pch
│       │   │   ├── SwifterSwift-umbrella.h
│       │   │   ├── SwifterSwift.debug.xcconfig
│       │   │   ├── SwifterSwift.modulemap
│       │   │   └── SwifterSwift.release.xcconfig
│       │   ├── SwiftyJSON/
│       │   │   ├── SwiftyJSON-Info.plist
│       │   │   ├── SwiftyJSON-dummy.m
│       │   │   ├── SwiftyJSON-prefix.pch
│       │   │   ├── SwiftyJSON-umbrella.h
│       │   │   ├── SwiftyJSON.debug.xcconfig
│       │   │   ├── SwiftyJSON.modulemap
│       │   │   └── SwiftyJSON.release.xcconfig
│       │   ├── TZImagePickerController/
│       │   │   ├── TZImagePickerController-Info.plist
│       │   │   ├── TZImagePickerController-dummy.m
│       │   │   ├── TZImagePickerController-prefix.pch
│       │   │   ├── TZImagePickerController-umbrella.h
│       │   │   ├── TZImagePickerController.debug.xcconfig
│       │   │   ├── TZImagePickerController.modulemap
│       │   │   └── TZImagePickerController.release.xcconfig
│       │   ├── UITableView+FDTemplateLayoutCell/
│       │   │   ├── UITableView+FDTemplateLayoutCell-Info.plist
│       │   │   ├── UITableView+FDTemplateLayoutCell-dummy.m
│       │   │   ├── UITableView+FDTemplateLayoutCell-prefix.pch
│       │   │   ├── UITableView+FDTemplateLayoutCell-umbrella.h
│       │   │   ├── UITableView+FDTemplateLayoutCell.debug.xcconfig
│       │   │   ├── UITableView+FDTemplateLayoutCell.modulemap
│       │   │   └── UITableView+FDTemplateLayoutCell.release.xcconfig
│       │   ├── UIView+FDCollapsibleConstraints/
│       │   │   ├── UIView+FDCollapsibleConstraints-Info.plist
│       │   │   ├── UIView+FDCollapsibleConstraints-dummy.m
│       │   │   ├── UIView+FDCollapsibleConstraints-prefix.pch
│       │   │   ├── UIView+FDCollapsibleConstraints-umbrella.h
│       │   │   ├── UIView+FDCollapsibleConstraints.debug.xcconfig
│       │   │   ├── UIView+FDCollapsibleConstraints.modulemap
│       │   │   └── UIView+FDCollapsibleConstraints.release.xcconfig
│       │   ├── WCDB.swift/
│       │   │   ├── WCDB.swift-Info.plist
│       │   │   ├── WCDB.swift-dummy.m
│       │   │   ├── WCDB.swift-prefix.pch
│       │   │   ├── WCDB.swift-umbrella.h
│       │   │   ├── WCDB.swift.debug.xcconfig
│       │   │   ├── WCDB.swift.modulemap
│       │   │   └── WCDB.swift.release.xcconfig
│       │   ├── WCDBOptimizedSQLCipher/
│       │   │   ├── WCDBOptimizedSQLCipher-Info.plist
│       │   │   ├── WCDBOptimizedSQLCipher-dummy.m
│       │   │   ├── WCDBOptimizedSQLCipher-prefix.pch
│       │   │   ├── WCDBOptimizedSQLCipher-umbrella.h
│       │   │   ├── WCDBOptimizedSQLCipher.debug.xcconfig
│       │   │   ├── WCDBOptimizedSQLCipher.modulemap
│       │   │   └── WCDBOptimizedSQLCipher.release.xcconfig
│       │   ├── YBImageBrowser/
│       │   │   ├── YBImageBrowser-Info.plist
│       │   │   ├── YBImageBrowser-dummy.m
│       │   │   ├── YBImageBrowser-prefix.pch
│       │   │   ├── YBImageBrowser-umbrella.h
│       │   │   ├── YBImageBrowser.debug.xcconfig
│       │   │   ├── YBImageBrowser.modulemap
│       │   │   └── YBImageBrowser.release.xcconfig
│       │   ├── YYImage/
│       │   │   ├── YYImage-Info.plist
│       │   │   ├── YYImage-dummy.m
│       │   │   ├── YYImage-prefix.pch
│       │   │   ├── YYImage-umbrella.h
│       │   │   ├── YYImage.debug.xcconfig
│       │   │   ├── YYImage.modulemap
│       │   │   └── YYImage.release.xcconfig
│       │   └── YYText/
│       │       ├── YYText-Info.plist
│       │       ├── YYText-dummy.m
│       │       ├── YYText-prefix.pch
│       │       ├── YYText-umbrella.h
│       │       ├── YYText.debug.xcconfig
│       │       ├── YYText.modulemap
│       │       └── YYText.release.xcconfig
│       ├── UITableView+FDTemplateLayoutCell/
│       │   ├── Classes/
│       │   │   ├── UITableView+FDIndexPathHeightCache.h
│       │   │   ├── UITableView+FDIndexPathHeightCache.m
│       │   │   ├── UITableView+FDKeyedHeightCache.h
│       │   │   ├── UITableView+FDKeyedHeightCache.m
│       │   │   ├── UITableView+FDTemplateLayoutCell.h
│       │   │   ├── UITableView+FDTemplateLayoutCell.m
│       │   │   ├── UITableView+FDTemplateLayoutCellDebug.h
│       │   │   └── UITableView+FDTemplateLayoutCellDebug.m
│       │   ├── LICENSE
│       │   └── README.md
│       ├── UITableView+FDTemplateLayoutCell.xcodeproj/
│       │   └── project.pbxproj
│       ├── UIView+FDCollapsibleConstraints/
│       │   ├── Classes/
│       │   │   ├── UIView+FDCollapsibleConstraints.h
│       │   │   └── UIView+FDCollapsibleConstraints.m
│       │   ├── LICENSE
│       │   └── README.md
│       ├── UIView+FDCollapsibleConstraints.xcodeproj/
│       │   └── project.pbxproj
│       ├── WCDB.swift/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── swift/
│       │       └── source/
│       │           ├── abstract/
│       │           │   ├── Column.swift
│       │           │   ├── ColumnDef.swift
│       │           │   ├── ColumnIndex.swift
│       │           │   ├── ColumnResult.swift
│       │           │   ├── ColumnType.swift
│       │           │   ├── Conflict.swift
│       │           │   ├── Convertible.swift
│       │           │   ├── Describable.swift
│       │           │   ├── Expression.swift
│       │           │   ├── ForeignKey.swift
│       │           │   ├── FundamentalValue.swift
│       │           │   ├── Handle.swift
│       │           │   ├── HandleStatement.swift
│       │           │   ├── JoinClause.swift
│       │           │   ├── LiteralValue.swift
│       │           │   ├── ModuleArgument.swift
│       │           │   ├── Operable.swift
│       │           │   ├── Order.swift
│       │           │   ├── OrderTerm.swift
│       │           │   ├── Pragma.swift
│       │           │   ├── Statement.swift
│       │           │   ├── StatementAlterTable.swift
│       │           │   ├── StatementAttach.swift
│       │           │   ├── StatementCreateIndex.swift
│       │           │   ├── StatementCreateTable.swift
│       │           │   ├── StatementCreateVirtualTable.swift
│       │           │   ├── StatementDelete.swift
│       │           │   ├── StatementDetach.swift
│       │           │   ├── StatementDropIndex.swift
│       │           │   ├── StatementDropTable.swift
│       │           │   ├── StatementExplain.swift
│       │           │   ├── StatementInsert.swift
│       │           │   ├── StatementPragma.swift
│       │           │   ├── StatementReindex.swift
│       │           │   ├── StatementRelease.swift
│       │           │   ├── StatementRollback.swift
│       │           │   ├── StatementSavepoint.swift
│       │           │   ├── StatementSelect.swift
│       │           │   ├── StatementTransaction.swift
│       │           │   ├── StatementUpdate.swift
│       │           │   ├── StatementVacuum.swift
│       │           │   ├── Subquery.swift
│       │           │   ├── TableConstraint.swift
│       │           │   ├── Tokenize.swift
│       │           │   └── Tracer.swift
│       │           ├── builtin/
│       │           │   ├── CodableType.swift
│       │           │   ├── CommonStatement.swift
│       │           │   └── Master.swift
│       │           ├── core/
│       │           │   ├── base/
│       │           │   │   ├── Config.swift
│       │           │   │   ├── Core.swift
│       │           │   │   ├── CoreStatement.swift
│       │           │   │   ├── Database.swift
│       │           │   │   ├── HandlePool.swift
│       │           │   │   ├── RecyclableCore.swift
│       │           │   │   └── Transaction.swift
│       │           │   ├── binding/
│       │           │   │   ├── ColumnConstraintBinding.swift
│       │           │   │   ├── IndexBinding.swift
│       │           │   │   ├── Property.swift
│       │           │   │   ├── Redirectable.swift
│       │           │   │   ├── TableBinding.swift
│       │           │   │   ├── TableConstraintBinding.swift
│       │           │   │   └── VirtualTableBinding.swift
│       │           │   ├── codable/
│       │           │   │   ├── CodingTableKey.swift
│       │           │   │   ├── ColumnCodable.swift
│       │           │   │   ├── ColumnTypeDecoder.swift
│       │           │   │   ├── TableCodable.swift
│       │           │   │   ├── TableDecoder.swift
│       │           │   │   └── TableEncoder.swift
│       │           │   ├── fts/
│       │           │   │   └── WCDBTokenize.swift
│       │           │   └── interface/
│       │           │       ├── ChainCall.swift
│       │           │       ├── Declare.swift
│       │           │       ├── Delete.swift
│       │           │       ├── Insert.swift
│       │           │       ├── Interface.swift
│       │           │       ├── MultiSelect.swift
│       │           │       ├── RowSelect.swift
│       │           │       ├── Select.swift
│       │           │       ├── Selectable.swift
│       │           │       ├── Table.swift
│       │           │       ├── TableInterface.swift
│       │           │       └── Update.swift
│       │           └── util/
│       │               ├── Atomic.swift
│       │               ├── ConcurrentList.swift
│       │               ├── Convenience.swift
│       │               ├── Error.swift
│       │               ├── File.swift
│       │               ├── Lock.swift
│       │               ├── Optional.swift
│       │               ├── RWLock.swift
│       │               ├── Recyclable.swift
│       │               ├── SQLite-Bridging.c
│       │               ├── SQLite-Bridging.h
│       │               ├── SQLite-Bridging.swift
│       │               ├── SteadyClock.swift
│       │               ├── Tagged.swift
│       │               ├── ThreadLocal.swift
│       │               ├── TimedQueue.swift
│       │               └── WCDB-Bridging.h
│       ├── WCDB.swift.xcodeproj/
│       │   └── project.pbxproj
│       ├── WCDBOptimizedSQLCipher/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   ├── ext/
│       │   │   ├── fts3/
│       │   │   │   ├── fts3.c
│       │   │   │   ├── fts3.h
│       │   │   │   ├── fts3Int.h
│       │   │   │   ├── fts3_aux.c
│       │   │   │   ├── fts3_expr.c
│       │   │   │   ├── fts3_hash.c
│       │   │   │   ├── fts3_hash.h
│       │   │   │   ├── fts3_icu.c
│       │   │   │   ├── fts3_porter.c
│       │   │   │   ├── fts3_snippet.c
│       │   │   │   ├── fts3_tokenize_vtab.c
│       │   │   │   ├── fts3_tokenizer.c
│       │   │   │   ├── fts3_tokenizer.h
│       │   │   │   ├── fts3_tokenizer1.c
│       │   │   │   ├── fts3_unicode.c
│       │   │   │   ├── fts3_unicode2.c
│       │   │   │   └── fts3_write.c
│       │   │   ├── icu/
│       │   │   │   ├── icu.c
│       │   │   │   └── sqliteicu.h
│       │   │   ├── rbu/
│       │   │   │   ├── sqlite3rbu.c
│       │   │   │   └── sqlite3rbu.h
│       │   │   ├── rtree/
│       │   │   │   ├── rtree.c
│       │   │   │   ├── rtree.h
│       │   │   │   └── sqlite3rtree.h
│       │   │   └── userauth/
│       │   │       └── sqlite3userauth.h
│       │   ├── fts5.c
│       │   ├── fts5.h
│       │   ├── keywordhash.h
│       │   ├── opcodes.c
│       │   ├── opcodes.h
│       │   ├── parse.c
│       │   ├── parse.h
│       │   ├── sqlite3.h
│       │   └── src/
│       │       ├── alter.c
│       │       ├── analyze.c
│       │       ├── attach.c
│       │       ├── auth.c
│       │       ├── backup.c
│       │       ├── bitvec.c
│       │       ├── btmutex.c
│       │       ├── btree.c
│       │       ├── btree.h
│       │       ├── btreeInt.h
│       │       ├── build.c
│       │       ├── callback.c
│       │       ├── complete.c
│       │       ├── crypto.c
│       │       ├── crypto.h
│       │       ├── crypto_cc.c
│       │       ├── crypto_impl.c
│       │       ├── crypto_libtomcrypt.c
│       │       ├── ctime.c
│       │       ├── date.c
│       │       ├── dbstat.c
│       │       ├── delete.c
│       │       ├── expr.c
│       │       ├── fault.c
│       │       ├── fkey.c
│       │       ├── func.c
│       │       ├── global.c
│       │       ├── hash.c
│       │       ├── hash.h
│       │       ├── hwtime.h
│       │       ├── insert.c
│       │       ├── legacy.c
│       │       ├── loadext.c
│       │       ├── main.c
│       │       ├── malloc.c
│       │       ├── mem0.c
│       │       ├── mem1.c
│       │       ├── mem2.c
│       │       ├── mem3.c
│       │       ├── mem5.c
│       │       ├── memjournal.c
│       │       ├── msvc.h
│       │       ├── mutex.c
│       │       ├── mutex.h
│       │       ├── mutex_noop.c
│       │       ├── mutex_unix.c
│       │       ├── mutex_wcdb.c
│       │       ├── mutex_wcdb.h
│       │       ├── notify.c
│       │       ├── os.c
│       │       ├── os.h
│       │       ├── os_common.h
│       │       ├── os_setup.h
│       │       ├── os_unix.c
│       │       ├── os_wcdb.c
│       │       ├── os_wcdb.h
│       │       ├── pager.c
│       │       ├── pager.h
│       │       ├── pcache.c
│       │       ├── pcache.h
│       │       ├── pcache1.c
│       │       ├── pragma.c
│       │       ├── pragma.h
│       │       ├── prepare.c
│       │       ├── printf.c
│       │       ├── queue.c
│       │       ├── queue.h
│       │       ├── random.c
│       │       ├── resolve.c
│       │       ├── rowset.c
│       │       ├── select.c
│       │       ├── sqlcipher.h
│       │       ├── sqlite3ext.h
│       │       ├── sqliteInt.h
│       │       ├── sqliteLimit.h
│       │       ├── status.c
│       │       ├── table.c
│       │       ├── threads.c
│       │       ├── tokenize.c
│       │       ├── treeview.c
│       │       ├── trigger.c
│       │       ├── update.c
│       │       ├── utf.c
│       │       ├── util.c
│       │       ├── vacuum.c
│       │       ├── vdbe.c
│       │       ├── vdbe.h
│       │       ├── vdbeInt.h
│       │       ├── vdbeapi.c
│       │       ├── vdbeaux.c
│       │       ├── vdbeblob.c
│       │       ├── vdbemem.c
│       │       ├── vdbesort.c
│       │       ├── vdbetrace.c
│       │       ├── vtab.c
│       │       ├── vxworks.h
│       │       ├── wal.c
│       │       ├── wal.h
│       │       ├── walker.c
│       │       ├── where.c
│       │       ├── whereInt.h
│       │       ├── wherecode.c
│       │       └── whereexpr.c
│       ├── WCDBOptimizedSQLCipher.xcodeproj/
│       │   └── project.pbxproj
│       ├── YBImageBrowser/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   ├── Video/
│       │   │   ├── YBIBVideoActionBar.h
│       │   │   ├── YBIBVideoActionBar.m
│       │   │   ├── YBIBVideoCell+Internal.h
│       │   │   ├── YBIBVideoCell.h
│       │   │   ├── YBIBVideoCell.m
│       │   │   ├── YBIBVideoData+Internal.h
│       │   │   ├── YBIBVideoData.h
│       │   │   ├── YBIBVideoData.m
│       │   │   ├── YBIBVideoTopBar.h
│       │   │   ├── YBIBVideoTopBar.m
│       │   │   ├── YBIBVideoView.h
│       │   │   └── YBIBVideoView.m
│       │   └── YBImageBrowser/
│       │       ├── AuxiliaryView/
│       │       │   ├── YBIBAuxiliaryViewHandler.h
│       │       │   ├── YBIBAuxiliaryViewHandler.m
│       │       │   ├── YBIBLoadingView.h
│       │       │   ├── YBIBLoadingView.m
│       │       │   ├── YBIBToastView.h
│       │       │   └── YBIBToastView.m
│       │       ├── Base/
│       │       │   ├── NSObject+YBImageBrowser.h
│       │       │   ├── NSObject+YBImageBrowser.m
│       │       │   ├── YBIBAnimatedTransition.h
│       │       │   ├── YBIBAnimatedTransition.m
│       │       │   ├── YBIBCollectionView.h
│       │       │   ├── YBIBCollectionView.m
│       │       │   ├── YBIBCollectionViewLayout.h
│       │       │   ├── YBIBCollectionViewLayout.m
│       │       │   ├── YBIBContainerView.h
│       │       │   ├── YBIBContainerView.m
│       │       │   ├── YBIBDataMediator.h
│       │       │   ├── YBIBDataMediator.m
│       │       │   ├── YBIBScreenRotationHandler.h
│       │       │   ├── YBIBScreenRotationHandler.m
│       │       │   └── YBImageBrowser+Internal.h
│       │       ├── Helper/
│       │       │   ├── YBIBCopywriter.h
│       │       │   ├── YBIBCopywriter.m
│       │       │   ├── YBIBIconManager.h
│       │       │   ├── YBIBIconManager.m
│       │       │   ├── YBIBPhotoAlbumManager.h
│       │       │   ├── YBIBPhotoAlbumManager.m
│       │       │   ├── YBIBSentinel.h
│       │       │   ├── YBIBSentinel.m
│       │       │   ├── YBIBUtilities.h
│       │       │   └── YBIBUtilities.m
│       │       ├── Image/
│       │       │   ├── YBIBImageCache+Internal.h
│       │       │   ├── YBIBImageCache.h
│       │       │   ├── YBIBImageCache.m
│       │       │   ├── YBIBImageCell+Internal.h
│       │       │   ├── YBIBImageCell.h
│       │       │   ├── YBIBImageCell.m
│       │       │   ├── YBIBImageData+Internal.h
│       │       │   ├── YBIBImageData.h
│       │       │   ├── YBIBImageData.m
│       │       │   ├── YBIBImageLayout.h
│       │       │   ├── YBIBImageLayout.m
│       │       │   ├── YBIBImageScrollView.h
│       │       │   ├── YBIBImageScrollView.m
│       │       │   ├── YBIBInteractionProfile.h
│       │       │   ├── YBIBInteractionProfile.m
│       │       │   ├── YBImage.h
│       │       │   └── YBImage.m
│       │       ├── Protocol/
│       │       │   ├── YBIBCellProtocol.h
│       │       │   ├── YBIBDataProtocol.h
│       │       │   ├── YBIBGetBaseInfoProtocol.h
│       │       │   ├── YBIBOperateBrowserProtocol.h
│       │       │   ├── YBIBOrientationReceiveProtocol.h
│       │       │   ├── YBImageBrowserDataSource.h
│       │       │   └── YBImageBrowserDelegate.h
│       │       ├── ToolView/
│       │       │   ├── YBIBSheetView.h
│       │       │   ├── YBIBSheetView.m
│       │       │   ├── YBIBToolViewHandler.h
│       │       │   ├── YBIBToolViewHandler.m
│       │       │   ├── YBIBTopView.h
│       │       │   └── YBIBTopView.m
│       │       ├── WebImageMediator/
│       │       │   ├── YBIBDefaultWebImageMediator.h
│       │       │   ├── YBIBDefaultWebImageMediator.m
│       │       │   └── YBIBWebImageMediator.h
│       │       ├── YBImageBrowser.h
│       │       └── YBImageBrowser.m
│       ├── YBImageBrowser.xcodeproj/
│       │   └── project.pbxproj
│       ├── YYImage/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── YYImage/
│       │       ├── YYAnimatedImageView.h
│       │       ├── YYAnimatedImageView.m
│       │       ├── YYFrameImage.h
│       │       ├── YYFrameImage.m
│       │       ├── YYImage.h
│       │       ├── YYImage.m
│       │       ├── YYImageCoder.h
│       │       ├── YYImageCoder.m
│       │       ├── YYSpriteSheetImage.h
│       │       └── YYSpriteSheetImage.m
│       ├── YYImage.xcodeproj/
│       │   └── project.pbxproj
│       ├── YYText/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── YYText/
│       │       ├── Component/
│       │       │   ├── YYTextContainerView.h
│       │       │   ├── YYTextContainerView.m
│       │       │   ├── YYTextDebugOption.h
│       │       │   ├── YYTextDebugOption.m
│       │       │   ├── YYTextEffectWindow.h
│       │       │   ├── YYTextEffectWindow.m
│       │       │   ├── YYTextInput.h
│       │       │   ├── YYTextInput.m
│       │       │   ├── YYTextKeyboardManager.h
│       │       │   ├── YYTextKeyboardManager.m
│       │       │   ├── YYTextLayout.h
│       │       │   ├── YYTextLayout.m
│       │       │   ├── YYTextLine.h
│       │       │   ├── YYTextLine.m
│       │       │   ├── YYTextMagnifier.h
│       │       │   ├── YYTextMagnifier.m
│       │       │   ├── YYTextSelectionView.h
│       │       │   └── YYTextSelectionView.m
│       │       ├── String/
│       │       │   ├── YYTextArchiver.h
│       │       │   ├── YYTextArchiver.m
│       │       │   ├── YYTextAttribute.h
│       │       │   ├── YYTextAttribute.m
│       │       │   ├── YYTextParser.h
│       │       │   ├── YYTextParser.m
│       │       │   ├── YYTextRubyAnnotation.h
│       │       │   ├── YYTextRubyAnnotation.m
│       │       │   ├── YYTextRunDelegate.h
│       │       │   └── YYTextRunDelegate.m
│       │       ├── Utility/
│       │       │   ├── NSAttributedString+YYText.h
│       │       │   ├── NSAttributedString+YYText.m
│       │       │   ├── NSParagraphStyle+YYText.h
│       │       │   ├── NSParagraphStyle+YYText.m
│       │       │   ├── UIPasteboard+YYText.h
│       │       │   ├── UIPasteboard+YYText.m
│       │       │   ├── UIView+YYText.h
│       │       │   ├── UIView+YYText.m
│       │       │   ├── YYTextAsyncLayer.h
│       │       │   ├── YYTextAsyncLayer.m
│       │       │   ├── YYTextTransaction.h
│       │       │   ├── YYTextTransaction.m
│       │       │   ├── YYTextUtilities.h
│       │       │   ├── YYTextUtilities.m
│       │       │   ├── YYTextWeakProxy.h
│       │       │   └── YYTextWeakProxy.m
│       │       ├── YYLabel.h
│       │       ├── YYLabel.m
│       │       ├── YYText.h
│       │       ├── YYTextView.h
│       │       └── YYTextView.m
│       └── YYText.xcodeproj/
│           └── project.pbxproj
├── LICENSE
└── README.md

================================================
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
*.moved-aside
*.xccheckout
*.xcscmblueprint

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

## 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/
# Package.pins
# Package.resolved
.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/
#
# Add this line if you want to avoid checking in source code from the Xcode workspace
# *.xcworkspace

# 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://docs.fastlane.tools/best-practices/source-control/#source-control

fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output

# Code Injection
#
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode

iOSInjectionProject/


================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{
  "images" : [
    {
      "size" : "20x20",
      "idiom" : "iphone",
      "filename" : "Icon-Notification@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "20x20",
      "idiom" : "iphone",
      "filename" : "Icon-Notification@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "Icon-Small.png",
      "scale" : "1x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "Icon-Small@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "Icon-Small@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "Icon-Small-40@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "Icon-Small-40@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "Icon-60@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "Icon-60@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "1024x1024",
      "idiom" : "ios-marketing",
      "filename" : "Icon-60@2xstore_1024pt.png",
      "scale" : "1x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/Contents.json
================================================
{
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/MessageVideoDownload.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "MessageVideoDownload@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "MessageVideoDownload@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/MessageVideoPlay.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "MessageVideoPlay@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "MessageVideoPlay@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/ReceiverImageNodeBorder.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "ReceiverImageNodeBorder@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "ReceiverImageNodeBorder@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/ic_avatar_placeholder.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "ic_avatar_placeholder.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_avatar_placeholder@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_avatar_placeholder@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/ic_group_placeholder.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "ic_group_placeholder.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_group_placeholder@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_group_placeholder@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/ic_msg_forward_n.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_msg_forward_n@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_msg_forward_n@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/ic_msg_forward_s.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_msg_forward_s@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_msg_forward_s@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/message_receiver_background_highlight.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_receiver_background_highlight@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_receiver_background_highlight@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/message_receiver_background_normal.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_receiver_background_normal@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_receiver_background_normal@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/message_receiver_background_reversed.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_receiver_background_reversed@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_receiver_background_reversed@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/message_sender_background_highlight.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_sender_background_highlight@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_sender_background_highlight@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/message_sender_background_normal.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_sender_background_normal@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_sender_background_normal@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/message_sender_background_reversed.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_sender_background_reversed@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_sender_background_reversed@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/message_voice_receiver_normal.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_voice_receiver_normal@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_voice_receiver_normal@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/message_voice_receiver_playing_1.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_voice_receiver_playing_1@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_voice_receiver_playing_1@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/message_voice_receiver_playing_2.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_voice_receiver_playing_2@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_voice_receiver_playing_2@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/message_voice_receiver_playing_3.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_voice_receiver_playing_3@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_voice_receiver_playing_3@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/message_voice_sender_normal.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_voice_sender_normal@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_voice_sender_normal@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/message_voice_sender_playing_1.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_voice_sender_playing_1@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_voice_sender_playing_1@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/message_voice_sender_playing_2.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_voice_sender_playing_2@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_voice_sender_playing_2@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/message_voice_sender_playing_3.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_voice_sender_playing_3@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "message_voice_sender_playing_3@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/play_btn_normal.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "play_btn_normal.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/play_btn_pressed.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "play_btn_pressed.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/player_back_button.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "player_back_button@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "player_back_button@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/ChatView/player_suspend_button.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "player_suspend_button@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "player_suspend_button@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/Common/Contents.json
================================================
{
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/Common/ic_list_selection.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "ic_list_selection@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "ic_list_selection@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/Common/ic_placeholder.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "ic_placeholder@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "ic_placeholder@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/Contents.json
================================================
{
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/LaunchImage.launchimage/Contents.json
================================================
{
  "images" : [
    {
      "extent" : "full-screen",
      "idiom" : "iphone",
      "subtype" : "2436h",
      "filename" : "LaunchImage(1125*2436).png",
      "minimum-system-version" : "11.0",
      "orientation" : "portrait",
      "scale" : "3x"
    },
    {
      "extent" : "full-screen",
      "idiom" : "iphone",
      "subtype" : "736h",
      "filename" : "LaunchImage(1242*2208).png",
      "minimum-system-version" : "8.0",
      "orientation" : "portrait",
      "scale" : "3x"
    },
    {
      "extent" : "full-screen",
      "idiom" : "iphone",
      "subtype" : "667h",
      "filename" : "LaunchImage(750*1334).png",
      "minimum-system-version" : "8.0",
      "orientation" : "portrait",
      "scale" : "2x"
    },
    {
      "orientation" : "portrait",
      "idiom" : "iphone",
      "filename" : "LaunchImage(640*960)-1.png",
      "extent" : "full-screen",
      "minimum-system-version" : "7.0",
      "scale" : "2x"
    },
    {
      "extent" : "full-screen",
      "idiom" : "iphone",
      "subtype" : "retina4",
      "filename" : "LaunchImage(640*1136)-1.png",
      "minimum-system-version" : "7.0",
      "orientation" : "portrait",
      "scale" : "2x"
    },
    {
      "orientation" : "portrait",
      "idiom" : "ipad",
      "filename" : "LaunchImage(768*1024)-1.png",
      "extent" : "full-screen",
      "minimum-system-version" : "7.0",
      "scale" : "1x"
    },
    {
      "orientation" : "portrait",
      "idiom" : "ipad",
      "filename" : "LaunchImage(768*1024)@2x-1.png",
      "extent" : "full-screen",
      "minimum-system-version" : "7.0",
      "scale" : "2x"
    },
    {
      "orientation" : "portrait",
      "idiom" : "iphone",
      "filename" : "Launch(320*480).png",
      "extent" : "full-screen",
      "scale" : "1x"
    },
    {
      "orientation" : "portrait",
      "idiom" : "iphone",
      "filename" : "LaunchImage(640*960).png",
      "extent" : "full-screen",
      "scale" : "2x"
    },
    {
      "orientation" : "portrait",
      "idiom" : "iphone",
      "filename" : "LaunchImage(640*1136).png",
      "extent" : "full-screen",
      "subtype" : "retina4",
      "scale" : "2x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/Mine/Contents.json
================================================
{
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/Mine/icon_arrow_right.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "icon_arrow_right@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "icon_arrow_right@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/Moments/Contents.json
================================================
{
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/Moments/ic_album_reflash.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "ic_album_reflash@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/Moments/ic_comment_normal.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "ic_comment_normal@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "ic_comment_normal@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/Moments/ic_comment_selected.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "ic_comment_selected@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "ic_comment_selected@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/Moments/ic_star_normal.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "ic_star_normal@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "ic_star_normal@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/Moments/ic_star_selected.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "ic_star_selected@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "ic_star_selected@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/Moments/nav_camera_black.imageset/Contents.json
================================================
{
  "images" : [
    {
      "filename" : "nav_camera_black.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/Moments/nav_camera_white.imageset/Contents.json
================================================
{
  "images" : [
    {
      "filename" : "nav_camera_white.png",
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/Nav/Contents.json
================================================
{
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/Nav/icon_more_add.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "icon_more_add@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "icon_more_add@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/Nav/nav_back_black.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "nav_back_black@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "nav_back_black@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/Nav/nav_back_white.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "filename" : "nav_back_white@2x.png",
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "filename" : "nav_back_white@3x.png",
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/TabBar/Contents.json
================================================
{
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/TabBar/ic_tabbar01_normal.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_tabbar01_normal@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_tabbar01_normal@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/TabBar/ic_tabbar01_selected.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_tabbar01_selected@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_tabbar01_selected@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/TabBar/ic_tabbar02_normal.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_tabbar02_normal@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_tabbar02_normal@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/TabBar/ic_tabbar02_selected.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_tabbar02_selected@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_tabbar02_selected@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/TabBar/ic_tabbar03_normal.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_tabbar03_normal@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_tabbar03_normal@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/TabBar/ic_tabbar03_selected.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_tabbar03_selected@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_tabbar03_selected@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/TabBar/ic_tabbar04_normal.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_tabbar04_normal@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_tabbar04_normal@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Assets.xcassets/TabBar/ic_tabbar04_selected.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_tabbar04_selected@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "ic_tabbar04_selected@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: JetChat/FY-IMChat/Classes/AppDelegate/AppDelegate+Utils.swift
================================================
//
//  AppDelegate+Utils.swift
//  FY-JetChat
//
//  Created by iOS.Jet on 2019/2/28.
//  Copyright © 2019 Jett. All rights reserved.
//

import Foundation
import Reachability
import IQKeyboardManagerSwift
import SnapKit
import Localize_Swift
import RxSwift
import RxCocoa
import NSObject_Rx
import SwifterSwift
import RxTheme
import WidgetKit

extension AppDelegate {
    
    // MARK: - NetworkStatusListener
    // 开始网络连接状态监听
    func networkStatusListener() {
        // 1.设置网络状态消息监听
        // 2.获得网络Reachability对象
        NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged(note:)), name: .reachabilityChanged, object: reachability)
        do {
            // 3.开启网络状态消息监听
            try reachability.startNotifier()
        }catch {
            print("could not start reachability notifier")
        }
    }
    
    @objc func reachabilityChanged(note: NSNotification) {
        // 4.准备获取网络连接信息
        let curReachability = note.object as! Reachability
        // 5.判断网络连接状态A
        switch curReachability.connection {
        case .wifi:
            printLog("Reachable via WiFi")
        case .cellular:
            printLog("Reachable via Cellular")
        case .none:
            printLog("Network not reachable")
            showReachability("当前网络已断开".rLocalized())
        case .unavailable:
            printLog("Network not unavailable")
            showReachability("当前网络已断开".rLocalized())
        }
    }
    
    func showReachability(_ message: String) {
        MBHUD.showImageError(message)
    }
    
    // MARK: - AppearanceSetting
    func appearanceSetting() {
        // iOS 11 及其以上系统运行
        if #available(iOS 11, *) {
            UIScrollView.appearance().contentInsetAdjustmentBehavior = .never
            UITableView.appearance().contentInsetAdjustmentBehavior = .never
            UICollectionView.appearance().contentInsetAdjustmentBehavior = .never
        }
    }
    
    // MARK: - 设置窗口根控制器
    func setupViewController() {
        window = UIWindow(frame: UIScreen.main.bounds)
        window?.backgroundColor = UIColor.white
        
        let tabBar = FYBaseTabBarController()
        AppDelegate.app.window?.rootViewController = tabBar
        AppDelegate.app.window?.makeKeyAndVisible()
    }
    
    // MARK: - 键盘管理
    func keyboardManager() {
        //开启键盘监听
        IQKeyboardManager.shared.enable = true
        //控制点击背景是否收起键盘
        IQKeyboardManager.shared.shouldResignOnTouchOutside = true
        //控制键盘上的工具条文字颜色是否用户自定义
        IQKeyboardManager.shared.shouldToolbarUsesTextFieldTintColor = true
        //IQKeyboardManager.sharedManager().shouldToolbarUsesTextFieldTintColor = true
        //将右边Done改成完成
        //IQKeyboardManager.shared.toolbarDoneBarButtonItemText = "完成"
        // 控制是否显示键盘上的工具条
        IQKeyboardManager.shared.enableAutoToolbar = true
        //最新版的设置键盘的returnKey的关键字 ,可以点击键盘上的next键,自动跳转到下一个输入框,最后一个输入框点击完成,自动收起键盘
        IQKeyboardManager.shared.toolbarManageBehaviour = .byPosition
    }
    
    func configTheme() {
        // 上次所选主题
        if (lastThemeMode == .system) {
            if #available(iOS 13.0, *) {
                // iOS13可跟随系统
                if UITraitCollection.current.userInterfaceStyle == .dark {
                    print("System Dark mode")
                    themeService.switch(.dark)
                }else {
                    print("System Light mode")
                    themeService.switch(.light)
                }
            }
        }else {
            // 自行选择的
            switch lastThemeMode {
            case .light:
                themeService.switch(.light)
            default:
                themeService.switch(.dark)
            }
        }
    }
    
    // 刷新Widget数据
    func reloadWidgetData() {
        
        if #available(iOS 14.0, *) {
            WidgetCenter.shared.reloadAllTimelines()
            WidgetCenter.shared.reloadTimelines(ofKind: "JetChatWidget")
        } else {
            // Fallback on earlier versions
        }
    }
    
    // FPS
    func setupFPSStatus() {
#if DEBUG
        UIApplication.shared.keyWindow?.addSubview(fpsLabel)
#endif
    }
    
    func appInitializes() {
        configTheme()
        keyboardManager()
        appearanceSetting()
        networkStatusListener()
        LanguageManager.manager.initConfig()
        // 刷新Widget组件数据
        reloadWidgetData()
    }
}


extension AppDelegate {
    
    /// 获取window当前导航控制器
    public var currentViewController: UIViewController? {
        get {
            guard UIApplication.shared.keyWindow?.rootViewController != nil else {
                return nil
            }
            
            if let nav = UIApplication.shared.keyWindow?.rootViewController as? UINavigationController {
                return nav
            }
            if let tab = UIApplication.shared.keyWindow?.rootViewController as? UITabBarController {
                return tab
            }
            if let rootVC = UIApplication.shared.keyWindow?.rootViewController {
                return rootVC
            }
            
            return nil
        }
    }
}




================================================
FILE: JetChat/FY-IMChat/Classes/AppDelegate/AppDelegate+Wcdb.swift
================================================
//
//  AppDelegate+Wcdb.swift
//  FY-JetChat
//
//  Created by iOS.Jet on 2019/11/9.
//  Copyright © 2019 Jett. All rights reserved.
//

import Foundation
import WCDBSwift

extension AppDelegate {
    
    /// 创建数据库-表
    func createWcdbTable()
    {
        WCDataBaseManager.shared.createTable(table: kTABLE.chat, of: FYMessageChatModel.self)
        WCDataBaseManager.shared.createTable(table: kTABLE.message, of: FYMessageItem.self)
        WCDataBaseManager.shared.createTable(table: kTABLE.session, of: FYMessageItem.self)
    }
}


================================================
FILE: JetChat/FY-IMChat/Classes/AppDelegate/AppDelegate.swift
================================================
//
//  AppDelegate.swift
//  FY-JetChat
//
//  Created by iOS.Jet on 2019/2/27.
//  Copyright © 2019 Jett. All rights reserved.
//

import UIKit
import Reachability
import WCDBSwift

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    /// 单利
    static let app: AppDelegate = (UIApplication.shared.delegate as? AppDelegate)!
    
    let reachability = try! Reachability.init()
    
    var window: UIWindow?

    var lastThemeMode: FYThemeMode {
        return FYThemeCenter.shared.currentTheme
    }
    
    /// fps
    public lazy var fpsLabel: FPSLabel = {
        let label = FPSLabel(frame: CGRect.init(x: kScreenW - 80, y: (kScreenH - 30)/2, width: 70, height: 30))
        label.backgroundColor = .red
        label.textColor = .white
        return label
    }()
    
    /// 毛玻璃
    fileprivate lazy var visualEffectView: UIVisualEffectView = {
        let blurEffect = UIBlurEffect.init(style: lastThemeMode == .dark ? .dark : .light)
        let vi = UIVisualEffectView(effect: blurEffect)
        vi.frame = UIScreen.main.bounds
        vi.alpha = 0
        return vi
    }()
    
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // app initialize
        appInitializes()
        // init rootViewController
        setupViewController()
        // create db table
        createWcdbTable()
        // FPS
        setupFPSStatus()
        
        return true
    }

    // 快要进入前台
    func applicationWillResignActive(_ application: UIApplication) {
        reloadWidgetData()
    }
    
    // 已经退到后台
    func applicationDidEnterBackground(_ application: UIApplication) {
        reloadWidgetData()
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
    }

    // 已经进入到前台
    func applicationDidBecomeActive(_ application: UIApplication) {
        reloadWidgetData()
    }

    func applicationWillTerminate(_ application: UIApplication) {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    }
    
    // 接收Widget点击交互
    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        if url.absoluteURL.absoluteString.contains("chatId") {
            let urlString = url.absoluteURL.absoluteString
            let chatObjc = urlString.components(separatedBy:"=")
            if let chatId = chatObjc.last {
                printLog("Widget safe chatId === \(chatId)")
                openWidgetChat(chatId: chatId.int ?? -1)
            }
        }
        
        return true
    }
    
    // MARK: - Widget
    
    private func openWidgetChat(chatId: Int) {
        guard chatId > 0 else { return }
        
        let chatModel = FYDBQueryHelper.shared.qureyFromChatId(chatId)
        let chatVc = FYChatBaseViewController(chatModel: chatModel)
        
        if let tabbar = AppDelegate.app.window?.rootViewController as? UITabBarController {
            if let nav = tabbar.viewControllers?[tabbar.selectedIndex] as? UINavigationController {
                nav.pushViewController(chatVc, animated: false)
            }
        }
    }
    
    // MARK: - VisualEffect
    
    private func addWindowVisualEffect() {
        
        UIApplication.shared.keyWindow?.addSubview(self.visualEffectView)
        UIView.animate(withDuration: 0.5) {
            self.visualEffectView.alpha = 1
        }
    }
    
    private func removeWindowVisualEffect() {
        
        if !visualEffectView.isEqual(nil)  {
            UIView.animate(withDuration: 0.25) {
                self.visualEffectView.alpha = 0
            } completion: { finished in
                self.visualEffectView.removeFromSuperview()
            }
        }
    }

    deinit {
        // 关闭网络状态消息监听
        reachability.stopNotifier()
        // 移除网络状态消息通知
        NotificationCenter.default.removeObserver(self, name: .reachabilityChanged, object: reachability)
    }
}





================================================
FILE: JetChat/FY-IMChat/Classes/Base/FYBaseIGListViewController.swift
================================================
//
//  FYBaseIGListViewController.swift
//  FY-JetChat
//
//  Created by Jett on 2022/4/28.
//  Copyright © 2022 Jett. All rights reserved.
//

import UIKit
import IGListKit
import IGListDiffKit

class FYBaseIGListViewController: FYBaseViewController {

    // MARK: - lazy var
    
    var objects: [ListDiffable] = [ListDiffable]()
    
    /// 朋友圈-列表
    lazy var collectionView: UICollectionView = {
        let flowLayout = UICollectionViewFlowLayout()
        let collectionView = UICollectionView(frame: CGRect.zero, collectionViewLayout: flowLayout)
        if #available(iOS 11.0, *) {
            collectionView.contentInsetAdjustmentBehavior = .never
        } else {
            automaticallyAdjustsScrollViewInsets = false
        }
        collectionView.backgroundColor = .clear
        return collectionView
    }()
    
    lazy var adapter: ListAdapter = {
        let adapter = ListAdapter(updater: ListAdapterUpdater(), viewController: self)
        return adapter
    }()

    // MARK: - life cycle
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        self.navigationController?.setNavigationBarHidden(true, animated: animated)
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
    }
    
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        self.view.endEditing(true)
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.theme.backgroundColor = themed { $0.FYColor_BackgroundColor_V5 }
        
        self.fd_prefersNavigationBarHidden = true
        self.automaticallyAdjustsScrollViewInsets = false
        self.modalPresentationCapturesStatusBarAppearance = false
        
        view.addSubview(collectionView)
        adapter.collectionView = collectionView
        adapter.dataSource = self
        
        makeUI()
        createViewModel()
        bindViewModel()
    }
    
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        collectionView.frame = view.bounds
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        view.endEditing(true)
        UIApplication.shared.keyWindow?.endEditing(true)
    }
}

// MARK: - <ListAdapterDataSource>

extension FYBaseIGListViewController : ListAdapterDataSource {
    
    func objects(for listAdapter: ListAdapter) -> [ListDiffable] {
        return objects
    }
    
    func listAdapter(_ listAdapter: ListAdapter, sectionControllerFor object: Any) -> ListSectionController {
        return ListSectionController()
    }
    
    func emptyView(for listAdapter: ListAdapter) -> UIView? {
        // 无数据时collectionView的展示
        return nil
    }
}

extension Notification.Name {
    
    struct list {
        /// 发布通知
        static let publish = Notification.Name("list-publish")
        /// 删除通知
        static let delete = Notification.Name("list-delete")
        /// 定位通知
        static let location = Notification.Name("list-location")
        /// collectionview的评论列表定位到当前通知
        static let contentOffset = Notification.Name("list-contentOffset")
        /// 跳转通知
        static let push = Notification.Name("list-push")
        /// 打开URL通知
        static let openURL = Notification.Name("list-openURL")
    }
}


extension NSObject {
    /// 返回类名
    static var fy_className: String {
        get {
            let a = NSStringFromClass(self)
            let className = a.split(separator: ".").last
            return String(className!)
        }
    }
}


public extension UITableView {
    /// 获取当前`cell`实例
    func cell<T>(_ cellClass: T.Type, reuseIdentifier: String? = nil, fromNib: Bool = false) -> T where T : UITableViewCell {
        let identifier = reuseIdentifier ?? cellClass.fy_className
        var cell = dequeueReusableCell(withIdentifier: identifier) as? T
        if cell == nil {
            if fromNib {
                cell = Bundle.main.loadNibNamed(cellClass.fy_className, owner: self
                                                , options: nil)?.last as? T
            }else {
                cell = T(style: .default, reuseIdentifier: identifier)
            }
        }
        return cell!
    }
}

public extension UICollectionView {
    
    /// 获取当前`cell`实例
    func cell<T>(_ cellClass: T.Type, indexPath: IndexPath, reuseIdentifier: String? = nil, fromNib: Bool = false) -> T where T : UICollectionViewCell {
        let identifier = reuseIdentifier ?? cellClass.fy_className
        if fromNib {
            register(UINib(nibName: cellClass.fy_className, bundle: nil), forCellWithReuseIdentifier: identifier)
        }else {
            register(cellClass, forCellWithReuseIdentifier: identifier)
        }
        return dequeueReusableCell(withReuseIdentifier: identifier, for: indexPath) as! T
    }
}



================================================
FILE: JetChat/FY-IMChat/Classes/Base/FYBaseNavigationController.swift
================================================
//
//  FYBaseNavigationController.swift
//  FY-JetChat
//
//  Created by iOS.Jet on 2019/2/28.
//  Copyright © 2019 Jett. All rights reserved.
//

import UIKit
import RxTheme
import RxSwift
import RxCocoa

class FYBaseNavigationController: UINavigationController {
    
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
    
    private var titleTextAttributes: [NSAttributedString.Key : NSObject] {
        return [NSAttributedString.Key.font:UIFont.PingFangMedium(17),
                NSAttributedString.Key.foregroundColor:UIColor.white]
    }
    
    private lazy var backButton: UIButton = {
        let button = UIButton(type: .custom)
        button.frame = CGRect(x: 0, y: 0, width: 40, height: 40)
        button.theme.buttonImage(from: themed { $0.nav_back_image }, for: .normal)
        button.imageEdgeInsets = UIEdgeInsets(top: 0, left:-20, bottom: 0, right: 0)
        button.addTarget(self, action: #selector(pop), for: .touchUpInside)
        return button
    }()
    
    // MARK: - Life cycle
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        didInitialize()
    }
    
    // 初始化导航栏
    func didInitialize() {
        self.navigationBar.shadowImage = UIImage()
        
        settingNavBarStyle()
        
        // 设置代理
        delegate = self
        self.navigationBar.isTranslucent = false
        self.interactivePopGestureRecognizer?.delegate = self
        self.automaticallyAdjustsScrollViewInsets = false;
    }
    
    private func addThemeChangedNoti() {
        NotificationCenter.default.addObserver(self, selector: #selector(settingNavBarStyle), name: .kTraitCollectionDidChange, object: nil)
    }

    // MARK: - Notification
    
    @objc private func settingNavBarStyle() {
        
        themeService.typeStream.subscribe ({ theme in
            
            if #available(iOS 13, *) {
                let appearance = UINavigationBarAppearance()
                // 重置导航栏背景颜色和阴影
                appearance.configureWithOpaqueBackground()
                appearance.shadowImage = UIImage()
                appearance.shadowColor = nil
                appearance.titleTextAttributes = self.titleTextAttributes
                
                switch theme.event.element {
                case .light:
                    // 设置背景色
                    appearance.theme.backgroundColor = themed { $0.FYColor_Nav_BackgroundColor }
                    self.navigationBar.standardAppearance = appearance
                    self.navigationBar.scrollEdgeAppearance = appearance
                    
                default:
                    // 设置背景色
                    appearance.theme.backgroundColor = themed { $0.FYColor_Nav_BackgroundColor }
                    self.navigationBar.standardAppearance = appearance
                    self.navigationBar.scrollEdgeAppearance = appearance
                }
            }
            else {
                // 导航栏背景颜色
                self.navigationBar.theme.backgroundColor = themed { $0.FYColor_Nav_BackgroundColor }
            }
            
            self.navigationBar.theme.barTintColor = themed { $0.FYColor_Nav_BackgroundColor }
            self.navigationBar.titleTextAttributes = self.titleTextAttributes
            self.navigationBar.tintColor = .Color_White_FFFFFF
            
        }).disposed(by: rx.disposeBag)
        
    }
}


// MARK: - UINavigationControllerDelegate

extension FYBaseNavigationController: UINavigationControllerDelegate, UIGestureRecognizerDelegate {
    
    override func pushViewController(_ viewController: UIViewController, animated: Bool) {
        
        if self.viewControllers.count > 0 {
            // 隐藏tabBar
            viewController.hidesBottomBarWhenPushed = true
            
            let backItem = UIBarButtonItem(customView: self.backButton)
            viewController.navigationItem.leftBarButtonItem = backItem
            // 手势可用
            self.interactivePopGestureRecognizer?.isEnabled = true
        }
        
        super.pushViewController(viewController, animated: animated)
    }
    
    /// 返回&出栈
    @objc private func pop() {
        self.popViewController(animated: true)
    }
}


================================================
FILE: JetChat/FY-IMChat/Classes/Base/FYBaseTabBarController.swift
================================================
//
//  FYBaseTabBarController.swift
//  FY-JetChat
//
//  Created by iOS.Jet on 2019/2/28.
//  Copyright © 2019 Jett. All rights reserved.
//

import UIKit

class FYBaseTabBarController: UITabBarController {
    
    // MARK: - life cycle
    
    private var indexFlag: Int = 0
    
    private lazy var impactGenerator: UIImpactFeedbackGenerator = {
        let imp = UIImpactFeedbackGenerator(style: .medium)
        return imp
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        didInitialize()
        createChildVc()
    }
    
    // MARK: - initialize
    
    private func didInitialize() {
        let tabBar = UITabBar.appearance()
        tabBar.isTranslucent = false

        if #available(iOS 13, *) {
            let normalAttr = [NSAttributedString.Key.font : UIFont.systemFont(ofSize: 10),
                              NSAttributedString.Key.foregroundColor : UIColor.tabBarTitleNormalColor()]
            let selectedAttr = [NSAttributedString.Key.font : UIFont.systemFont(ofSize: 10),
                                NSAttributedString.Key.foregroundColor : UIColor.tabBarTitleSelectColor()]
            let appearance = UITabBarAppearance()
            let par = NSMutableParagraphStyle.init()
            par.alignment = .center
            
            let noraml = appearance.stackedLayoutAppearance.normal
            noraml.titleTextAttributes = normalAttr
            
            let selected = appearance.stackedLayoutAppearance.selected
            selected.titleTextAttributes = selectedAttr
            
            // 官方文档写的是 重置背景和阴影为透明
            appearance.configureWithTransparentBackground()
            appearance.configureWithOpaqueBackground()
            // 设置
            self.tabBar.standardAppearance = appearance
            
        }else {
            let normalAttr = [NSAttributedString.Key.font : UIFont.systemFont(ofSize: 13),
                              NSAttributedString.Key.foregroundColor : UIColor.tabBarTitleNormalColor()]
            let selectedAttr = [NSAttributedString.Key.font : UIFont.systemFont(ofSize: 13),
                                NSAttributedString.Key.foregroundColor : UIColor.tabBarTitleSelectColor()]
            
            let tabBarItem = UITabBarItem.appearance()
            tabBarItem.setTitleTextAttributes(normalAttr, for: .normal)
            tabBarItem.setTitleTextAttributes(selectedAttr, for: .selected)
        }
        
        // 设置背景颜色
        self.tabBar.theme.backgroundColor = themed{ $0.FYColor_Tab_BackgroundColor }
    }
    
    private func createChildVc() {
        
        let vc1 = FYSesstionListViewController()
        addChildViewController(vc1,
                               title: "会话".rLocalized(),
                              image: R.image.ic_tabbar01_normal()!,
                              selectedImage: R.image.ic_tabbar01_selected()!)
        
        let vc2 = FYChatRoomListViewController()
        addChildViewController(vc2,
                               title: "群组".rLocalized(),
                              image: R.image.ic_tabbar02_normal()!,
                              selectedImage: R.image.ic_tabbar02_selected()!)
        
        let vc3 = FYContactsListViewController()
        addChildViewController(vc3,
                               title: "好友".rLocalized(),
                              image: R.image.ic_tabbar03_normal()!,
                              selectedImage: R.image.ic_tabbar03_selected()!)
        
        let vc4 = FYMineViewController()
        addChildViewController(vc4, title: "我".rLocalized(),
                              image: R.image.ic_tabbar04_normal()!,
                              selectedImage: R.image.ic_tabbar04_selected()!)
    }
    
    /// 为tababr点击添加动画
    /// - Parameters:
    ///   - tabbar: tabbar
    ///   - item: tabbar菜单
    override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        
        if let index = tabBar.items?.firstIndex(of: item) {
            if indexFlag != index {
                animationSelectedIndex(index: index)
            }
        }
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}


extension FYBaseTabBarController {

    fileprivate func addChildViewController(_ vc: UIViewController?,
                                        title: String,
                                        image: UIImage,
                                        selectedImage: UIImage) {
        
        if let rootVC = vc {
            // configure
            rootVC.title = title
            rootVC.tabBarItem.image = UIImage.imageWithRenderingMode(image)
            rootVC.tabBarItem.selectedImage = UIImage.imageWithRenderingMode(selectedImage)
            // nav
            let nav = FYBaseNavigationController(rootViewController: rootVC)
            addChild(nav)
        }
    }
    
    
    /// 实现点击选中缩放动画
    private func animationSelectedIndex(index: Int) {
        var btnImageViews: [UIView] = []
        
        for tabBarButton in self.tabBar.subviews {
            if tabBarButton.isKind(of: NSClassFromString("UITabBarButton")!) {
                for imageView in tabBarButton.subviews {
                    if imageView.isKind(of: NSClassFromString("UITabBarSwappableImageView")!) {
                        btnImageViews.append(imageView)
                    }
                }
            }
        }
        
        // 缩放动画
        let pulse = CABasicAnimation(keyPath: "transform.scale")
        pulse.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
        pulse.duration = 0.15
        pulse.repeatCount = 1
        pulse.autoreverses = true
        pulse.fromValue = NSNumber(value: 0.7)
        pulse.toValue = NSNumber(value: 1.1)
        
        btnImageViews[index].layer.add(pulse, forKey: nil)
        
        indexFlag = index
        impactGenerator.impactOccurred()
    }
}



================================================
FILE: JetChat/FY-IMChat/Classes/Base/FYBaseViewController.swift
================================================
//
//  FYBaseViewController.swift
//  FY-JetChat
//
//  Created by iOS.Jet on 2019/2/28.
//  Copyright © 2019 Jett. All rights reserved.
//  业务基类

import UIKit
import HandyJSON
import RxSwift
import RxCocoa
import Moya

class FYBaseViewController: UIViewController {
    
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
    
    let headerRefreshTrigger = PublishSubject<Void>()
    let footerRefreshTrigger = PublishSubject<Void>()
    let loadingTrigger = PublishSubject<Void>()

    let isHeaderLoading = BehaviorRelay(value: false)
    let isFooterLoading = BehaviorRelay(value: false)
    let isLoading = BehaviorRelay(value: false)

    /// 设置导航栏底线
    var hideNavShadowImage: Bool = false {
        didSet {
            if hideNavShadowImage == true {
                self.navigationController?.navigationBar.shadowImage = UIImage()
            }
        }
    }
    
    /// 基类-普通列表
    lazy var plainTabView: UITableView = {
        let frame = CGRect(x: 0, y: 0, width: kScreenW, height: self.view.height)
        let table = UITableView(frame: frame, style: .plain)
        table.backgroundColor = .clear
        table.separatorColor = .clear
        table.delegate = self as? UITableViewDelegate
        table.dataSource = self as? UITableViewDataSource
        table.showsVerticalScrollIndicator = false
        table.showsHorizontalScrollIndicator = false
        table.tableFooterView = UIView()
        if #available(iOS 11.0, *) {
            table.contentInsetAdjustmentBehavior = UIScrollView.ContentInsetAdjustmentBehavior.never
        } else {
            // Fallback on earlier versions
        }
        return table
    }()
    
    /// 基类-分组列表
    lazy var groupTabView: UITableView = {
        let frame = CGRect(x: 0, y: 0, width: kScreenW, height: self.view.height)
        let table = UITableView(frame: frame, style: .grouped)
        table.backgroundColor = .clear
        table.separatorColor = .clear
        table.delegate = self as? UITableViewDelegate
        table.dataSource = self as? UITableViewDataSource
        table.showsVerticalScrollIndicator = false
        table.showsHorizontalScrollIndicator = false
        table.tableFooterView = UIView()
        if #available(iOS 11.0, *) {
            table.contentInsetAdjustmentBehavior = UIScrollView.ContentInsetAdjustmentBehavior.never
        } else {
            // Fallback on earlier versions
        }
        return table
    }()
            
    // 解决push时界面卡住问题
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        if self.navigationController?.viewControllers.first == self {
            self.navigationController?.interactivePopGestureRecognizer?.isEnabled = false
        }else {
            self.navigationController?.interactivePopGestureRecognizer?.isEnabled = true
        }
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
    }
    
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        self.view.endEditing(true)
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.theme.backgroundColor = themed { $0.FYColor_BackgroundColor_V2 }
        
        self.fd_prefersNavigationBarHidden = false
        self.automaticallyAdjustsScrollViewInsets = false
        self.modalPresentationCapturesStatusBarAppearance = false
        
        makeUI()
        createViewModel()
        bindViewModel()
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        view.endEditing(true)
        UIApplication.shared.keyWindow?.endEditing(true)
    }
    
    // 系统主题变化
    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)
        
        if #available(iOS 13.0, *) {
            guard let hasUserInterfaceStyleChanged = previousTraitCollection?.hasDifferentColorAppearance(comparedTo: previousTraitCollection) else {
                return
            }
            
            DispatchQueue.main.async {
                self.userInterfaceStyleListener(isChanged: hasUserInterfaceStyleChanged)
            }
        } else {
            // Fallback on earlier versions
        }
    }
    
    // MARK: - 提供子类重写
    open func makeUI() { }
    open func createViewModel() { }
    open func bindViewModel() { }
}

// MARK: - Action

extension FYBaseViewController {
    
    /// 基类方法 - 返回上一个控制器
    @objc func popLastVC() {
        if ((self.navigationController?.viewControllers) != nil) {
            self.navigationController?.popViewController(animated: true)
        }
    }
    
    /// 基类方法 - 返回根控制器
    @objc func popRootVC() {
        if ((self.navigationController?.viewControllers) != nil) {
            self.navigationController?.popToRootViewController(animated: true)
        }
    }
}

// MARK: - UserInterfaceStyleListener

extension FYBaseViewController {
    
    /// 监听当前系统模式
    func userInterfaceStyleListener(isChanged: Bool) {
        let lastThemeMode = FYThemeCenter.shared.currentTheme
        if (lastThemeMode != .system) {
            return
        }
        
        if #available(iOS 13.0, *) {
            if UITraitCollection.current.userInterfaceStyle == .dark {
                print("System Dark mode")
                themeService.switch(.dark)
            }else {
                print("System Light mode")
                themeService.switch(.light)
            }
            
            // 发出系统主题模式改变通知
            NotificationCenter.default.post(name: .kTraitCollectionDidChange, object: nil)
        }
    }
}


================================================
FILE: JetChat/FY-IMChat/Classes/Base/Model/FYCellDataConfig.swift
================================================
//
//  FYCellDataConfig.swift
//  FY-JetChat
//
//  Created by iOS.Jet on 2019/11/2.
//  Copyright © 2019 Jett. All rights reserved.
//

import HandyJSON

class FYCellDataConfig: NSObject {
    var title: String?
    var subtitle: String?
    var image: String?
    var isShow: Bool = false
    
    var targetVC: UIViewController?
    
    public init(title: String? = "", subtitle: String? = "", image : String? = "", isShow: Bool = false, targetVC: UIViewController? = nil) {
        super.init()
        
        self.title = title
        self.subtitle = subtitle
        self.image = image
        
        self.isShow = isShow
        self.targetVC = targetVC
    }
}


================================================
FILE: JetChat/FY-IMChat/Classes/Base/ViewModel/BaseViewModel.swift
================================================
//
//  BaseViewModel.swift
//  FY-JetChat
//
//  Created by Jett on 2019/3/15.
//  Copyright © 2019 Jett. All rights reserved.
//

import Foundation
import RxSwift
import RxCocoa
import Moya

protocol ViewModelType {
    associatedtype Input
    associatedtype Output
    
    func transform(input: Input) -> Output
}

class BaseViewModel: NSObject {
    
    var page = 0
    var pageSize = 20
    
    let loading = ActivityIndicator()
    let headerLoading = ActivityIndicator()
    let footerLoading = ActivityIndicator()
    let error = ErrorTracker()
    
    override init() {
        super.init()
        
        error.asDriver().drive(onNext: { (error) in
            printLog("ViewModel error:\(error.localizedDescription)")
        }).disposed(by: rx.disposeBag)
    }
    
    deinit {
        print("\(type(of: self)):Deinited")
    }
}


================================================
FILE: JetChat/FY-IMChat/Classes/Common/AppCommon.swift
================================================
//
//  AppCommon.swift
//  FY-JetChat
//
//  Created by iOS.Jet on 2019/2/27.
//  Copyright © 2019 Jett. All rights reserved.
//

import UIKit
import Reachability
import SnapKit

// MARK: - 常用距离
public let kScreen  = UIScreen.main.bounds
public let kScreenW = UIScreen.main.bounds.size.width
public let kScreenH = UIScreen.main.bounds.size.height

public let kMargin = kFitScale(at: 10)
public let kLineMargin = kFitScale(at: 1)

public let isIphoneX = { () -> Bool in
    var isX = false
    if #available(iOS 11.0, *) {
        isX = (UIApplication.shared.keyWindow?.safeAreaInsets.bottom ?? 0) > CGFloat(0.0)
    }
    return isX
}

public let kWindowSafeAreaInset = { () -> UIEdgeInsets in
    var insets = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)
    if #available(iOS 11.0, *) {
        insets = UIApplication.shared.keyWindow?.safeAreaInsets ?? insets
    }
    return insets
}

public let kSafeAreaTop = kWindowSafeAreaInset().top == 0 ? 20 : kWindowSafeAreaInset().top
public let kSafeAreaBottom = kWindowSafeAreaInset().bottom
public let kStatusH = kWindowSafeAreaInset().top
public let kNavigaH = 44 + kStatusH
public let kTabBarH = 49 + kSafeAreaBottom

// MARK: - 动画执行时间
let kDuration: TimeInterval = 3.0

// MARK: - 偏好设置存储
/// 应用是否首次启动
public let kAppLaunchUserDefaultsKey = "kAppLaunchUserDefaultsKey"
/// 应用当前语言设置
public let kAppLanguageUserDefaultsKey = "kAppLanguageUserDefaultsKey"
/// 白天夜间模式
public let kThemeSettingUserDefaultKey = "kThemeSettingUserDefaultKey"


// MARK: - FileManager Path
public let cachesURL = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)[0]
public let libraryURL = FileManager.default.urls(for: .libraryDirectory, in: .userDomainMask)[0]


// MARK: - 当前窗口
let kCurrentWindow = UIApplication.shared.keyWindow

// MARK: - 自定义打印日志
func printLog<T>(_ message: T, fileName: String = #file, methodName: String = #function, lineNumber: Int = #line){
    //文件名、方法、行号、打印信息
    #if DEBUG
    print("方法:\(methodName)\n行号:\(lineNumber)\n打印信息:\(message)");
    #endif
}


// MARK: - 系统信息相关
let infoDictionary = Bundle.main.infoDictionary!
/// 程序名称
let appDisplayName = infoDictionary["CFBundleDisplayName"] as! String
/// 主程序版本号
let majorVersion = infoDictionary["CFBundleShortVersionString"] as! String

/// 设备唯一标识码
public let kDeviceUUID = { () -> String in
    if let uuid = UIDevice.current.identifierForVendor?.uuidString {
        return uuid
    }
    return ""
}


// MARK: - 屏幕适配375 | 6s尺寸
func kFitScale(at ratio: CGFloat) -> CGFloat {
    return (UIScreen.main.bounds.width / 375) * ratio
}

// MARK: - 朋友圈
let mImageW = (kScreenW - 156) / 3



================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/Array/Array+Extension.swift
================================================
//
//  NSArray+Extension.swift
//  EmiotAppCode
//
//  Created by Jett on 2017/5/27.
//  Copyright © 2017年 Zehuihong. All rights reserved.
//

import UIKit


extension Array {
    
    subscript (safe index:Int) -> Element?{
        return (0..<count).contains(index) ? self[index] : nil
    }
    
    func toJSONString() -> String {
        let data = try? JSONSerialization.data(withJSONObject: self, options: JSONSerialization.WritingOptions.prettyPrinted)
        let strJson = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
        return strJson! as String
    }
    
    func toData() -> Data {
        let data = try? JSONSerialization.data(withJSONObject: self, options: JSONSerialization.WritingOptions.prettyPrinted)
        return data!
    }
}

extension Array where Element: Hashable {
    
    // 数组去重处理
    var unique:[Element] {
        var uniq = Set<Element>()
        uniq.reserveCapacity(self.count)
        return self.filter {
            return uniq.insert($0).inserted
        }
    }
}



================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/Dictionary/Dictionary+Exted.swift
================================================
//
//  Dictionary+EXTension.swift
//  SZBookMall
//
//  Created by fisland on 2017/11/20.
//  Copyright © 2017年 Zehuihong. All rights reserved.
//

import Foundation

extension Dictionary {
    
    static func += <KeyType, ValueType> ( left: inout Dictionary<KeyType, ValueType>, right: Dictionary<KeyType, ValueType>) {
        for (k, v) in right {
            left.updateValue(v, forKey: k)
        }
    }
    
    func toJSONString() -> String {
        let data = try? JSONSerialization.data(withJSONObject: self, options: JSONSerialization.WritingOptions.prettyPrinted)
        let jsonString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
        return jsonString! as String
    }
    
    func toData() -> Data {
        let data = try? JSONSerialization.data(withJSONObject: self, options: JSONSerialization.WritingOptions.prettyPrinted)
        return data!
    }
}


================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/Notification/Notification+Name.swift
================================================
//
//  Notification+Name.swift
//  FY-JetChat
//
//  Created by iOS.Jet on 2019/10/10.
//  Copyright © 2019 Jett. All rights reserved.
//  通知便捷使用

import Foundation

// MARK: - NSNotificationName

extension NSNotification.Name {
    
    /// 主题更改
    public static let kThemeDidChanged = Notification.Name("kThemeDidChanged")
    
    /// 网络状态监听
    public static let kReachabilityChanged = Notification.Name(rawValue:"ReachabilityChangedNotification")
    
    /// 刷新消息列表
    public static let kNeedRefreshSesstionList = Notification.Name(rawValue:"kNeedRefreshSesstionList")
    
    /// 退出群聊
    public static let kNeedRefreshChatInfoList = Notification.Name(rawValue:"kNeedRefreshChatInfoList")
    
    /// 系统主题模式改变
    public static let kTraitCollectionDidChange = Notification.Name(rawValue:"kTraitCollectionDidChange")
}


// MARK: - NotificationCenter

public typealias NotiCenter = NotificationCenter

extension NotificationCenter {
    
    /// 发送通知内容
    static func postNoti(_ name: NSNotification.Name, object: Any? = nil) {
        self.default.post(name: name, object: nil)
    }
    
    /// 发送通知传递实体内容
    static func postNotiWithUserInfo(_ name: NSNotification.Name, object: Any? = nil, userInfo: [AnyHashable : Any] = [AnyHashable : Any]()) {
        self.default.post(name: name, object: nil, userInfo: userInfo)
    }
    
    
    func observe(name: NSNotification.Name?, object: Any?, queue: OperationQueue?, using block: @escaping (Notification) ->()) -> NotificationToken {
          let token = addObserver(forName: name, object: object, queue: queue, using: block)
          return NotificationToken(notificationCenter: self, token: token)
    }
    
    class func addObserve(target: Any, action: Selector, name: NSNotification.Name?, object: Any? = nil) {
        self.default.addObserver(target, selector: action, name: name, object: object)
    }
}


final class NotificationToken: NSObject {
      let notificcationCenter: NotificationCenter
      let token: Any
      
      init(notificationCenter: NotificationCenter = .default, token: Any) {
            self.notificcationCenter = notificationCenter
            self.token = token
      }
    
      deinit {
        notificcationCenter.removeObserver(token)
      }
}




================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/RxSwift/JFButton+Rx.swift
================================================
//
//  JFButton+Rx.swift
//  MK-MChain
//
//  Created by Jett on 2019/5/30.
//  Copyright © 2019 miku. All rights reserved.
//

import Foundation
import Kingfisher
import RxCocoa
import RxSwift

private var KJFButtonIndicator   = "KJFButtonIndicator"
private var KJFButtonCurrentText = "KJFButtonCurrentText"

extension Reactive where Base: UIButton {
    //是否秀菊花
    public var isShowIndicator: Binder<Bool>{
        return Binder(self.base, binding: { btn, active in
            if active{
                objc_setAssociatedObject(btn, &KJFButtonCurrentText, btn.currentTitle, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
                btn.setTitle("", for: .normal)
                btn.whiteIndicator.startAnimating()
                btn.isUserInteractionEnabled = false
            }
            else{
                btn.whiteIndicator.stopAnimating()
                if let title = objc_getAssociatedObject(btn, &KJFButtonCurrentText) as? String{
                    btn.setTitle(title, for: .normal)
                }
                btn.isUserInteractionEnabled = true
            }
        })
    }
}


public extension UIButton {
    var whiteIndicator : UIActivityIndicatorView{
        get {
            var indicator = objc_getAssociatedObject(self, &KJFButtonIndicator)
                as? UIActivityIndicatorView
            if indicator == nil {
                indicator = UIActivityIndicatorView(style: .white)
                indicator!.center = CGPoint(x: self.bounds.width / 2,
                                            y: self.bounds.height / 2)
                self.addSubview(indicator!)
                //indicator.startAnimating()
            }
            self.whiteIndicator = indicator!
            //c重新设置中心点
            indicator!.center = CGPoint(x: self.bounds.width / 2,
                                        y: self.bounds.height / 2)
            return indicator!
        }
        set {
            objc_setAssociatedObject(self, &KJFButtonIndicator, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        }
    }
}





================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/RxSwift/MJRefresh+Rx.swift
================================================
//
//  MJRefresh+Rx.swift
//  FY-JetChat
//
//  Created by iOS.Jet on 2019/11/13.
//  Copyright © 2019 Jett. All rights reserved.
//

import Foundation
import MJRefresh
import RxSwift
import RxCocoa

//对MJRefreshComponent增加rx扩展
extension Reactive where Base: MJRefreshComponent {
     
    /// 正在刷新事件
    var refreshing: ControlEvent<Void> {
        let source: Observable<Void> = Observable.create {
            [weak control = self.base] observer  in
            if let control = control {
                control.refreshingBlock = {
                    observer.on(.next(()))
                }
            }
            return Disposables.create()
        }
        return ControlEvent(events: source)
    }
    
    /// 正在刷新
    var isRefreshing: Binder<Bool> {
        return Binder(base) { refresh, isRefresh in
            if isRefresh {
                refresh.beginRefreshing()
            }
        }
    }
     
    /// 停止刷新
    var endRefreshing: Binder<Bool> {
        return Binder(base) { refresh, isEnd in
            if isEnd {
                refresh.endRefreshing()
            }
        }
    }
}


================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/RxSwift/Observable+Operators.swift
================================================
//
//  Observable+Operators.swift
//  Cake Builder
//
//  Created by Khoren Markosyan on 10/19/16.
//  Copyright © 2016 Khoren Markosyan. All rights reserved.
//

import Foundation
import RxSwift
import RxCocoa


protocol OptionalType {
    associatedtype Wrapped

    var value: Wrapped? { get }
}

extension Optional: OptionalType {
    var value: Wrapped? {
        return self
    }
}

extension Observable where Element: OptionalType {
    func filterNil() -> Observable<Element.Wrapped> {
        return flatMap { (element) -> Observable<Element.Wrapped> in
            if let value = element.value {
                return .just(value)
            } else {
                return .empty()
            }
        }
    }

    func filterNilKeepOptional() -> Observable<Element> {
        return self.filter { (element) -> Bool in
            return element.value != nil
        }
    }

    func replaceNil(with nilValue: Element.Wrapped) -> Observable<Element.Wrapped> {
        return flatMap { (element) -> Observable<Element.Wrapped> in
            if let value = element.value {
                return .just(value)
            } else {
                return .just(nilValue)
            }
        }
    }
}

protocol BooleanType {
    var boolValue: Bool { get }
}
extension Bool: BooleanType {
    var boolValue: Bool { return self }
}

// Maps true to false and vice versa
extension Observable where Element: BooleanType {
    func not() -> Observable<Bool> {
        return self.map { input in
            return !input.boolValue
        }
    }
}

extension Observable where Element: Equatable {
    func ignore(value: Element) -> Observable<Element> {
        return filter { (selfE) -> Bool in
            return value != selfE
        }
    }
}

extension ObservableType where Element == Bool {
    /// Boolean not operator
    public func not() -> Observable<Bool> {
        return self.map(!)
    }
}

extension SharedSequenceConvertibleType {
    func mapToVoid() -> SharedSequence<SharingStrategy, Void> {
        return map { _ in }
    }
}

extension ObservableType {
    func asDriverOnErrorJustComplete() -> Driver<Element> {
        return asDriver { error in
            assertionFailure("Error \(error)")
            return Driver.empty()
        }
    }

    func mapToVoid() -> Observable<Void> {
        return map { _ in }
    }
}

//https://gist.github.com/brocoo/aaabf12c6c2b13d292f43c971ab91dfa
extension Reactive where Base: UIScrollView {
    public var reachedBottom: Observable<Void> {
        let scrollView = self.base as UIScrollView
        return self.contentOffset.flatMap { [weak scrollView] (contentOffset) -> Observable<Void> in
            guard let scrollView = scrollView else { return Observable.empty() }
            let visibleHeight = scrollView.frame.height - self.base.contentInset.top - scrollView.contentInset.bottom
            let y = contentOffset.y + scrollView.contentInset.top
            let threshold = max(0.0, scrollView.contentSize.height - visibleHeight)
            return (y > threshold) ? Observable.just(()) : Observable.empty()
        }
    }
}

// Two way binding operator between control property and variable, that's all it takes {

infix operator <-> : DefaultPrecedence

func nonMarkedText(_ textInput: UITextInput) -> String? {
    let start = textInput.beginningOfDocument
    let end = textInput.endOfDocument

    guard let rangeAll = textInput.textRange(from: start, to: end),
        let text = textInput.text(in: rangeAll) else {
            return nil
    }

    guard let markedTextRange = textInput.markedTextRange else {
        return text
    }

    guard let startRange = textInput.textRange(from: start, to: markedTextRange.start),
        let endRange = textInput.textRange(from: markedTextRange.end, to: end) else {
            return text
    }

    return (textInput.text(in: startRange) ?? "") + (textInput.text(in: endRange) ?? "")
}

func <-> <Base>(textInput: TextInput<Base>, variable: BehaviorRelay<String>) -> Disposable {
    let bindToUIDisposable = variable.asObservable()
        .bind(to: textInput.text)
    let bindToVariable = textInput.text
        .subscribe(onNext: { [weak base = textInput.base] value in
            guard let base = base else {
                return
            }

            let nonMarkedTextValue = nonMarkedText(base)

            /**
             In some cases `textInput.textRangeFromPosition(start, toPosition: end)` will return nil even though the underlying
             value is not nil. This appears to be an Apple bug. If it's not, and we are doing something wrong, please let us know.
             The can be reproed easily if replace bottom code with

             if nonMarkedTextValue != variable.value {
             variable.value = nonMarkedTextValue ?? ""
             }

             and you hit "Done" button on keyboard.
             */
            if let nonMarkedTextValue = nonMarkedTextValue, nonMarkedTextValue != variable.value {
                variable.accept(nonMarkedTextValue)
            }
            }, onCompleted: {
                bindToUIDisposable.dispose()
        })

    return Disposables.create(bindToUIDisposable, bindToVariable)
}

func <-> <T>(property: ControlProperty<T>, variable: BehaviorRelay<T>) -> Disposable {
    if T.self == String.self {
        #if DEBUG
        fatalError("It is ok to delete this message, but this is here to warn that you are maybe trying to bind to some `rx.text` property directly to variable.\n" +
            "That will usually work ok, but for some languages that use IME, that simplistic method could cause unexpected issues because it will return intermediate results while text is being inputed.\n" +
            "REMEDY: Just use `textField <-> variable` instead of `textField.rx.text <-> variable`.\n" +
            "Find out more here: https://github.com/ReactiveX/RxSwift/issues/649\n"
        )
        #endif
    }

    let bindToUIDisposable = variable.asObservable()
        .bind(to: property)
    let bindToVariable = property
        .subscribe(onNext: { value in
            variable.accept(value)
        }, onCompleted: {
            bindToUIDisposable.dispose()
        })

    return Disposables.create(bindToUIDisposable, bindToVariable)
}


================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/SnapKit/ConstraintArray+Extensions.swift
================================================

import SnapKit

extension String {
    func size(withFont font: UIFont) -> CGSize {
        let attributes = [NSAttributedString.Key.font: font]
        return (self as NSString).size(withAttributes: attributes)
    }
}

extension Array where Element: ConstraintView {
    
    public var snp: ConstraintArrayDSL {
        return ConstraintArrayDSL(array: self)
    }
}



================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/SnapKit/ConstraintArrayDSL.swift
================================================

import SnapKit

public struct ConstraintArrayDSL {
    @discardableResult
    public func prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] {
        var constraints = Array<Constraint>()
        for view in self.array {
            constraints.append(contentsOf: view.snp.prepareConstraints(closure))
        }
        return constraints
    }
    
    public func makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
        for view in self.array {
            view.snp.makeConstraints(closure)
        }
    }
    
    public func remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
        for view in self.array {
            view.snp.remakeConstraints(closure)
        }
    }
    
    public func updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) {
        for view in self.array {
            view.snp.updateConstraints(closure)
        }
    }
    
    public func removeConstraints() {
        for view in self.array {
            view.snp.removeConstraints()
        }
    }
    
    /// distribute with fixed spacing
    ///
    /// - Parameters:
    ///   - axisType: which axis to distribute items along
    ///   - fixedSpacing: the spacing between each item
    ///   - leadSpacing: the spacing before the first item and the container
    ///   - tailSpacing: the spacing after the last item and the container
    public func distributeViewsAlong(axisType:NSLayoutConstraint.Axis,
                                     fixedSpacing:CGFloat,
                                     leadSpacing:CGFloat = 0,
                                     tailSpacing:CGFloat = 0) {
        
        guard self.array.count > 1, let tempSuperView = commonSuperviewOfViews() else {
            return
        }
        
        if axisType == .horizontal {
            var prev : ConstraintView?
            for (i, v) in self.array.enumerated() {
                v.snp.makeConstraints({ (make) in
                    if prev != nil {
                        make.width.equalTo(prev!)
                        make.left.equalTo((prev?.snp.right)!).offset(fixedSpacing)
                        if (i == self.array.count - 1) {//last one
                            make.right.equalTo(tempSuperView).offset(-tailSpacing);
                        }
                    }else {
                        make.left.equalTo(tempSuperView).offset(leadSpacing);
                    }
                })
                prev = v;
            }
        }else {
            var prev : ConstraintView?
            for (i, v) in self.array.enumerated() {
                v.snp.makeConstraints({ (make) in
                    if prev != nil {
                        make.height.equalTo(prev!)
                        make.top.equalTo((prev?.snp.bottom)!).offset(fixedSpacing)
                        if (i == self.array.count - 1) {//last one
                            make.bottom.equalTo(tempSuperView).offset(-tailSpacing);
                        }
                    }else {
                        make.top.equalTo(tempSuperView).offset(leadSpacing);
                    }
                })
                prev = v;
            }
        }
    }
    
    /// distribute with fixed item size
    ///
    /// - Parameters:
    ///   - axisType: which axis to distribute items along
    ///   - fixedItemLength: the fixed length of each item
    ///   - leadSpacing: the spacing before the first item and the container
    ///   - tailSpacing: the spacing after the last item and the container
    public func distributeViewsAlong(axisType:NSLayoutConstraint.Axis,
                                     fixedItemLength:CGFloat,
                                     leadSpacing:CGFloat = 0,
                                     tailSpacing:CGFloat = 0) {
        
        guard self.array.count > 1, let tempSuperView = commonSuperviewOfViews() else {
            return
        }
        
        if axisType == .horizontal {
            var prev : ConstraintView?
            for (i, v) in self.array.enumerated() {
                v.snp.makeConstraints({ (make) in
                    make.width.equalTo(fixedItemLength)
                    if prev != nil {
                        if (i == self.array.count - 1) {//last one
                            make.right.equalTo(tempSuperView).offset(-tailSpacing);
                        }else {
                            let offset = (CGFloat(1) - (CGFloat(i) / CGFloat(self.array.count - 1))) *
                                (fixedItemLength + leadSpacing) - CGFloat(i) *
                                tailSpacing /
                                CGFloat(self.array.count - 1)
                            make.right
                                .equalTo(tempSuperView)
                                .multipliedBy(CGFloat(i) / CGFloat(self.array.count - 1))
                                .offset(offset)
                        }
                    }else {
                        make.left.equalTo(tempSuperView).offset(leadSpacing);
                    }
                })
                prev = v;
            }
        }else {
            var prev : ConstraintView?
            for (i, v) in self.array.enumerated() {
                v.snp.makeConstraints({ (make) in
                    make.height.equalTo(fixedItemLength)
                    if prev != nil {
                        if (i == self.array.count - 1) {//last one
                            make.bottom.equalTo(tempSuperView).offset(-tailSpacing);
                        }else {
                            let offset = (CGFloat(1) - (CGFloat(i) / CGFloat(self.array.count - 1))) *
                                    (fixedItemLength + leadSpacing) - CGFloat(i) *
                                    tailSpacing /
                                    CGFloat(self.array.count - 1)
                            
                            make.bottom
                                .equalTo(tempSuperView)
                                .multipliedBy(CGFloat(i) / CGFloat(self.array.count-1))
                                .offset(offset)
                        }
                    }else {
                        make.top.equalTo(tempSuperView).offset(leadSpacing);
                    }
                })
                prev = v;
            }
        }
    }
    
    public func distributeSudokuViews(fixedItemWidth: CGFloat,
                                      fixedItemHeight: CGFloat,
                                      warpCount: Int,
                                      edgeInset: UIEdgeInsets = UIEdgeInsets.zero) {
        
        guard self.array.count > 1, warpCount >= 1, let tempSuperView = commonSuperviewOfViews() else {
            return
        }
        
        let rowCount = self.array.count % warpCount == 0 ? self.array.count / warpCount : self.array.count / warpCount + 1;
        let columnCount = warpCount
        
        for (i,v) in self.array.enumerated() {
            
            let currentRow = i / warpCount
            let currentColumn = i % warpCount
            
            v.snp.makeConstraints({ (make) in
                make.width.equalTo(fixedItemWidth)
                make.height.equalTo(fixedItemHeight)
                if currentRow == 0 {//fisrt row
                    make.top.equalTo(tempSuperView).offset(edgeInset.top)
                }
                if currentRow == rowCount - 1 {//last row
                    make.bottom.equalTo(tempSuperView).offset(-edgeInset.bottom)
                }
                
                if currentRow != 0 && currentRow != rowCount - 1 {//other row
                    let offset = (CGFloat(1) - CGFloat(currentRow) / CGFloat(rowCount - 1)) * (fixedItemHeight + edgeInset.top) - CGFloat(currentRow) * edgeInset.bottom / CGFloat(rowCount - 1)
                    make.bottom
                        .equalTo(tempSuperView)
                        .multipliedBy(CGFloat(currentRow) / CGFloat(rowCount - 1))
                        .offset(offset);
                }
                
                if currentColumn == 0 {//first col
                    make.left.equalTo(tempSuperView).offset(edgeInset.left)
                }
                if currentColumn == columnCount - 1 {//last col
                    make.right.equalTo(tempSuperView).offset(-edgeInset.right)
                }
                
                if currentColumn != 0 && currentColumn != columnCount - 1 {//other col
                    let offset = (CGFloat(1) - CGFloat(currentColumn) / CGFloat(columnCount - 1)) * (fixedItemWidth + edgeInset.left) - CGFloat(currentColumn) * edgeInset.right / CGFloat(columnCount - 1)
                    make.right
                        .equalTo(tempSuperView)
                        .multipliedBy(CGFloat(currentColumn) / CGFloat(columnCount - 1))
                        .offset(offset);
                }
            })
        }
    }
    
    public func distributeSudokuViews(fixedLineSpacing: CGFloat,
                                      fixedInteritemSpacing: CGFloat,
                                      warpCount: Int,
                                      edgeInset: UIEdgeInsets = UIEdgeInsets.zero) {
        
        guard self.array.count > 1, warpCount >= 1, let tempSuperView = commonSuperviewOfViews() else {
            return
        }
        
        let columnCount = warpCount
        let rowCount = self.array.count % warpCount == 0 ? self.array.count / warpCount : self.array.count / warpCount + 1;
        
        var prev : ConstraintView?
        
        for (i,v) in self.array.enumerated() {
            
            let currentRow = i / warpCount
            let currentColumn = i % warpCount
            
            v.snp.makeConstraints({ (make) in
                if prev != nil {
                    make.width.height.equalTo(prev!)
                }
                if currentRow == 0 {//fisrt row
                    make.top.equalTo(tempSuperView).offset(edgeInset.top)
                }
                if currentRow == rowCount - 1 {//last row
                    if currentRow != 0 && i - columnCount >= 0 {
                        make.top.equalTo(self.array[i-columnCount].snp.bottom).offset(fixedLineSpacing)
                    }
                    make.bottom.equalTo(tempSuperView).offset(-edgeInset.bottom)
                }
                
                if currentRow != 0 && currentRow != rowCount - 1 {//other row
                    make.top.equalTo(self.array[i-columnCount].snp.bottom).offset(fixedLineSpacing);
                }
                
                if currentColumn == 0 {//first col
                    make.left.equalTo(tempSuperView).offset(edgeInset.left)
                }
                if currentColumn == warpCount - 1 {//last col
                    if currentColumn != 0 {
                        make.left.equalTo(prev!.snp.right).offset(fixedInteritemSpacing)
                    }
                    make.right.equalTo(tempSuperView).offset(-edgeInset.right)
                }
                
                if currentColumn != 0 && currentColumn != warpCount - 1 {//other col
                    make.left.equalTo(prev!.snp.right).offset(fixedInteritemSpacing);
                }
            })
            prev = v
        }
    }
    
    
    
    
    
    public var target: AnyObject? {
        return self.array as AnyObject
    }
    
    internal let array: Array<ConstraintView>
    
    internal init(array: Array<ConstraintView>) {
        self.array = array
        
    }
    
}

private extension ConstraintArrayDSL {
    func commonSuperviewOfViews() -> ConstraintView? {
        var commonSuperview : ConstraintView?
        var previousView : ConstraintView?
        
        for view in self.array {
            if previousView != nil {
                commonSuperview = view.closestCommonSuperview(commonSuperview)
            }else {
                commonSuperview = view
            }
            previousView = view
        }
        
        return commonSuperview
    }
}

private extension ConstraintView {
    func closestCommonSuperview(_ view : ConstraintView?) -> ConstraintView? {
        var closestCommonSuperview: ConstraintView?
        var secondViewSuperview: ConstraintView? = view
        while closestCommonSuperview == nil && secondViewSuperview != nil {
            var firstViewSuperview: ConstraintView? = self
            while closestCommonSuperview == nil && firstViewSuperview != nil {
                if secondViewSuperview == firstViewSuperview {
                    closestCommonSuperview = secondViewSuperview
                }
                firstViewSuperview = firstViewSuperview?.superview
            }
            secondViewSuperview = secondViewSuperview?.superview
        }
        return closestCommonSuperview
        
    }
}


================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/Strings/String+Date.swift
================================================
//
//  String+Date.swift
//  FY-JetChat
//
//  Created by iOS.Jet on 2019/2/28.
//  Copyright © 2019 Jett. All rights reserved.
//

import UIKit
import Foundation
import SwiftDate

extension String {
    
    /// 通用时间 HH:mm MM-dd
    ///
    /// - Returns: 本地时间
    func commonDateString() -> String? {
        let region = Region.current
        let update = self.toISODate(region: region)
        let date = update?.date.convertTo(region: region)
        let now = date?.toFormat("HH:mm MM-dd", locale: region.locale)
        return now
    }
    
    /// 日期时间 yyyy-MM-dd HH:mm:ss
    ///
    /// - Returns: 本地时间
    func allDateString() -> String? {
        let region = Region.current
        let update = self.toISODate(region: region)
        let date = update?.date.convertTo(region: region)
        let now = date?.toFormat("yyyy-MM-dd HH:mm:ss", locale: region.locale)
        return now
    }
    
    /// 日期 yyyy-MM-dd
    ///
    /// - Returns: 本地时间
    func dateDayString() -> String? {
        let region = Region.current
        let update = self.toISODate(region: region)
        let date = update?.date.convertTo(region: region)
        let now = date?.toFormat("yyyy-MM-dd", locale: region.locale)
        return now
    }
    
    /// 日期 yyyy.MM.dd
    ///
    /// - Returns: 本地时间
    func dotDateString() -> String? {
        let region = Region.current
        let update = self.toISODate(region: region)
        let date = update?.date.convertTo(region: region)
        let now = date?.toFormat("yyyy.MM.dd", locale: region.locale)
        return now
    }
    
    /**
     时间戳转为时间
     
     - returns: 时间字符串
     */
    func timeStampToString() -> String {
        let string = NSString(string: self)
        let timeSta: TimeInterval = string.doubleValue / 1000.0
        let dfmatter = DateFormatter()
        dfmatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        let date = Date(timeIntervalSince1970: timeSta)
        return dfmatter.string(from: date)
    }
    
    /**
     时间戳转为NSDate
     
     - returns: NSDate
     */
    func timeStampToDate() -> Date {
        let string = NSString(string: self)
        let timeSta: TimeInterval = string.doubleValue
        let date = Date(timeIntervalSince1970: timeSta)
        return date
    }
    
    /**
     时间转为时间戳
     
     - returns: 时间戳字符串
     */
    func stringToTimeStamp() -> String {
        let dfmatter = DateFormatter()
        dfmatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        let date = dfmatter.date(from: self)
        let dateStamp: TimeInterval = date!.timeIntervalSince1970
        let dateSt:Int = Int(dateStamp)
        return String(dateSt)
    }
    
    
    /**
     时间戳处理(当前时间比较)
     
     - returns: 对比时间
     */
    func compareCurrentTime() -> String {
        let string = NSString(string: self)
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        let timeDate = formatter.date(from: string as String)
        let currentDate = Date()
        let timeInterval: TimeInterval = currentDate.timeIntervalSince(timeDate!)
        
        var temp: Double = 0
        var result = String()
        if (timeInterval/60 < 1) {
            result = "刚刚"
        }else if ((timeInterval/60)<60){
            temp = timeInterval/60
            result = String(format:"%ld分钟前", Int(temp))
            
        }else if ((timeInterval/60/60)<24){
            temp = timeInterval/60/60
            result = String(format:"%ld小时前", Int(temp))
            
        }else if ((timeInterval/60/60/24)<30){
            temp = timeInterval/60/60/24
            result = String(format:"%ld天前", Int(temp))
            
        }else if ((timeInterval/60/60/24/30)<12){
            temp = timeInterval/60/60/24/30
            result = String(format:"%ld月前", Int(temp))
            
        }else{
            temp = timeInterval/60/60/24/30/12;
            result = String(format:"%ld年前", Int(temp))
        }
        
        return result
    }
    
    
    /**
     传入cell文本内容,解析成元素为昵称的数组
     
     - returns: 昵称数组
     */
    func checkAtUserNickname() -> [String]? {
        do {
            let pattern = "@\\S*"
            let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpression.Options.caseInsensitive)
            let results = regex.matches(in: self, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.length))
            
            var resultStrings = [String]()
            for result in results {
                resultStrings.append(String((self as NSString).substring(with: result.range)))
            }
            return resultStrings
        }
        catch {
            return nil
        }
    }
    
    
    func validNumber() -> Bool{
        do {
            let pattern = "^[0-9]*$"
            let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpression.Options.caseInsensitive)
            let results = regex.matches(in: self, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.length))
            
            return results.count > 0
            
        }catch {
            return false
        }
        
    }
    
    
    /// 获取文本的最大高度
    func getTextMaxHeigh(_ font: UIFont, width:CGFloat) -> CGFloat {
        let normalText = NSString.init(string: self)
        let size = CGSize(width: width, height: 1000)
        let dic: [NSAttributedString.Key: Any] = [NSAttributedString.Key(rawValue: NSAttributedString.Key.font.rawValue): font]
        let stringSize = normalText.boundingRect(with: size, options: .usesLineFragmentOrigin, attributes: dic, context:nil).size
        return stringSize.height
    }
    
    /// 获取文本的最大宽度
    func getTextMaxWidth(_ font: UIFont, height: CGFloat) -> CGFloat {
        let normalText = NSString.init(string: self)
        let size = CGSize(width: 1000, height: height)
        let dic:[NSAttributedString.Key: Any] = [NSAttributedString.Key(rawValue: NSAttributedString.Key.font.rawValue): font]
        let stringSize = normalText.boundingRect(with: size, options: .usesLineFragmentOrigin, attributes: dic, context:nil).size
        return stringSize.width
    }
}

// MARK: - 当前时间比较

extension String {
    
    func detailDate24Week(time: Double, format: String = "yyyy-MM-dd HH:mm:ss") -> String{
        let formatter = DateFormatter()
        formatter.dateStyle = DateFormatter.Style.medium
        formatter.timeStyle = DateFormatter.Style.short
        formatter.dateFormat = format
        let timeInterval = TimeInterval(time / 1000.0)
        
        //获取到Date
        let confromTimeDate = Date.init(timeIntervalSince1970: timeInterval)
        var calender = NSCalendar.current
        let unitFlags = Set<Calendar.Component>([.year,.month,.day,.hour,.minute])
        
        let comp = calender.dateComponents(unitFlags, from: Date())
        _ = String(comp.year!)
        _ = String(comp.day!)
        
        let comp2 = calender.dateComponents(unitFlags, from: confromTimeDate)
        _ = String(comp2.year!)
        _ = String(comp2.month!)
        _ = String(comp2.day!)
        
        var hour = String(comp2.hour!)
        var minute = String(comp2.minute!)
        
        // 设置区域
        calender.locale = Locale.init(identifier: "zh_CN")
        // 设置时区
        /*
         设置时区,设置为 GMT+8,即北京时间(+8)
         */
        calender.timeZone = TimeZone.init(abbreviation: "EST")!
        calender.timeZone = TimeZone.init(secondsFromGMT: +28800)!
        // 设定每周的第一天从星期几开始
        /*
         1 代表星期日开始,2 代表星期一开始,以此类推。默认值是 1
         */
        calender.firstWeekday = 1
        
        //ordinalityOfUnit
        let timeWeek = calender.component(.weekOfYear, from: confromTimeDate)
        let systimeWeek = calender.component(.weekOfYear, from: Date.init())
        
        if calender.isDateInToday(confromTimeDate) {
            if hour.doubleValue < 10 {
                hour = "0\(hour)"
            }
            if minute.doubleValue < 10 {
                minute = "0\(minute)"
            }
            
            return "今天".rLocalized() + " \(hour):\(minute)"
            
        }else if calender.isDateInYesterday(confromTimeDate) {
            if hour.doubleValue < 10 {
                hour = "0\(hour)"
            }
            if minute.doubleValue < 10 {
                minute = "0\(minute)"
            }
            
            return "昨天".rLocalized() + " \(hour):\(minute)"
            
        }else if timeWeek == systimeWeek {
            let weeks = ["星期日".rLocalized(),
                         "星期一".rLocalized(),
                         "星期二".rLocalized(),
                         "星期三".rLocalized(),
                         "星期四".rLocalized(),
                         "星期五".rLocalized(),
                         "星期六".rLocalized()]
            let i = calender.ordinality(of: .weekday, in: .weekOfYear, for: confromTimeDate)
            //此处一定要记得减1
            return weeks[i!-1]
            
        }else {
            
            return self.getCurrentTime(timeNum: time, format: "MM-dd")
        }
        
    }
     
    //MARK: - 时间格式转换"YYYY-MM-dd HH:mm:ss"
    func getCurrentTime(timeNum:Double , format:String) -> String {
        let formatter = DateFormatter()
        formatter.dateStyle = DateFormatter.Style.medium
        formatter.timeStyle = DateFormatter.Style.short
        formatter.dateFormat = format
        let timeInterval = TimeInterval(timeNum / 1000.0)
        let confromTimesp = NSDate(timeIntervalSince1970:timeInterval)
        let confromTimespStr = formatter.string(from: confromTimesp as Date)
        return confromTimespStr
    }
}



================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/Strings/String+Extension.swift
================================================

//
//  String+Extension.swift
//  String+Extension
//
//  Created by TAN on 2017/10/18.
//  Copyright © 2019 Jett. All rights reserved.
//

import Foundation
import CommonCrypto
import UIKit


extension String {
    
    /// 截取第一个到第任意位置
    ///
    /// - Parameter end: 结束的位值
    /// - Returns: 截取后的字符串
    public func stringCut(end: Int) -> String{
        if !(end <= count) { return self }
        let sInde = index(startIndex, offsetBy: end)
        return String(self[..<sInde])
    }
    
    /// 截取任意位置到结束
    ///
    /// - Parameter end:
    /// - Returns: 截取后的字符串
    public func stringCutToEnd(star: Int) -> String {
        if !(star < count) { return "截取超出范围" }
        let sRang = index(startIndex, offsetBy: star)..<endIndex
        return String(self[sRang])
    }
    
    /// 截取最后几位
    ///
    /// - Parameter last:
    /// - Returns: 截取后的字符串
    public func stringCutLastEnd(last: Int) -> String {
        if !(last < count) { return "截取超出范围" }
        let sRang = index(endIndex, offsetBy: -last)..<endIndex
        return String(self[sRang])
    }
    
    /// 字符串任意位置插入
    ///
    /// - Parameters:
    ///   - content: 插入内容
    ///   - locat: 插入的位置
    /// - Returns: 添加后的字符串
    public func stringInsert(content: String, locat: Int) -> String {
        if !(locat < count) { return "操作超出范围" }
        let str1 = stringCut(end: locat)
        let str2 = stringCutToEnd(star: locat)
        return str1 + content + str2
    }
    
    
    /// JSON字符串转字典
    ///
    /// - Parameter jsonString: json字符串
    /// - Returns: 转成后的字典
    func getDictionaryFromJSONString(_ jsonString: String) ->NSDictionary {
        let jsonData:Data = jsonString.data(using: .utf8)!
        let dict = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers)
        if dict != nil {
            return dict as! NSDictionary
        }
        return NSDictionary()
    }
    
    
    /// JSON字符串转数组
    ///
    /// - Parameter jsonString: json字符串
    /// - Returns: 转成后的数组
    func getArrayFromJSONString(jsonString:String) ->NSArray{
        
        let jsonData:Data = jsonString.data(using: .utf8)!
        
        let array = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers)
        if array != nil {
            return array as! NSArray
        }
        return array as! NSArray
    }
    
    
    /// 字典转成JSON字符串
    ///
    /// - Parameter dictionary: 字典
    /// - Returns: 转成后的字符串
    func getJSONStringFromDictionary(_ dictionary: NSDictionary) -> String {
        if (!JSONSerialization.isValidJSONObject(dictionary)) {
            print("无法解析出JSONString")
            return ""
        }
        let data : NSData! = try? JSONSerialization.data(withJSONObject: dictionary, options: []) as NSData
        let JSONString = NSString(data:data as Data, encoding: String.Encoding.utf8.rawValue)
        return JSONString! as String
    }
    
    
    /// 数组转JSON字符串
    ///
    /// - Parameter array: 数组
    /// - Returns: 转成后的字符串
    func getJSONStringFromArray(array:NSArray) -> String {
        if (!JSONSerialization.isValidJSONObject(array)) {
            print("无法解析出JSONString")
            return ""
        }
        
        let data : Data = try! JSONSerialization.data(withJSONObject: array, options: []) as Data
        let JSONString = NSString(data:data as Data,encoding: String.Encoding.utf8.rawValue)
        return JSONString! as String
        
    }
    
    /// 计算字符串的尺寸
    ///
    /// - Parameters:
    ///   - text: 字符串
    ///   - rectSize: 容器的尺寸
    ///   - fontSize: 字体
    /// - Returns: 尺寸
    ///
    public func getStringSize(rectSize: CGSize, fontSize: CGFloat) -> CGSize {
        let str: NSString = self as NSString
        let rect = str.boundingRect(with: rectSize, options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: fontSize)], context: nil)
        return CGSize(width: ceil(rect.width), height: ceil(rect.height))
    }
    
    public func getStringSize(fontSize: CGFloat) -> CGSize {
        return self.getStringSize(rectSize: CGSize(width: CGFloat(MAXFLOAT), height: CGFloat(MAXFLOAT)), fontSize: fontSize)
    }
    
    /// 输入字符串 输出数组
    /// e.g  "qwert" -> ["q","w","e","r","t"]
    /// - Returns: ["q","w","e","r","t"]
    public func stringToArr() -> [String] {
        let num = count
        if !(num > 0) { return [""] }
        var arr: [String] = []
        for i in 0..<num {
            let tempStr: String = self[self.index(self.startIndex, offsetBy: i)].description
            arr.append(tempStr)
        }
        return arr
    }
    
    /// 字符串截取         3  6
    /// e.g let aaa = "abcdefghijklmnopqrstuvwxyz"  -> "cdef"
    /// - Parameters:
    ///   - start: 开始位置 3
    ///   - end: 结束位置 6
    /// - Returns: 截取后的字符串 "cdef"
    public func startToEnd(start: Int,end: Int) -> String {
        if !(end < count) || start > end { return "取值范围错误" }
        var tempStr: String = ""
        for i in start...end {
            let temp: String = self[self.index(self.startIndex, offsetBy: i - 1)].description
            tempStr += temp
        }
        return tempStr
    }
    
    /// 字符串修改部分为密文
    ///
    /// - Parameters:
    ///   - start: 开始位置
    ///   - end: 结束为止
    /// - Returns: 修改后的字符串
    func stringAddSecret(start: Int, end: Int) -> String{
        if !(end < count) || start > end { return "取值范围错误" }
        let startI = self.index(self.startIndex, offsetBy: start)
        
        let offset = count - start - end
        let endI = self.index(startI, offsetBy: offset)
        let secret = String.init(repeating: "*", count: offset)
        let string = self.replacingCharacters(in: startI..<endI, with: secret)
        return string
    }
    
    /// 字符URL格式化,中文路径encoding
    ///
    /// - Returns: 格式化的 url
    public func stringEncoding() -> String {
        let url = self.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)
        return url!
    }
    
    /// 字符URL格式化,防止被转义
    ///
    /// - Returns: 格式化的 url
    public func stringEncod() -> String {
        let url = self.stringEncoding()
        let result = url.removingPercentEncoding ?? ""
        return result
    }
    
    /// 是否包含字符串
    public func containsIgnoringCase(find: String) -> Bool{
        return self.range(of: find, options: .caseInsensitive) != nil
    }
    
    /// 去除字符串中空格
    public func trimming() -> String {
        return self.replacingOccurrences(of: " ", with: "").trimmingCharacters(in: CharacterSet.urlPathAllowed)
    }
    
    /// MD5加密1
    public func md51() -> String {
        let str = self.cString(using: String.Encoding.utf8)
        let strLen = CUnsignedInt(self.lengthOfBytes(using: String.Encoding.utf8))
        let digestLen = Int(CC_MD5_DIGEST_LENGTH)
        let result = UnsafeMutablePointer<UInt8>.allocate(capacity: 16) //16位加密
        CC_MD5(str!, strLen, result)
        let hash = NSMutableString()
        for i in 0 ..< digestLen {
            hash.appendFormat("%02x", result[i])
        }
        free(result)
        return String(format: hash as String)
    }
    

    /// 限制设置为整数
    ///
    /// - Returns: 只返回整数的字符串
    func getDigits() -> String {
        return String(self.filter {
            if let value = $0.int, value >= 0 && value <= 9 {
                return true
            }
            return false
        })
    }
}

extension String {
    /// MD5加密
    var ios_md5 : String{
        let str = self.cString(using: String.Encoding.utf8)
        let strLen = CC_LONG(self.lengthOfBytes(using: String.Encoding.utf8))
        let digestLen = Int(CC_MD5_DIGEST_LENGTH)
        let result = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: digestLen)
        
        CC_MD5(str!, strLen, result)
        
        let hash = NSMutableString()
        for i in 0 ..< digestLen {
            hash.appendFormat("%02x", result[i])
        }
        result.deinitialize(count: 16)
        
        return String(format: hash as String)
    }
}

extension NSString{
    ///修改字符串中数字样式
    @objc
    public func attributeNumber(_ fontsize :CGFloat,color:UIColor,hcolor:UIColor,B:Bool)-> NSMutableAttributedString{
       return (self as String).attributeNumber(fontsize, color: color, hcolor: hcolor, B: B)
    }
}

extension String {
    /// 删除字符串中Unicode.Cc/Cf字符,类似于\0这种
    public func stringByRemovingControlCharacters() -> String {
        let controlChars = CharacterSet.controlCharacters
        var range = self.rangeOfCharacter(from: controlChars)
        var mutable = self
        while let removeRange = range {
            mutable.removeSubrange(removeRange)
            range = mutable.rangeOfCharacter(from: controlChars)
        }
        return mutable
    }
    
    /// 修改字符串中数字样式,将其加粗,变黑,加大4个字号,同时修改行间距
    ///
    /// - Parameters:
    ///   - fontsize: 非数字字号
    ///   - color: 非数字颜色
    ///   - lineSpace: 行间距
    /// - Returns: 修改完成的AttributedString
    public func attributeNumber(BoldFontSize fontsize:CGFloat, color:UIColor,lineSpace:CGFloat?)->NSMutableAttributedString{
        let AttributedStr = NSMutableAttributedString(string: self, attributes: [.font: UIFont.systemFont(ofSize: fontsize), .foregroundColor: color])
        for i in 0 ..< self.count {
            let char = self.utf8[self.index(self.startIndex, offsetBy: i)]
            if (char > 47 && char < 58) {
                AttributedStr.addAttribute(.foregroundColor, value: UIColor(red: 33 / 255.0, green: 34 / 255.0, blue: 35 / 255.0, alpha: 1), range: NSRange(location: i, length: 1))
                AttributedStr.addAttribute(.font, value: UIFont.boldSystemFont(ofSize: fontsize + 4), range: NSRange(location: i, length: 1))
            }
        }
        if let space = lineSpace {
            let paragraphStyleT = NSMutableParagraphStyle()
            paragraphStyleT.lineSpacing = space
            AttributedStr.addAttribute(NSAttributedString.Key.paragraphStyle, value: paragraphStyleT, range: NSMakeRange(0,self.count))
        }
        return AttributedStr
    }
    
    /// 给字符串中数字变样式
    ///
    /// - Parameters:
    ///   - fontsize: 字体大小
    ///   - color: 非数字颜色
    ///   - hcolor: 数字颜色
    ///   - B: 是否加粗变大
    /// - Returns: 修改完成字符串
    public func attributeNumber(_ fontsize :CGFloat,color:UIColor,hcolor:UIColor,B:Bool)-> NSMutableAttributedString{
        let AttributedStr = NSMutableAttributedString(string: self, attributes: [.font: UIFont.systemFont(ofSize: fontsize), .foregroundColor: color])
        for i in 0 ..< self.count {
            let char = self.utf8[self.index(self.startIndex, offsetBy: i)]
            if (char > 47 && char < 58) {
                AttributedStr.addAttribute(.foregroundColor, value: hcolor, range: NSRange(location: i, length: 1))
                if B {
                    AttributedStr.addAttribute(.font, value: UIFont.boldSystemFont(ofSize: fontsize + 2), range: NSRange(location: i, length: 1))
                }
            }
        }
        return AttributedStr
    }
    
    
    /// 字符串修改行间距和字间距
    ///
    /// - Parameters:
    ///   - lineSpace: 行间距
    ///   - wordSpace: 字间距
    /// - Returns: 修改完成字符串
    public func attributeChangeSpace(lineSpace:CGFloat, wordSpace:CGFloat) -> NSMutableAttributedString {

        let attributedString = NSMutableAttributedString.init(string: self, attributes: [NSAttributedString.Key.kern:wordSpace])
        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineSpacing = lineSpace
        attributedString.addAttribute(NSAttributedString.Key.paragraphStyle, value: paragraphStyle, range: .init(location: 0, length: self.count))
        return attributedString
    }

    
    /// 指定文本内容字体变色
    ///
    /// - Parameters:
    ///   - fontSize: 字体大小
    ///   - allColor:的字体颜色
    ///   - changedColor: 需要改变的颜色
    ///   - normalContent: 不设置变色的文本
    ///   - richContent: 需设置变色的文本
    /// - Returns: 返回富文本
    public func attributeSpecified(_ font :UIFont, originalColor: UIColor, changedColor: UIColor, normalContent: String, richContent: String)-> NSMutableAttributedString{
        guard normalContent.length > 0, richContent.length > 0 else {
            return NSMutableAttributedString.init()
        }
        
        // 所有文本内容
        let allContent = normalContent
        let attributedStr = NSMutableAttributedString(string: allContent)
        
        let range1: NSRange = NSRange(location: (attributedStr.string as NSString).range(of: normalContent).location, length: (attributedStr.string as NSString).range(of: normalContent).length)
        
        let range2: NSRange = NSRange(location: (attributedStr.string as NSString).range(of: richContent).location, length: (attributedStr.string as NSString).range(of: richContent).length)
        
        attributedStr.addAttributes([NSAttributedString.Key.font: font,
                                     NSAttributedString.Key.foregroundColor : originalColor], range: range1)
        
        attributedStr.addAttributes([NSAttributedString.Key.font: font,
                                     NSAttributedString.Key.foregroundColor : changedColor], range: range2)
        
        return attributedStr;
    }
    
    
    /// 替换手机号中间四位
    ///
    /// - Returns: 替换后的值
    func replacePhone() -> String {
        let start = self.index(self.startIndex, offsetBy: 3)
        let end = self.index(self.startIndex, offsetBy: 7)
        let range = Range(uncheckedBounds: (lower: start, upper: end))
        return self.replacingCharacters(in: range, with: "****")
    }
}

extension String {
    public var length: Int {
        ///更改成其他的影响含有emoji协议的签名
        return self.utf16.count
    }
    public var doubleValue: Double {
        return (self as NSString).doubleValue
    }
    public var intValue: Int32 {
        return (self as NSString).intValue
    }
    public var floatValue: Float {
        return (self as NSString).floatValue
    }
    public var integerValue: Int {
        return (self as NSString).integerValue
    }
    public var longLongValue: Int64 {
        return (self as NSString).longLongValue
    }
    public var boolValue: Bool {
        return (self as NSString).boolValue
    }
}

public protocol URLConvertibleProtocol {
    var URLValue: URL? { get }
    var URLStringValue: String { get }
}

extension String: URLConvertibleProtocol {
    ///String转换成URL
    public var URLValue: URL? {
        if let URL = URL(string: self) {
            return URL
        }
        let set = CharacterSet()
            .union(.urlHostAllowed)
            .union(.urlPathAllowed)
            .union(.urlQueryAllowed)
            .union(.urlFragmentAllowed)
        return self.addingPercentEncoding(withAllowedCharacters: set).flatMap { URL(string: $0) }
    }
    public var URLStringValue: String {
        return self
    }
}

extension String{
    /**
     将当前字符串拼接到cache目录后面
     */
    public func cacheDir() -> String{
        let path = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.cachesDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).last!
        return (path as NSString).appendingPathComponent((self as NSString).lastPathComponent)
    }
    /**
     将当前字符串拼接到doc目录后面
     */
    public func docDir() -> String{
        let path = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first!
        return (path as NSString).appendingPathComponent((self as NSString).lastPathComponent)
    }
    /**
     将当前字符串拼接到tmp目录后面
     */
    public func tmpDir() -> String{
        let path = NSTemporaryDirectory() as NSString
        return path.appendingPathComponent((self as NSString).lastPathComponent)
    }
}

extension String{
    ///判断String是否存在汉字
    public func isIncludeChineseIn() -> Bool {
        for (_, value) in self.enumerated() {
            if ("\u{4E00}" <= value  && value <= "\u{9FA5}") {
                return true
            }
        }
        return false
    }
}

// MARK: - 通用正则处理
extension String {
    
    // MARK: -  字符输入长度限制
    func trimAll(_ trim: String, rangeCount: Int) -> Bool {
        
        if (trim.lengthOfBytes(using: String.Encoding.utf8) == rangeCount) {
            printLog("输入限制为%d个字符")
            return false
        }else {
            return true
        }
    }
    
    // MARK: 用户名正则表达式
    func validateUserName() -> Bool {
        let phoneRegex = try? NSRegularExpression(pattern: "^[A-Za-z0-9]{3,20}$", options: NSRegularExpression.Options.caseInsensitive)
        return phoneRegex?.firstMatch(in: self, options: [], range: NSMakeRange(0, self.length)) != nil
    }
    
    // MARK: 手机号正则表达式
    func validateMobile() -> Bool {
        let phoneRegex = try? NSRegularExpression(pattern: "^1(3[0-9]|5[0-35-9]|8[02345-9]|70|77)\\d{8}$", options: NSRegularExpression.Options.caseInsensitive)
        return phoneRegex?.firstMatch(in: self, options: [], range: NSMakeRange(0, self.length)) != nil
    }
    
    // MARK: - 图形验证码正则表达式
    func validatePicture() -> Bool {
        let pictureCodeRegex: String = "^(?![0-9]+$)(?![a-zA-Z]+$)[a-zA-Z0-9]{4}"
        let pictureCodeTest = NSPredicate(format: "SELF MATCHES", pictureCodeRegex)
        return pictureCodeTest.evaluate(with: self)
    }
    
    // MARK: 邮箱正则表达式
    func validateEmail() -> Bool {
        let emailRegex = try? NSRegularExpression(pattern: "[\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])?", options: NSRegularExpression.Options.caseInsensitive)
        return emailRegex?.firstMatch(in: self, options: [], range: NSMakeRange(0, self.length)) != nil
    }
    
    // MARK: 密码正则表达式(6-16位密码且包含英文字母和数字组合,不能使用特殊字符)
    func validatePassword() -> Bool {
        let passwordRegex: String = "^(?![0-9]+$)(?![a-zA-Z]+$)[a-zA-Z0-9]{8,16}"
        let passwordTest = NSPredicate(format: "SELF MATCHES %@", passwordRegex)
        return passwordTest.evaluate(with: self)
    }
    
    // MARK: 邮政编码正则表达式(中国邮政编码为6位数字)
    func validateZipCode() -> Bool {// [1-9]\d{5}(?!\d)$
        let zipCodeRegex: String = "[1-9]\\d{5}(?!\\d)$"
        let zipCodeTest = NSPredicate(format: "SELF MATCHES %@", zipCodeRegex)
        return zipCodeTest.evaluate(with: self)
    }
    
    // MARK: 纯数字正则表达式
    func validateShouldNum() -> Bool {
        if self.length <= 0 {
            return false
        }
        let shouldNumRegex: String = "[0-9]*"
        let shouldNumTest = NSPredicate(format: "SELF MATCHES %@", shouldNumRegex)
        return shouldNumTest.evaluate(with: self)
    }
    
    // MARK: 身份证正则表达式
    func validIDCardNumber() -> Bool{
        do {
            let pattern = "(^[0-9]{15}$)|([0-9]{17}([0-9]|X)$)"
            let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpression.Options.caseInsensitive)
            let results = regex.matches(in: self, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.length))
            
            return results.count > 0
            
        }catch {
            return false
        }
    }
}


// MARK: - 字符复制

extension String {
    
    /// 字符串复制
    public func stringGeneral() {
        guard self.length > 0 else {
            printLog("复制内容不能为空")
            return
        }
        
        UIPasteboard.general.string = self
        MBConfiguredHUD.showSuccess("复制成功")
    }

}


extension String {
    
    /// 拓展方法
    var utf8Encoded: Data {
        return data(using: .utf8)!
    }
    
    func urlEncoded() -> String {
        let encodeUrlString = self.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
        return encodeUrlString ?? ""
    }
}


extension String {
    static func randomCode(length:Int) -> String {
        let base = pow(10, length - 1) as NSDecimalNumber
        let max = (pow(10, length) - (base as Decimal) - 1) as NSDecimalNumber
        let code = String(Int(arc4random_uniform(UInt32(max.intValue))) + base.intValue)
        return code
    }
}


extension String {
    /// 是否包含空/空格字符
    var isBlank: Bool {
        return allSatisfy({ $0.isWhitespace })
    }
}

extension Optional where Wrapped == String {
    var isBlank: Bool {
        return self?.isBlank ?? true
    }
}


extension String {
    
    /// 获取文字的宽高 空字符串高度为字体高度
    ///
    /// - Parameters:
    ///   - maxWidth: 空间的最大宽度
    ///   - font: 文字字体
    /// - Returns: 返回计算好的size
    func textSize(_ maxWidth: CGFloat, font: UIFont) -> CGSize {
        let constraint = CGSize(width: maxWidth, height: CGFloat.greatestFiniteMagnitude)
        let rect = self.boundingRect(with: constraint, options: ([.usesLineFragmentOrigin]), attributes: [NSAttributedString.Key.font: font], context: nil)
        return CGSize(width: ceil(rect.width), height: ceil(rect.height))
    }
    
    /// 获取文字的每一行字符串 空字符串为空数组
    ///
    /// - Parameters:
    ///   - maxWidth: 空间的最大宽度
    ///   - font: 文字字体
    /// - Returns: 返回计算好的行字符串
    func textLines(_ maxWidth: CGFloat, font: UIFont) -> [String] {
        let myFont = CTFontCreateWithName(font.fontName as CFString, font.pointSize, nil)
        
        let attStr = NSMutableAttributedString(string: self)
        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineBreakMode = .byCharWrapping
        
        attStr.addAttribute(.paragraphStyle, value: paragraphStyle, range: NSRange(location: 0, length: attStr.length))
        attStr.addAttribute(NSAttributedString.Key(kCTFontAttributeName as String), value: myFont, range: NSRange(location: 0, length: attStr.length))
        let frameSetter = CTFramesetterCreateWithAttributedString(attStr)
        
        let path = CGMutablePath()
        path.addRect(CGRect(x: 0, y: 0, width:maxWidth, height: 100000), transform: .identity)
        
        let frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(CFIndex(0), CFIndex(0)), path, nil)
        let lines = CTFrameGetLines(frame) as? [AnyHashable]
        var linesArray: [String] = []
        
        for line in lines ?? [] {
            let lineRange = CTLineGetStringRange(line as! CTLine)
            let range = NSRange(location: lineRange.location, length: lineRange.length)
            
            let lineString = (self as NSString).substring(with: range)
            CFAttributedStringSetAttribute(attStr, lineRange, kCTKernAttributeName, (NSNumber(value: 0.0)))
            linesArray.append(lineString)
        }
        return linesArray
    }
}


================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/UIColor/UIColor+Extension.swift
================================================
//
//  UIColor+Extend.swift
//  UIColor
//
//  Created by TAN on 2018/8/30.
//  Copyright © 2018年 iOS. All rights reserved.
//  UIColor使用拓展

import UIKit

extension UIColor {
    
    /// 16进制转化Color
    ///
    /// - Parameter hex: 16进制
    /// - Returns: Color
    class func colorWithHexStr(_ hex: String) -> UIColor {
        
        var cString = hex.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).uppercased()
        
        if (cString.hasSuffix("#")) {
            let index = cString.index(cString.startIndex, offsetBy: 1)
            //cString = cString.substring(from: index)
            cString = String(cString[index...]) // Swift 4
        }
        
        if (cString.count != 6) {
            
            return UIColor.red
        }
    
        let rIndex = cString.index(cString.startIndex, offsetBy: 2)
        //let rString = cString.substring(to: rIndex)
        let rString = String(cString[..<rIndex])
        
        //let otherString = cString.substring(from: rIndex)
        let otherString = String(cString[rIndex...])
        
        let gIndex = otherString.index(otherString.startIndex, offsetBy: 2)
        
        //let gString = otherString.substring(to: gIndex)
        let gString =  String(otherString[..<gIndex])
        
        let bIndex = cString.index(cString.endIndex, offsetBy: -2)
        //let bString = cString.substring(from: bIndex)
        let bString = String(cString[bIndex...])
        
        var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0;
        Scanner(string: rString).scanHexInt32(&r)
        Scanner(string: gString).scanHexInt32(&g)
        Scanner(string: bString).scanHexInt32(&b)
        
        return UIColor(red: CGFloat(r)/255.0, green: CGFloat(g)/255.0, blue: CGFloat(b)/255.0, alpha: (1))
    }
    
    
    /// 16进制转化Color
    ///
    /// - Parameters:
    ///   - hex: 16进制
    ///   - alpha: 透明度
    /// - Returns: Color
    class func colorWithHexStr(_ hex: String, alpha: CGFloat) -> UIColor {
        var cString:String = hex.trimmingCharacters(in: NSCharacterSet.whitespacesAndNewlines).uppercased()
        
        if (cString.hasPrefix("#")) {
            cString = (cString as NSString).substring(from: 1)
        }
        
        if (cString.count != 6) {
            return UIColor.gray
        }
        
        let rString = (cString as NSString).substring(to: 2)
        let gString = ((cString as NSString).substring(from: 2) as NSString).substring(to: 2)
        let bString = ((cString as NSString).substring(from: 4) as NSString).substring(to: 2)
        
        var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0;
        Scanner(string: rString).scanHexInt32(&r)
        Scanner(string: gString).scanHexInt32(&g)
        Scanner(string: bString).scanHexInt32(&b)
        
        return UIColor(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: alpha)
    }
    
    
    // MARK: - RGB的颜色设置
    class func RGB(r: CGFloat, g: CGFloat, b: CGFloat) -> UIColor {
        return UIColor(red: r/255.0, green: g/255.0, blue: b/255.0, alpha: 1.0)
    }
    
    class func RGBA(r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat) -> UIColor {
        return UIColor(red: r/255.0, green: g/255.0, blue: b/255.0, alpha: a/1.0)
    }
    
    // MARK: - 随机颜色
    /// 随机颜色
    ///
    /// - Returns: 随机颜色
    class func randomColor() -> UIColor {
        let red = CGFloat(arc4random_uniform(256))
        let green = CGFloat(arc4random_uniform(256))
        let blue = CGFloat(arc4random_uniform(256))
        return RGB(r: red, g: green, b: blue)
    }
    
    
    // MARK: - 应用控件主题颜色
    /// 1FB922
    ///
    /// - Returns: 1FB922
    class func appThemeHexColor() ->UIColor {
        return colorWithHexStr("1FB922")
    }
    
    // MARK: - HUD的背景颜色
    class func hudBackgroundColor() -> UIColor {
        return UIColor.black.withAlphaComponent(0.7)
    }
    
    // MARK: - tabBar标题未选中颜色
    class func tabBarTitleNormalColor() -> UIColor {
        return colorWithHexStr("AAAAAA")
    }
    
    // MARK: - tabBar标题已选中颜色
    class func tabBarTitleSelectColor() -> UIColor {
        return colorWithHexStr("1FB922")
    }
}


extension UIColor {
    
    convenience init?(netHex: Int) {
        self.init(red:(netHex >> 16) & 0xff, green:(netHex >> 8) & 0xff, blue:netHex & 0xff)
    }
}



================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/UIKit/UIAlert+Extension.swift
================================================
//
//  EasyAlertView.swift
//  FY-JetChat
//
//  Created by iOS.Jet on 2019/2/28.
//  Copyright © 2019 Jett. All rights reserved.
//

import UIKit

class EasyAlertView: NSObject {
    
    override init() { }
    
    /// 点击不响应提示框
    class func sureActionAlert(title: String, message: String, vc: UIViewController) {
        let alertVC = UIAlertController(title: title, message: message, preferredStyle: .alert)

        let sureAction = UIAlertAction(title: "确定".rLocalized(), style: .default) { (UIAlertAction) in
            
        }
        
        alertVC.addAction(sureAction)
        vc.present(alertVC, animated: true, completion: nil)
    }

    /// 默认带确认&取消事件响应的提示框
    class func confirmAlert(title: String, message: String, vc: UIViewController, source: @escaping () -> Void) {
        let alertVC = UIAlertController(title: title, message: message, preferredStyle: .alert)

        let confirmAction = UIAlertAction(title: "确定".rLocalized(), style: .default) { (UIAlertAction) in
            source()
        }
        let cancleAction = UIAlertAction(title: "取消".rLocalized(), style: .default, handler: nil)

        alertVC.addAction(cancleAction)
        alertVC.addAction(confirmAction)
        vc.present(alertVC, animated: true, completion: nil)
    }

    class func defaultConfirm(title: String, message: String, vc: UIViewController, source: @escaping () -> Void) {
        let alertVC = UIAlertController(title: title, message: message, preferredStyle: .alert)

        let confirmAction = UIAlertAction(title: "确认".rLocalized(), style: .default) { (UIAlertAction) in
            source()
        }

        alertVC.addAction(confirmAction)
        vc.present(alertVC, animated: true, completion: nil)
    }

    /// 默认只带确认事件响应的提示框
    class func sheetAction(title: String, message: String, vc: UIViewController, source: @escaping () -> Void) {
        let alertVC = UIAlertController(title: title, message: message, preferredStyle: .actionSheet)

        let confirmAction = UIAlertAction(title: "确定".rLocalized(), style: .default) { (UIAlertAction) in
            source()
        }

        let cancleAction = UIAlertAction(title: "取消".rLocalized(), style: .default, handler: nil)
        alertVC.addAction(cancleAction)
        alertVC.addAction(confirmAction)
        vc.present(alertVC, animated: true, completion: nil)
    }

    /// 完全自定义样式的Alert
    class func customAlert(title: String, message: String, confirm: String, cancel: String, vc: UIViewController, confirmBlock: @escaping () -> Void, cancelBlock: @escaping () -> Void) {
        let alertVC = UIAlertController(title: title, message: message, preferredStyle: .alert)
        let confirmAction = UIAlertAction(title: confirm, style: .default) { (UIAlertAction) in
            confirmBlock()
        }
        let cancelAction = UIAlertAction(title: cancel, style: .default) { (UIAlertAction) in
            cancelBlock()
        }

        alertVC.addAction(confirmAction)
        alertVC.addAction(cancelAction)
        vc.present(alertVC, animated: true, completion: nil)
    }

    class func customConfirm(title: String, message: String, confirm: String, vc: UIViewController, source: @escaping () -> Void) {
        let alertVC = UIAlertController(title: title, message: message, preferredStyle: .alert)

        let confirmAction = UIAlertAction(title: confirm, style: .default) { (UIAlertAction) in
            source()
        }

        alertVC.addAction(confirmAction)
        vc.present(alertVC, animated: true, completion: nil)
    }

    /// 带文本输入的提示框
    func textFiledAlert(title: String, message: String, placeholder: String, vc: UIViewController, source: @escaping (_ text: String) -> Void) {
        let alertVC = UIAlertController(title: title, message: message, preferredStyle: .alert)

        alertVC.addTextField { (textFiled: UITextField) in
            textFiled.placeholder = placeholder
        }

        let cancelAction = UIAlertAction(title: "确定".rLocalized(), style: .default, handler: nil)
        let confirmAction = UIAlertAction(title: "取消".rLocalized(), style: .default) { (UIAlertAction) in
            let login = alertVC.textFields![0]
            source(login.text!)
            printLog("输入的是:\(String(describing: login.text))")
        }
        
        alertVC.addAction(cancelAction)
        alertVC.addAction(confirmAction)
        vc.present(alertVC, animated: true, completion: nil)
    }
}


================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/UIKit/UIButton+Extension.swift
================================================
//
//  UIButton+Extension.swift
//  FY-JetChat
//
//  Created by iOS.Jet on 2019/10/11.
//  Copyright © 2019 Jett. All rights reserved.
//

import Foundation
import RxSwift
import RxCocoa
import RxTheme

/// 按钮图片和文字对齐方式
enum ButtonStyle {
    ///图片在左,文字在右,整体居中
    case `default`
    ///图片在左,文字在右,整体居中
    case left
    ///图片在右,文字在左,整体居中。
    case right
    ///图片在上,文字在下,整体居中
    case top
    ///图片在下,文字在上,整体居中
    case bottom
    ///图片居中,文字在图片下面。
    case centerTop
    ///图片居中,文字在图片上面
    case centerBottom
    ///图片居中,文字在上距离按钮顶部。
    case centerUp
    ///图片居中,文字在按钮下边。
    case centerDown
    ///图片在右,文字在左,距离按钮两边边距
    case rightLeft
    ///图片在左,文字在右,距离按钮两边边距
    case leftRight
}

// MARK: - Button EdgeInsets

extension UIButton {
    
    /// 按钮图片和文字的排版
    /// - Parameter style: 样式
    /// - Parameter padding: 间距大小
    func setImageButtonStyle(_ style: ButtonStyle, padding: CGFloat){
        
        if imageView?.image != nil && titleLabel?.text != nil {
            //先还原
            titleEdgeInsets = .zero
            imageEdgeInsets = .zero
            
            let imageRect: CGRect = imageView!.frame
            let titleRect: CGRect = titleLabel!.frame
            let totalHeight: CGFloat = (imageRect.size.height) + padding + (titleRect.size.height)
            let selfWidth  = frame.size.width
            let selfHeight = frame.size.height
            
            switch style {
            case .left:
                if padding != 0 {
                    titleEdgeInsets = UIEdgeInsets(top: 0, left: padding / 2, bottom: 0, right: -padding / 2)
                    
                    imageEdgeInsets = UIEdgeInsets(top: 0, left: -padding / 2, bottom: 0, right: padding / 2)
                }
                
                break
                
            case .right:
                //图片在右,文字在左
                titleEdgeInsets = UIEdgeInsets(top: 0, left: -((imageRect.size.width) + padding / 2), bottom: 0, right: ((imageRect.size.width) + padding / 2))
                
                imageEdgeInsets = UIEdgeInsets(top: 0, left: ((titleRect.size.width) + padding / 2), bottom: 0, right: -((titleRect.size.width) + padding / 2))
                
                break
                
            case .top:
                //图片在上,文字在下
                titleEdgeInsets = UIEdgeInsets(top: ((selfHeight - totalHeight) / 2 + imageRect.size.height + padding - titleRect.origin.y),
                                               left: (selfWidth/2 - titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2,
                                               bottom: -((selfHeight - totalHeight) / 2 + imageRect.size.height + padding - titleRect.origin.y),
                                               right: -(selfWidth / 2 - titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2)
                
                imageEdgeInsets = UIEdgeInsets(top: ((selfHeight - totalHeight) / 2 - imageRect.origin.y),
                                               left: (selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2),
                                               bottom: -((selfHeight - totalHeight)/2 - imageRect.origin.y),
                                               right: -(selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2))
                break
                
            case .bottom:
                //图片在下,文字在上。
                titleEdgeInsets = UIEdgeInsets(top: ((selfHeight - totalHeight) / 2 - titleRect.origin.y),
                                               left: (selfWidth / 2 - titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2,
                                               bottom: -((selfHeight - totalHeight) / 2 - titleRect.origin.y),
                                               right: -(selfWidth / 2 - titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2)
                
                imageEdgeInsets = UIEdgeInsets(top: ((selfHeight - totalHeight) / 2 + titleRect.size.height + padding - imageRect.origin.y),
                                               left: (selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2),
                                               bottom: -((selfHeight - totalHeight) / 2 + titleRect.size.height + padding - imageRect.origin.y),
                                               right: -(selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2))
                break
                
            case .centerTop:
                titleEdgeInsets = UIEdgeInsets(top: -(titleRect.origin.y - padding),
                                               left: (selfWidth / 2 -  titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2,
                                               bottom: (titleRect.origin.y - padding),
                                               right: -(selfWidth / 2 -  titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2)
                
                imageEdgeInsets = UIEdgeInsets(top: 0,
                                               left: (selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2),
                                               bottom: 0,
                                               right: -(selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2))
                break
                
            case .centerBottom:
                titleEdgeInsets = UIEdgeInsets(top: (selfHeight - padding - titleRect.origin.y - titleRect.size.height),
                                               left: (selfWidth / 2 -  titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2,
                                               bottom: -(selfHeight - padding - titleRect.origin.y - titleRect.size.height),
                                               right: -(selfWidth / 2 -  titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2)
                
                imageEdgeInsets = UIEdgeInsets(top: 0,
                                               left: (selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2),
                                               bottom: 0,
                                               right: -(selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2))
                break
                
            case .centerUp:
                titleEdgeInsets = UIEdgeInsets(top: -(titleRect.origin.y + titleRect.size.height - imageRect.origin.y + padding),
                                               left: (selfWidth / 2 -  titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2,
                                               bottom: (titleRect.origin.y + titleRect.size.height - imageRect.origin.y + padding),
                                               right: -(selfWidth / 2 -  titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2)
                
                imageEdgeInsets = UIEdgeInsets(top: 0,
                                               left: (selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2),
                                               bottom: 0,
                                               right: -(selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2))
                break
                
            case .centerDown:
                titleEdgeInsets = UIEdgeInsets(top: (imageRect.origin.y + imageRect.size.height - titleRect.origin.y + padding),
                                               left: (selfWidth / 2 -  titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2,
                                               bottom: -(imageRect.origin.y + imageRect.size.height - titleRect.origin.y + padding),
                                               right: -(selfWidth / 2 -  titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2)
                
                imageEdgeInsets = UIEdgeInsets(top: 0,
                                               left: (selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2),
                                               bottom: 0,
                                               right: -(selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2))
                
                break
                
            case .rightLeft:
                //图片在右,文字在左,距离按钮两边边距
                titleEdgeInsets = UIEdgeInsets(top: 0,
                                               left: -(titleRect.origin.x - padding),
                                               bottom: 0,
                                               right: (titleRect.origin.x - padding))
                
                imageEdgeInsets = UIEdgeInsets(top: 0,
                                               left: (selfWidth - padding - imageRect.origin.x - imageRect.size.width),
                                               bottom: 0,
                                               right: -(selfWidth - padding - imageRect.origin.x - imageRect.size.width))
                break
                
            case .leftRight:
                //图片在左,文字在右,距离按钮两边边距
                titleEdgeInsets = UIEdgeInsets(top: 0,
                                               left: (selfWidth - padding - titleRect.origin.x - titleRect.size.width),
                                               bottom: 0,
                                               right: -(selfWidth - padding - titleRect.origin.x - titleRect.size.width))
                imageEdgeInsets = UIEdgeInsets(top: 0,
                                               left: -(imageRect.origin.x - padding),
                                               bottom: 0,
                                               right: (imageRect.origin.x - padding))
                break
                
            default:
                titleEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
                imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
                break
            }
        }else {
            titleEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
            imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
        }
        
    }
}


// MARK: - RxSwift tap

extension UIButton {
    
    func rxTapClosure(_ time: DispatchTimeInterval = .microseconds(100), callback:(@escaping() -> ())) {
        
        self.rx.tap.debounce(time, scheduler: MainScheduler.instance).bind {
            callback()
        }.disposed(by: rx.disposeBag)
    }
}


// MARK: - Theme

public extension ThemeProxy where Base: UIButton {

    func buttonImage(from newValue: ThemeAttribute<UIImage?>, for state: UIControl.State) {
        base.setImage(newValue.value, for: state)
        let disposable = newValue.stream
            .take(until: base.rx.deallocating)
            .observe(on: MainScheduler.instance)
            .bind(to: base.rx.buttnImage(for: state))
        hold(disposable, for: "buttnImage.forState.\(state.rawValue)")
    }

}

extension Reactive where Base: UIButton {
    
    /// Bindable sink for `buttnImage` property
    func buttnImage(for state: UIControl.State) -> Binder<UIImage?> {
        return Binder(self.base) { view, attr in
            view.setImage(attr, for: state)
        }
    }
}


================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/UIKit/UIFont+PingFang.swift
================================================
//
//  UIFont+PingFang.swift
//  FY-JetChat
//
//  Created by Jett on 2019/3/6.
//  Copyright © 2019 Jett. All rights reserved.
//

import Foundation
import UIKit

extension UIFont {
    
    /// 苹方-简 常规体 PingFangSC-Regular
    static func PingFangRegular(_ size:CGFloat) -> UIFont {
        return UIFont(name: "PingFangSC-Regular", size: size) ?? UIFont.systemFont(ofSize:size)
    }
    
    /// 苹方-简 中黑体 PingFangSC-Medium
    static func PingFangMedium(_  size:CGFloat) -> UIFont {
        return UIFont(name: "PingFangSC-Medium", size: size) ?? UIFont.systemFont(ofSize:size)
    }
    
    /// 苹方-简 中粗体 PingFangSC-Semibold
    static func PingFangSemibold(_ size:CGFloat) -> UIFont {
        return UIFont(name: "PingFangSC-Semibold", size: size) ?? UIFont.systemFont(ofSize:size)
    }
    
    /// 苹方-特粗体 PingFang-SC-Heavy
    static func PingFangHeavy(_ size:CGFloat) -> UIFont {
        return UIFont(name: "PingFang-SC-Heavy", size: size) ?? UIFont.systemFont(ofSize:size)
    }
}


================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/UIKit/UIImage+Extension.swift
================================================
//
//  LWUIImage+Extension.swift
//  FY-JetChat
//
//  Created by iOS.Jet on 2019/2/28.
//  Copyright © 2019 Jett. All rights reserved.
//

import Foundation

extension UIImage {
    
    /// 颜色转化为图片
    class func imageWithColor(_ color: UIColor) -> UIImage {
        
        let rect = CGRect(x: 0, y: 0, width: 1, height: 1)
        UIGraphicsBeginImageContext(rect.size)
        
        let context = UIGraphicsGetCurrentContext()
        context?.setFillColor(color.cgColor)
        context?.fill(rect)
        
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        return image!
    }
    
    /// 图片去锯齿
    func setAntialiasedImage(_ size: CGSize, _ scale: CGFloat) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
        self.draw(in: CGRect(x: 1, y: 1, width: size.width-2, height: size.height-2))
        let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return image
    }
    
    /// 图片置灰
    func setAshPlacingImage(_ sourceImage: UIImage) -> UIImage {
        UIGraphicsBeginImageContext(self.size)
        let colorSpace = CGColorSpaceCreateDeviceGray()
        let context = CGContext(data: nil , width: Int(self.size.width), height: Int(self.size.height),bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: CGImageAlphaInfo.none.rawValue)
        context?.draw(sourceImage.cgImage!, in: CGRect.init(x: 0, y: 0, width: sourceImage.size.width, height: sourceImage.size.height))
        let cgImage = context!.makeImage()
        let grayImage = UIImage.init(cgImage: cgImage!)
        return grayImage
    }
    
    /// 截屏使用
    func screenShotWithoutMask(shotView: UIView) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(shotView.frame.size, true, 0.0)
        shotView.drawHierarchy(in: CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: kScreenW, height: kScreenH)), afterScreenUpdates: false)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image!
    }
    
    
    /// 图片点九处理
    /// - Parameter sscale: 比例
    func stretchableImage(centerStretchScale sscale:CGFloat) -> UIImage {
        let top = self.size.height - 8;
        let left = self.size.width / 2 - 2;
        let right = self.size.width / 2 + 2;
        let bottom = self.size.height - 4;
        return self.resizableImage(withCapInsets: UIEdgeInsets.init(top: top, left: left, bottom: bottom, right: right), resizingMode: .stretch)
    }
    
    /// 返回不同颜色的新图片
    func changeColor(color: UIColor) -> UIImage? {
        
        UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale);
        
        let context = UIGraphicsGetCurrentContext();
        context?.translateBy(x: 0, y: self.size.height)
        context?.scaleBy(x: 1.0, y: -1.0)
        context?.setBlendMode(.normal)
        
        let rect = CGRect.init(x: 0, y: 0, width: self.size.width, height: self.size.height)
        context?.clip(to: rect, mask: self.cgImage!)
        context?.setFillColor(color.cgColor)
        context?.fill(rect)
        
        let newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return newImage
    }
    
    /// 返回不被拉伸的图片
    class func imageWithRenderingMode(_ originalImage: UIImage) -> UIImage {
        return originalImage.withRenderingMode(.alwaysOriginal)
    }
    
    /**
     生成高清二维码
     */
    class func createQRForString(_ qrString: String) -> UIImage {
        if qrString.isEmpty == true{
            return UIImage()
        }
        // 将字符串转换为二进制
        let data = qrString.data(using: String.Encoding.utf8, allowLossyConversion: false)
        let filter = CIFilter(name: "CIQRCodeGenerator")!
        filter.setValue(data, forKey: "inputMessage")
        filter.setValue("H", forKey: "inputCorrectionLevel")
        let qrCIImage = filter.outputImage
        let colorFilter = CIFilter(name: "CIFalseColor")!
        colorFilter.setDefaults()
        colorFilter.setValue(qrCIImage, forKey: "inputImage")
        colorFilter.setValue(CIColor(red: 0, green: 0, blue: 0), forKey: "inputColor0")
        colorFilter.setValue(CIColor(red: 1, green: 1, blue: 1), forKey: "inputColor1")
        
        let outImage = colorFilter.outputImage
        let scale = 172 / outImage!.extent.size.width;
        let transform = CGAffineTransform(scaleX: scale, y: scale)
        let transformImage = colorFilter.outputImage!.transformed(by: transform)
        let image = UIImage(ciImage: transformImage)
        
        return image
    }
    
    /// 拉伸按钮背景图片
    class func resizableImage(_ image: UIImage) -> UIImage {
        let w: CGFloat = image.size.width * 0.5
        let h: CGFloat = image.size.height * 0.5
        return image.resizableImage(withCapInsets: UIEdgeInsets(top: w, left: h, bottom: w, right: h))
    }
}

// 扩展 UIImage 的 init 方法,获得渐变效果
public extension UIImage {
    
    convenience init?(gradientColors:[UIColor], size: CGSize) {
        UIGraphicsBeginImageContextWithOptions(size, true, 0)
        let context = UIGraphicsGetCurrentContext()
        let colorSpace = CGColorSpaceCreateDeviceRGB()
        let colors = gradientColors.map {(color: UIColor) -> AnyObject? in return color.cgColor as AnyObject } as NSArray
        let gradient = CGGradient(colorsSpace: colorSpace, colors: colors, locations: nil)
        // 第二个参数是起始位置,第三个参数是终止位置
        context!.drawLinearGradient(gradient!, start: CGPoint(x: 0, y: 0), end: CGPoint(x: size.width, y: 0), options: CGGradientDrawingOptions(rawValue: 0))
        self.init(cgImage: (UIGraphicsGetImageFromCurrentImageContext()?.cgImage)!)
        UIGraphicsEndImageContext()
    }
}




================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/UIKit/UIImageView+Kingfisher.swift
================================================
//
//  UIImageView+Kingfisher.swift
//  MK-MChain
//
//  Created by iOS.Jet on 2019/2/28.
//  Copyright © 2019 miku. All rights reserved.
//

import UIKit
import Foundation
import Kingfisher
import RxTheme
import RxCocoa
import RxSwift

enum ImageResult {
    case success(UIImage)
    case failure(String)
}

extension UIImageView {
    
    /// 设置网络图片
    ///
    /// - Parameter url: 网络图片资源url
    func setImageWithURL(_ url: String) {
        guard let imageURL = url.URLValue else {
            return
        }
        
        kf.setImage(with: imageURL)
    }
    
    
    /// 设置网络图片及占位图
    ///
    /// - Parameters:
    ///   - url: 网络图片资源url
    ///   - placeholder: 占位图片
    func setImageWithURL(_ url: String, placeholder: UIImage = UIImage()) {
        guard let imageURL = url.URLValue else {
            self.setPlaceholderImage(placeholder)
            return
        }
        
        kf.setImage(with: imageURL, placeholder: placeholder)
    }
    
    /// 设置网络图片及占位图
    ///
    /// - Parameters:
    ///   - url: 网络图片资源url
    ///   - placeholder: 占位图片名称
    func setImageWithURL(_ url: String, placeholder: String) {
        guard let imageURL = url.URLValue else {
            self.setPlaceholderImageNamed(placeholder)
            return
        }
        
        kf.setImage(with: imageURL, placeholder: UIImage(named: placeholder))
    }
    
    func setPlaceholderImage(_ image: UIImage) {
        DispatchQueue.main.async {
            self.image = image
        }
    }
    
    func setPlaceholderImageNamed(_ named: String) {
        DispatchQueue.main.async {
            if let placeholder = UIImage(named: named) {
                self.image = placeholder
            }
        }
    }
    
    /// 下载网络图片资源
    ///
    /// - Parameters:
    ///   - url: 网络图片资源url
    ///   - placeholder: 占位图片名称
    ///   - callback: 下载完成回调
    func downloadImageWithURL(_ url: String,
                              placeholder: UIImage = UIImage(),
                              callback:(@escaping (ImageResult) -> ())) {
        guard let imageURL = URL(string: url) else {
            return
        }
        
        kf.setImage(with: imageURL, options: [.memoryCacheExpiration(.expired)]) { result in
            switch result {
            case .success(let value):
                printLog("Task done for: \(value.source.url?.absoluteString ?? "")")
                callback(ImageResult.success(try! result.get().image))
            case .failure(let error):
                printLog("Job failed: \(error.localizedDescription)")
                callback(ImageResult.failure("Job failed: \(error.localizedDescription)"))
            }
        }
    }
}

// MARK: - Theme

public extension ThemeProxy where Base: UIImageView {
    
    /// (set only) bind a stream to backgroundColor
    var image: ThemeAttribute<UIImage?> {
        get { fatalError("set only") }
        set {
            base.image = newValue.value
            let disposable = newValue.stream
                .take(until: base.rx.deallocating)
                .observe(on: MainScheduler.instance)
                .bind(to: base.rx.image)
            hold(disposable, for: "backgroundColor")
        }
    }
}


================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/UIKit/UILabel+Extension.swift
================================================
//
//  UIlabel+Extension.swift
//  FY-JetChat
//
//  Created by Jett on 2019/3/26.
//  Copyright © 2019 Jett. All rights reserved.
//

import UIKit

class PaddingLabel: UILabel {
    private struct AssociatedKeys {
        static var padding = UIEdgeInsets()
    }
    
    public var padding: UIEdgeInsets? {
        get {
            return objc_getAssociatedObject(self, &AssociatedKeys.padding) as? UIEdgeInsets
        }
        set {
            if let newValue = newValue {
                objc_setAssociatedObject(self, &AssociatedKeys.padding, newValue as UIEdgeInsets?, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
            }
        }
    }
    
    override open func draw(_ rect: CGRect) {
        if let insets = padding {
            self.drawText(in: rect.inset(by: insets))
        } else {
            self.drawText(in: rect)
        }
    }
    
    override open var intrinsicContentSize: CGSize {
        guard let text = self.text else { return super.intrinsicContentSize }
        
        var contentSize = super.intrinsicContentSize
        var textWidth: CGFloat = frame.size.width
        var insetsHeight: CGFloat = 0.0
        var insetsWidth: CGFloat = 0.0
        
        if let insets = padding {
            insetsWidth += insets.left + insets.right
            insetsHeight += insets.top + insets.bottom
            textWidth -= insetsWidth
        }
        
        let newSize = text.boundingRect(with: CGSize(width: textWidth, height: CGFloat.greatestFiniteMagnitude),
                                        options: NSStringDrawingOptions.usesLineFragmentOrigin,
                                        attributes: [NSAttributedString.Key.font: self.font!], context: nil)
        
        contentSize.height = ceil(newSize.size.height) + insetsHeight
        contentSize.width = ceil(newSize.size.width) + insetsWidth
        
        return contentSize
    }
}


================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/UIKit/UINavBarItem+Extension.swift
================================================
//
//  NavBarItem+Extension.swift
//  SwiftStudy
//
//  Created by iOS.Jet on 2019/2/20.
//  Copyright © 2019 Jett. All rights reserved.
//

import Foundation
import UIKit

/// 便捷方法拓展
extension UIBarButtonItem {

    /// 设置导航栏侧边内容(只设置图片)
    ///
    /// - Parameters:
    ///   - image: 普通状态下图片
    ///   - action: 添加的点击事件
    /// - Returns: 自定义设置导航栏侧边内容
    class func setNavItemImage(_ image: UIImage, target: Any?, action: Selector) -> UIBarButtonItem {
        let customButton = UIButton(type: .custom)
        customButton.setImage(image, for: .normal)
        customButton.setTitleColor(.appThemeHexColor(), for: .normal)
        customButton.titleLabel?.font = UIFont(name: "PingFangSC-Regular", size: 14)
        customButton.sizeToFit()
        customButton.addTarget(target, action: action, for: .touchUpInside)
        return UIBarButtonItem(customView: customButton)
    }
    
    /// 设置导航栏侧边内容(设置普通&高亮图片)
    ///
    /// - Parameters:
    ///   - image: 普通状态下图片
    ///   - hightImage: 高亮状态下图片
    ///   - action: 添加的点击事件
    /// - Returns: 自定义设置导航栏侧边内容
    class func setNavItemHightImage(_ image: UIImage, hightImage: UIImage, target: Any?, action: Selector) -> UIBarButtonItem {
        let customButton = UIButton(type: .custom)
        customButton.setImage(image, for: .normal)
        customButton.setImage(hightImage, for: .highlighted)
        customButton.setTitleColor(.appThemeHexColor(), for: .normal)
        customButton.titleLabel?.font = UIFont(name: "PingFangSC-Regular", size: 14)
        customButton.sizeToFit()
        customButton.addTarget(target, action: action, for: .touchUpInside)
        return UIBarButtonItem(customView: customButton)
    }
    
    /// 设置导航栏侧边内容(设置普通&高亮图片)
    ///
    /// - Parameters:
    ///   - image: 普通状态下图片
    ///   - selectedImage: 选中状态下图片
    ///   - action: 添加的点击事件
    /// - Returns: 自定义设置导航栏侧边内容
    class func setNavItemSelectedImage(_ image: UIImage, selectedImage: UIImage, target: Any?, action: Selector) -> UIBarButtonItem {
        let customButton = UIButton(type: .custom)
        customButton.setImage(image, for: .normal)
        customButton.setImage(selectedImage, for: .selected)
        customButton.setTitleColor(.appThemeHexColor(), for: .normal)
        customButton.titleLabel?.font = UIFont(name: "PingFangSC-Regular", size: 14)
        customButton.sizeToFit()
        customButton.addTarget(target, action: action, for: .touchUpInside)
        return UIBarButtonItem(customView: customButton)
    }
    
    /// 设置导航栏侧边内容(只设置文字)
    ///
    /// - Parameters:
    ///   - title: 普通状态下文字
    ///   - selector: 添加的点击事件
    /// - Returns: 自定义设置导航栏侧边内容
    class func setNavItemTitle(_ title: String, target: Any?, selector: Selector) -> UIBarButtonItem {
        let customButton = UIButton(type: .custom)
        customButton.setTitle(title, for: .normal)
        customButton.setTitleColor(.appThemeHexColor(), for: .normal)
        customButton.titleLabel?.font = UIFont(name: "PingFangSC-Regular", size: 14)
        customButton.sizeToFit()
        customButton.addTarget(target, action: selector, for: .touchUpInside)
        return UIBarButtonItem(customView: customButton)
    }
    
    
    /// 设置导航栏侧边内容(只设置文字)
    ///
    /// - Parameters:
    ///   - title: 普通状态下文字
    ///   - color: 普通状态下文字颜色
    ///   - action: 添加的点击事件
    /// - Returns: 自定义设置导航栏侧边内容
    class func setTitleWithColor(_ title: String, color: UIColor, target: Any?, selector: Selector) -> UIBarButtonItem {
        let customButton = UIButton(type: .custom)
        customButton.setTitle(title, for: .normal)
        customButton.setTitleColor(color, for: .normal)
        customButton.titleLabel?.font = UIFont(name: "PingFangSC-Regular", size: 14)
        customButton.sizeToFit()
        customButton.addTarget(target, action: selector, for: .touchUpInside)
        return UIBarButtonItem(customView: customButton)
    }
    
    /// 设置导航栏侧边内容(设置图片+文字)
    ///
    /// - Parameters:
    ///   - image: 普通状态下图片
    ///   - title: 普通状态下文字
    ///   - action: 添加的点击事件
    /// - Returns: 自定义设置导航栏侧边内容
    class func setNavItemImageOrTitle(_ image: UIImage, title: String, target: Any, action: Selector) -> UIBarButtonItem {
        let customButton = UIButton(type: .custom)
        customButton.setImage(image, for: .normal)
        customButton.setTitle(title, for: .normal)
        customButton.setTitleColor(.appThemeHexColor(), for: .normal)
        customButton.titleLabel?.font = UIFont(name: "PingFangSC-Regular", size: 14)
        customButton.sizeToFit()
        customButton.addTarget(target, action: action, for: .touchUpInside)
        return UIBarButtonItem(customView: customButton)
    }
    
    /// 设置导航栏侧边内容(设置高亮图片+文字)
    ///
    /// - Parameters:
    ///   - hightImage: 高亮状态下图片
    ///   - title: 普通状态下文字
    ///   - action: 添加的点击事件
    /// - Returns: 自定义设置导航栏侧边内容
    class func setNavItemHightImageOrTitle(_ hightImage: UIImage, title: String, target: Any?, action: Selector) -> UIBarButtonItem {
        let customButton = UIButton(type: .custom)
        customButton.setTitle(title, for: .normal)
        customButton.setImage(hightImage, for: .highlighted)
        customButton.setTitleColor(.appThemeHexColor(), for: .normal)
        customButton.titleLabel?.font = UIFont(name: "PingFangSC-Regular", size: 14)
        customButton.sizeToFit()
        customButton.addTarget(target, action: action, for: .touchUpInside)
        return UIBarButtonItem(customView: customButton)
    }
    
    
    /// 设置导航栏侧边内容(自定义按钮)
    ///
    /// - Parameters:
    ///   - button: 自定义按钮
    ///   - action: 添加的点击事件
    /// - Returns: 自定义设置导航栏侧边内容
    class func setNavItemCustomView(_ button : UIButton, target: Any?, action: Selector) -> UIBarButtonItem {
        button.sizeToFit()
        button.addTarget(target, action: action, for: .touchUpInside)
        return UIBarButtonItem(customView: button)
    }
    
}




================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/UIKit/UITableView+Extension.swift
================================================
//
//  UITableView+EmptyData.swift
//  FY-JetChat
//
//  Created by iOS.Jet on 2019/6/12.
//  Copyright © 2019 Jett. All rights reserved.
//

import Foundation

public extension UITableView {
    
    func scrollToFirst(at scrollPosition: UITableView.ScrollPosition, animated: Bool) {
        guard numberOfSections > 0 else { return }
        guard numberOfRows(inSection: 0) > 0 else { return }
        let indexPath = IndexPath(item: 0, section: 0)
        scrollToRow(at: indexPath, at: scrollPosition, animated: animated)
    }
    
    func scrollToLast(at scrollPosition: UITableView.ScrollPosition, animated: Bool) {
        guard numberOfSections > 0 else { return }
        let lastSection = numberOfSections - 1
        guard numberOfRows(inSection: 0) > 0 else { return }
        let lastIndexPath = IndexPath(item: numberOfRows(inSection: lastSection)-1, section: lastSection)
        scrollToRow(at: lastIndexPath, at: scrollPosition, animated: animated)
    }
}

public extension UITableView {
    
    // MARK: - Cell register and reuse
    /**
     Register cell nib
     
     - parameter aClass: class
     */
    func fy_registerCellNib<T: UITableViewCell>(_ aClass: T.Type) {
        let name = String(describing: aClass)
        let nib = UINib(nibName: name, bundle: nil)
        self.register(nib, forCellReuseIdentifier: name)
    }
    
    /**
     Register cell class
     
     - parameter aClass: class
     */
    func fy_registerCellClass<T: UITableViewCell>(_ aClass: T.Type) {
        let name = String(describing: aClass)
        self.register(aClass, forCellReuseIdentifier: name)
    }
    
    /**
     Reusable Cell
     
     - parameter aClass:    class
     
     - returns: cell
     */
    func fy_dequeueReusableCell<T: UITableViewCell>(_ aClass: T.Type) -> T! {
        let name = String(describing: aClass)
        guard let cell = dequeueReusableCell(withIdentifier: name) as? T else {
            fatalError("\(name) is not registed")
        }
        return cell
    }
    
    // MARK: - HeaderFooter register and reuse
    /**
     Register cell nib
     
     - parameter aClass: class
     */
    func fy_registerHeaderFooterNib<T: UIView>(_ aClass: T.Type) {
        let name = String(describing: aClass)
        let nib = UINib(nibName: name, bundle: nil)
        self.register(nib, forHeaderFooterViewReuseIdentifier: name)
    }
    
    /**
     Register cell class
     
     - parameter aClass: class
     */
    func fy_registerHeaderFooterClass<T: UIView>(_ aClass: T.Type) {
        let name = String(describing: aClass)
        self.register(aClass, forHeaderFooterViewReuseIdentifier: name)
    }
    
    /**
     Reusable Cell
     
     - parameter aClass:    class
     
     - returns: cell
     */
    func fy_dequeueReusableHeaderFooter<T: UIView>(_ aClass: T.Type) -> T! {
        let name = String(describing: aClass)
        guard let cell = dequeueReusableHeaderFooterView(withIdentifier: name) as? T else {
            fatalError("\(name) is not registed")
        }
        return cell
    }
}




================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/UIView/UIView+Extensions.swift
================================================
//
//  UIView+Extend.swift
//  UIView拓展
//
//  Created by Mac on 2018/8/16.
//  Copyright © 2018年 iOS. All rights reserved.
//

import UIKit
import SnapKit
import RxTheme
import RxSwift

extension UIView {
    
    /// x
    public var x : CGFloat {
        
        get {
            return self.frame.origin.x
        }
        set (x) {
            var frame = self.frame
            frame.origin.x = x
            self.frame = frame
        }
    }
    
    
    /// y
    public var y : CGFloat {
        
        get {
            return self.frame.origin.y
        }
        set (y) {
            var frame = self.frame
            frame.origin.y = y
            self.frame = frame
        }
    }
    
    
    /// maxX
    public var maxX : CGFloat {
        
        get {
            return self.frame.maxX
        }
        set(maxX) {
            self.frame.origin.x = maxX - self.frame.size.width
        }
    }
    
    /// maxY
    public var maxY : CGFloat {
        
        get {
            return self.frame.maxY
        }
        set(maxY) {
            self.frame.origin.y = maxY - self.frame.size.height
        }
    }
    
    
    /// width
    public var width : CGFloat {
        
        get {
            return self.frame.size.width
        }
        set (width) {
            var frame = self.frame
            frame.size.width = width
            self.frame = frame
        }
    }
    
    
    /// height
    public var height : CGFloat {
        
        get {
            return self.frame.size.height
        }
        set (height) {
            var frame = self.frame
            frame.size.height = height
            self.frame = frame
        }
    }
    
    
    /// centerX
    public var centerX : CGFloat {
        
        get {
            return self.center.x
        }
        set (centerX) {
            var center = self.center
            center.x = centerX
            self.center = center
        }
    }
    
    
    /// centerY
    public var centerY : CGFloat {
        
        get {
            return self.center.y
        }
        set (centerY) {
            var center = self.center
            center.y = centerY
            self.center = center
        }
    }
    
    
    /// size
    public var size : CGSize {
        
        get {
            return self.frame.size
        }
        set (size) {
            var newSize = self.frame.size
            newSize = CGSize(width: size.width, height: size.height)
            self.frame.size = newSize
        }
    }
    
    
    /// origin
    public var origin : CGPoint {
        
        get {
            return self.frame.origin
        }
        set (origin) {
            var newOrigin = self.frame.origin
            newOrigin = CGPoint(x: origin.x, y: origin.y)
            self.frame.origin = newOrigin
        }
    }
    
    
    /// cornerRadius
    public var radius: CGFloat {
        
        get {
            return self.layer.cornerRadius;
        }
        set (radius){
            self.layer.cornerRadius = radius
            
            guard self.layer.masksToBounds else {
                return
            }
            self.layer.masksToBounds = true
        }
    }
    
    
    /// borderWidth
    public var borderWidth: CGFloat {
        
        get {
            return self.layer.borderWidth
        }
        set (borderWidth){
            self.layer.borderWidth = borderWidth
            
            guard self.layer.masksToBounds else {
                return
            }
            self.layer.masksToBounds = true
        }
    }
    
    
    /// 指定方向设置圆角
    ///
    /// - Parameters:
    ///   - size: 圆角大小
    ///   - type: 圆角方向
    public func makeLayerRadius(_ size: CGSize?, type: UIRectCorner) {
        guard let size = size else {
            return
        }
        
        let bezierPath = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: type, cornerRadii: size)
        let maskLayer = CAShapeLayer()
        maskLayer.frame = self.bounds
        maskLayer.path = bezierPath.cgPath
        self.layer.mask = maskLayer
    }
    
    
    /// 设置view的阴影
    ///
    /// - Parameters:
    ///   - radius: 阴影的模糊半径
    ///   - color: 阴影颜色
    ///   - size: 阴影的偏移量
    public func makeLayerShadow(_ size: CGSize?, radius: CGFloat, color: UIColor, opacity: Float) {
        guard let size = size else {
            return
        }
        
        self.layer.shadowColor = color.cgColor
        self.layer.shadowOffset = size
        self.layer.shadowRadius = radius
        self.layer.shadowOpacity = opacity //阴影透明度(默认为1 | 0为不显示)
    }
    
    /// 设置view的阴影 带圆角
    ///
    /// - Parameters:
    ///   - size: 大小  默认CGSize(width: 0, height: 3)
    ///   - radius: 阴影的模糊半径 默认 4
    ///   - color: 阴影颜色 默认 黑色 0.5
    ///   - opacity: 阴影 渲染 默认1
    ///   - corner: 圆角 默认18
    
    public func makeLayerShadowCorner(size: CGSize = CGSize(width: 0, height: 3),
                                      radius: CGFloat = 4,
                                      color: UIColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5),
                                      opacity: Float = 1,
                                      corner: CGFloat = 18) {
        self.layer.shadowColor = color.cgColor
        self.layer.shadowOffset = size
        self.layer.shadowRadius = radius
        self.layer.shadowOpacity = opacity
        self.layer.cornerRadius = corner
    }
    
    /// 设置view的阴影 带圆角 背景色
    ///
    /// - Parameters:
    ///   - size: 大小  默认CGSize(width: 0, height: 2)
    ///   - radius: 阴影的模糊半径 默认 3
    ///   - color:  阴影颜色 默认 黑色 0.3
    ///   - opacity: 阴影 渲染 默认1
    ///   - corner: 圆角 默认8
    ///   - bgColor: 背景色
    public func setShadowCornerBgColor(size: CGSize = CGSize(width: 0, height: 2),
                                       radius: CGFloat = 3,
                                       color: UIColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.3),
                                       opacity: Float = 1,
                                       corner: CGFloat = 8,
                                       bgColor: UIColor) {
        self.layer.cornerRadius = corner
        self.layer.shadowColor = color.cgColor
        self.layer.shadowRadius = radius
        self.layer.shadowOffset = size
        self.layer.shadowOpacity = opacity
        self.layer.backgroundColor = bgColor.cgColor
    }
    
    
    /// 设置view的渐变颜色背景
    ///
    /// - Parameter colors: 渐变色颜色数组
    public func makeGradientLayer(_ colors: [Any]?) {
        guard let colors = colors else {
            return
        }
        
        let gradientLayer = CAGradientLayer()
        let sizeWidth = UIScreen.main.bounds.size.width
        gradientLayer.frame = CGRect(x: 0, y: 0, width: sizeWidth, height: self.height)
        gradientLayer.startPoint = CGPoint(x: -0.03, y: -0.1)
        gradientLayer.endPoint = CGPoint(x: 0.96, y: 0.96)
        gradientLayer.locations = [0, 1.0]
        //设置渐变的主颜色
        gradientLayer.colors = colors
        //将gradientLayer作为子layer添加到主layer上
        self.layer.addSublayer(gradientLayer)
        self.layer.masksToBounds = true
    }
    
    
    /// 设置view默认的渐变颜色(3E9EF7 ~ 185DFF)
    public func makeDefaultGradient() {
        let colors = [UIColor.colorWithHexStr("3E9EF7").cgColor,
                      UIColor.colorWithHexStr("185DFF").cgColor]
        
        let gradientLayer = CAGradientLayer()
        let sizeWidth = UIScreen.main.bounds.size.width
        gradientLayer.frame = CGRect(x: 0, y: 0, width: sizeWidth, height: self.height)
        gradientLayer.startPoint = CGPoint(x: 0, y: 0)
        gradientLayer.endPoint = CGPoint(x: 0.93, y: 0.92)
        gradientLayer.locations = [0, 1.0]
        //设置渐变的主颜色
        gradientLayer.colors = colors
        //将gradientLayer作为子layer添加到主layer上
        self.layer.addSublayer(gradientLayer)
        self.layer.masksToBounds = true
    }
    
    
    /// 设置边距宽度和颜色
    func makeLayerBoards(at width: CGFloat, color: UIColor) {
        self.layer.borderWidth = width
        self.layer.borderColor = color.cgColor
    }
}

extension UIView {
    class func fromNib<T : UIView>() -> T {
        return Bundle.main.loadNibNamed(String(describing: T.self), owner: nil, options: nil)![0] as! T
    }
}

protocol ViewChainable {}
extension ViewChainable where Self: UIView {
    @discardableResult
    func config(_ config: (Self) -> Void) -> Self {
        config(self)
        return self
    }
}



extension UIView: ViewChainable {
    
    func adhere(toSuperView: UIView) -> Self {
        toSuperView.addSubview(self)
        return self
    }
    
    @discardableResult
    func layout(snapKitMaker: (ConstraintMaker) -> Void) -> Self {
        self.snp.makeConstraints { (make) in
            snapKitMaker(make)
        }
        return self
    }
}

extension UIView {
    
    func cropView(with rect: CGRect) -> UIImage? {
        UIGraphicsBeginImageContextWithOptions(CGSize(width: rect.size.width, height: rect.size.height), _: false, _: 0.0) //currentView 当前的view  创建一个基于位图的图形上下文并指定大小为
        if let context = UIGraphicsGetCurrentContext() {
            layer.render(in: context)
        } //renderInContext呈现接受者及其子范围到指定的上下文
        let viewImage: UIImage? = UIGraphicsGetImageFromCurrentImageContext() //返回一个基于当前图形上下文的图片
        UIGraphicsEndImageContext() //移除栈顶的基于当前位图的图形上下文
        //    UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);//然后将该图片保存到图片图
        return viewImage
    }
    
}

// MARK: - Reactive Tap

extension UIView {
    
    func tapClosure(callback:(@escaping() -> ())) {
        let tapGesture = UITapGestureRecognizer()
        self.isUserInteractionEnabled = true
        self.addGestureRecognizer(tapGesture)
        
        // 绑定方式实现
        tapGesture.rx.event.bind { _ in
            callback()
        }.disposed(by: rx.disposeBag)
    }
}

// MARK: - ThemeProxy

public extension ThemeProxy where Base: UITextField {
    
    /// (set only) bind a stream to borderColor
    var placeholderColor: ThemeAttribute<UIColor?> {
        get { fatalError("set only") }
        set {
            base.setPlaceHolderTextColor(newValue.value ?? UIColor.lightGray)
        }
    }
}

@available(iOS 13.0, *)
public extension ThemeProxy where Base: UIBarAppearance {
    
    /// (set only) bind a stream to backgroundColor
    var backgroundColor: ThemeAttribute<UIColor?> {
        get { fatalError("set only") }
        set {
            base.backgroundColor = newValue.value ?? UIColor.gray
        }
    }
}


================================================
FILE: JetChat/FY-IMChat/Classes/Extensions/UIView/UIViewController+Extend.swift
================================================
//
//  UIViewController+Extend.swift
//  FY-JetChat
//
//  Created by iOS.Jet on 2019/8/18.
//  Copyright © 2019 Jett. All rights reserved.
//

import Foundation

extension UIViewController {
    
    /// Configuration back
    @objc func back(_ animated: Bool = true) {
        navigationController?.popViewController(animated: animated)
    }
    
    // Get currentController
    class func currentViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
        if let navigationController = controller as? UINavigationController {
            return currentViewController(controller: navigationController.visibleViewController)
        }
        if let tabBarController = controller as? UITabBarController {
            if let selected = tabBarController.selectedViewController {
                return currentViewController(controller: selected)
            }
        }
        if let presented = controller?.presentedViewController {
            return currentViewController(controller: presented)
        }
        return controller
    }
}



================================================
FILE: JetChat/FY-IMChat/Classes/Libraries/ActionSheet/FYActionSheet.swift
================================================
//
//  FYActionSheet.swift
//  FYActionSheet
//
//  Created by iOS.Jet on 2019/2/28.
//  Copyright © 2019年 Jett. All rights reserved.
//

import Foundation
import UIKit

class FYActionSheet: BottomPopupViewController {
    
    // MARK: - Setter
    
    var textFont: UIFont? {
        didSet {
            guard let font = textFont else {
                return
            }
            
            titleFont = font
            tableView.reloadData()
        }
    }
    
    var cancelTextFont: UIFont? {
        didSet {
            guard let font = textFont else {
                return
            }
            
            cancelBtn.titleLabel?.font = font
        }
    }
    
    var textColor: UIColor?
    
    var cancelTextColor: UIColor? {
        didSet {
            guard let titleColor = textColor else {
                return
            }
            
            cancelBtn.setTitleColor(titleColor, for: .normal)
        }
    }
    
    // MARK: - Private
    
    private let bottomSpace: CGFloat = 6
    private let cancelHeight: CGFloat = 44
    private let bottomSafeHeight: CGFloat = 34
    
    // MARK: - lazy var

    public var handler: ((_ index: Int)->Void)?
    
    private var titleFont: UIFont? = nil
    
    private var dataSource: [String] = []
    private var isShowCancel: Bool = true
    
    private var cellHeight: CGFloat = 55
    
    private var tableHeight: CGFloat {
        return CGFloat(dataSource.count) * cellHeight
    }
    
    private lazy var cancelBtn: UIButton = {
        let button = UIButton(type: .custom)
        button.frame = CGRect(x: 0, y: bottomSpace, width: kScreenW, height: cancelHeight)
        button.setTitle("取消".rLocalized(), for: .normal)
        button.titleLabel?.font = .PingFangRegular(14)
        button.theme.titleColor(from: themed { $0.FYColor_Main_TextColor_V2 }, for: .normal)
        button.addTarget(self, action: #selector(dissAction), for: .touchUpInside)
        button.theme.backgroundColor = themed { $0.FYColor_BackgroundColor_V12 }
        return button
    }()
    
    private lazy var footerBtnView: UIView = {
        let height = bottomSpace + cancelHeight
        let footerView = UIView(frame: CGRect(x: 0, y: 0, width: kScreenW, height: height))
        footerView.theme.backgroundColor = themed { $0.FYColor_BackgroundColor_V2 }
        footerView.addSubview(cancelBtn)
        return footerView
    }()
    
    private lazy var tableView: UITableView = {
        let tableView = UITableView(frame: CGRect(x: 0, y: 0, width: kScreenW, height: tableHeight))
        tableView.delegate = self
        tableView.bounces = false
        tableView.isScrollEnabled = false
        tableView.dataSource = self
        tableView.separatorStyle = .none
        tableView.tableFooterView = UIView()
        tableView.estimatedSectionHeaderHeight = 0
        tableView.estimatedSectionFooterHeight = 0
        tableView.theme.backgroundColor = themed { $0.FYColor_BackgroundColor_V2 }
        tableView.register(cellWithClass: FYActionSheetCell.self)
        return tableView
    }()
    
    // MARK: - Life cycle
    
    required public init(isShowCancel: Bool = false, actionTitles: [String]) {
        self.dataSource = actionTitles
        self.isShowCancel = isShowCancel
        super.init(nibName: nil, bundle: nil)
        
        buildUI()
    }
    
    required public init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    private func buildUI() {
        view.theme.backgroundColor = themed { $0.FYColor_BackgroundColor_V2 }
        if isShowCancel {
            tableView.tableFooterView = footerBtnView
        }
        
        view.addSubview(tableView)
        tableView.snp.makeConstraints { (make) in
            make.top.equalToSuperview()
            make.left.right.equalToSuperview()
            make.bottom.equalToSuperview()
        }
        
        tableView.reloadData()
    }
    
    // Bottom popup attribute variables
    // You can override the desired variable to change appearance
    
    override var popupHeight: CGFloat { makePopHeight() }
    
    override var popupTopCornerRadius: CGFloat { return 8 }
    
    override var popupPresentDuration: Double { return 0.25 }
    
    override var popupDismissDuration: Double { return 0.25 }
    
    override var popupShouldDismissInteractivelty: Bool { return false }
    
    override var popupDimmingViewAlpha: CGFloat { return BottomPopupConstants.kDimmingViewDefaultAlphaValue }
    
    private func makePopHeight() -> CGFloat {
        if isShowCancel {
            return tableHeight + footerBtnView.height + bottomSafeHeight
        }else {
            return tableHeight + bottomSafeHeight
        }
    }
    
    // MARK: - Action
    
    @objc func dissAction() {
        dismiss(animated: true, completion: nil)
    }
}

// MARK: - UITableViewDataSource && UITableViewDelegate

extension FYActionSheet: UITableViewDataSource, UITableViewDelegate {
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return dataSource.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withClass: FYActionSheetCell.self)
        if dataSource.count > indexPath.row {
            cell.textColor = textColor
            cell.titleFont = titleFont
            cell.title = dataSource[safe: indexPath.row]
            if indexPath.row == dataSource.count - 1 {
                cell.hideLine = true
            }
        }
        return cell
    }
    
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return cellHeight
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if dataSource.count > indexPath.row {
            handler?(indexPath.row)
        }
        
        dissAction()
    }
}




================================================
FILE: JetChat/FY-IMChat/Classes/Libraries/ActionSheet/FYActionSheetCell.swift
================================================
//
//  FYActionSheetCell.swift
//  PGActionSheet
//
//  Created by iOS.Jet on 2019/2/28.
//  Copyright © 2019年 Jett. All rights reserved.
//

import UIKit

class FYActionSheetCell: UITableViewCell {
    
    // MARK: - setter && getter
    
    var title: String? {
        didSet {
            titleLabel.text = title ?? ""
        }
    }
    
    var titleFont: UIFont? {
        didSet {
            guard let font = titleFont else {
                return
            }
            
            titleLabel.font = font
        }
    }
    
    var textColor: UIColor? {
        didSet {
            guard let color = textColor else {
                return
            }
            
            titleLabel.textColor = color
        }
    }
    
    var hideLine: Bool? {
        didSet {
            guard let isHidden = hideLine else {
                return
            }
            
            lineView.isHidden = isHidden
        }
    }
    
    private lazy var titleLabel: UILabel = {
        let label = UILabel()
        label.textAlignment = .center
        label.theme.textColor = themed { $0.FYColor_Main_TextColor_V1 }
        label.font = .PingFangRegular(14)
        return label
    }()
    
    private lazy var lineView: UIView = {
        let view = UIView()
        view.theme.backgroundColor = themed { $0.FYColor_BorderColor_V1 }
        return view
    }()
    
    // MARK: - life cycle
    
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        self.selectionStyle = .none
        theme.backgroundColor = themed { $0.FYColor_BackgroundColor_V12 }
        contentView.theme.backgroundColor = themed { $0.FYColor_BackgroundColor_V12 }
        
        buildUI()
    }
    
    private func buildUI() {
        contentView.addSubview(titleLabel)
        contentView.addSubview(lineView)
        
        titleLabel.snp.makeConstraints { (make) in
            make.left.equalToSuperview().offset(13)
            make.right.equalToSuperview().offset(-13)
            make.centerY.equalToSuperview()
        }
        
        lineView.snp.makeConstraints { (make) in
            make.left.right.equalToSuperview()
            make.bottom.equalToSuperview()
            make.height.equalTo(0.5)
        }
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
}


================================================
FILE: JetChat/FY-IMChat/Classes/Libraries/HUDProgress/MBConfiguredHUD.swift
================================================
//
//  MBConfiguredHUD.swift
//  FY-JetChat
//
//  Created by iOS.Jet on 2019/2/28.
//  Copyright © 2019 Jett. All rights reserved.
//

import Foundation
import MBProgressHUD
import UIKit

typealias MBHUD = MBConfiguredHUD

/// 弹框显示时间
fileprivate let kAfterDelay: TimeInterval = 1.5

class MBConfiguredHUD: NSObject {

    fileprivate static let kRegularFont = UIFont.PingFangRegular(14)
    
    /// 获取用于显示提示框的view
    class func hudWindow() -> UIWindow {
        var window = UIApplication.shared.keyWindow
        if window?.windowLevel != UIWindow.Level.normal {
            let windowArray = UIApplication.shared.windows
            for newWindow in windowArray {
                if newWindow.windowLevel == UIWindow.Level.normal {
                    window = newWindow
                    break
                }
            }
        }
        return window!
    }
    
    // MARK: - 具体样式设置
    
    /// 普通的菊花HUD(需要手动隐藏)
    class func show() {
        DispatchQueue.main.async {
            let window = hudWindow()
            MBProgressHUD.hide(for: window, animated: false)
            // create
            let hud = MBProgressHUD.showAdded(to: window, animated: true)
            hud.mode = .indeterminate
            hud.label.textColor = .white
            hud.label.font = self.kRegularFont
            hud.contentColor = .white //文字和菊花颜色
            hud.bezelView.style = .solidColor
            UIActivityIndicatorView.appearance(whenContainedInInstancesOf:
                [MBProgressHUD.self]).color = .white //设置菊花颜色为白色
            hud.bezelView.color = .hudBackgroundColor()
            hud.isUserInteractionEnabled = false
            hud.removeFromSuperViewOnHide = true
        }
    }
    
    /// 带文字的菊花HUD(需手动隐藏)
    class func showStatus(_ status: String, view: UIView = hudWindow()) {
        DispatchQueue.main.async {
            let window = view
            MBProgressHUD.hide(for: window, animated: false)
            // create
            let hud = MBProgressHUD.showAdded(to: window, animated: true)
            hud.label.text = status
            hud.mode = .indeterminate
            hud.label.textColor = .white
            hud.label.font = self.kRegularFont
            hud.animationType = .zoom
            hud.contentColor = .white //文字和菊花颜色
            hud.bezelView.style = .solidColor
            UIActivityIndicatorView.appearance(whenContainedInInstancesOf:
                [MBProgressHUD.self]).color = .white
            hud.isUserInteractionEnabled = false
            hud.bezelView.color = .hudBackgroundColor()
            hud.removeFromSuperViewOnHide = true
        }
    }
    
    /// 普通文本提示HUD(自动隐藏)
    class func showMessage(_ message: String) {
        DispatchQueue.main.async {
            let window = hudWindow()
            MBProgressHUD.hide(for: window, animated: false)
            // create
            let hud = MBProgressHUD.showAdded(to: window, animated: true)
            hud.mode = .text
            hud.label.text = message
            hud.label.textColor = .white
            hud.label.font = self.kRegularFont
            hud.contentColor = .white //文字和菊花颜色
            hud.bezelView.style = .solidColor
            hud.margin = 5
            hud.animationType = .zoom
            hud.isUserInteractionEnabled = false
            hud.bezelView.color = .hudBackgroundColor()
            //hud.bezelView.cornerRadius = 4
            hud.removeFromSuperViewOnHide = true
            hud.hide(animated: true, afterDelay: kAfterDelay)
        }
    }
    
    /// 长类型文本提示HUD(自动隐藏)
    class func showLongMessage(_ message: String) {
        DispatchQueue.main.async {
            let window = hudWindow()
            MBProgressHUD.hide(for: window, animated: false)
            // create
            let hud = MBProgressHUD.showAdded(to: window, animated: true)
            hud.mode = .text
            hud.label.text = message
            hud.label.numberOfLines = 0
            hud.label.textColor = .white
            hud.label.font = self.kRegularFont
            hud.contentColor = .white //文字和菊花颜色
            hud.bezelView.style = .solidColor
            hud.margin = 5
            hud.animationType = .zoom
            hud.isUserInteractionEnabled = false
            hud.bezelView.color = .hudBackgroundColor()
            //hud.bezelView.cornerRadius = 4
            hud.removeFromSuperViewOnHide = true
            hud.hide(animated: true, afterDelay: kAfterDelay)
        }
    }
    
    /// 成功提示HUD + 图片
    class func showSuccess(_ success: String) {
        DispatchQueue.main.async {
            let window = hudWindow()
            MBProgressHUD.hide(for: window, animated: false)
            // create
            let hud = MBProgressHUD.showAdded(to: window, animated: true)
            let imageView = UIImageView(image: UIImage(named: "HUDAssets.bundle/icon_hud_success"))
            hud.mode = .customView
            hud.label.text = success
            hud.label.textColor = .white
            hud.label.font = self.kRegularFont
            hud.contentColor = .white //文字和菊花颜色
            hud.bezelView.layer.masksToBounds = false;
            hud.bezelView.style = .solidColor
            hud.animationTyp
Download .txt
gitextract_i1lra9d3/

├── .gitignore
├── JetChat/
│   ├── FY-IMChat/
│   │   ├── Assets.xcassets/
│   │   │   ├── AppIcon.appiconset/
│   │   │   │   └── Contents.json
│   │   │   ├── ChatView/
│   │   │   │   ├── Contents.json
│   │   │   │   ├── MessageVideoDownload.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── MessageVideoPlay.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── ReceiverImageNodeBorder.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── ic_avatar_placeholder.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── ic_group_placeholder.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── ic_msg_forward_n.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── ic_msg_forward_s.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_receiver_background_highlight.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_receiver_background_normal.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_receiver_background_reversed.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_sender_background_highlight.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_sender_background_normal.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_sender_background_reversed.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_voice_receiver_normal.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_voice_receiver_playing_1.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_voice_receiver_playing_2.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_voice_receiver_playing_3.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_voice_sender_normal.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_voice_sender_playing_1.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_voice_sender_playing_2.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── message_voice_sender_playing_3.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── play_btn_normal.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── play_btn_pressed.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── player_back_button.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── player_suspend_button.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── Common/
│   │   │   │   ├── Contents.json
│   │   │   │   ├── ic_list_selection.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── ic_placeholder.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── Contents.json
│   │   │   ├── LaunchImage.launchimage/
│   │   │   │   └── Contents.json
│   │   │   ├── Mine/
│   │   │   │   ├── Contents.json
│   │   │   │   └── icon_arrow_right.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── Moments/
│   │   │   │   ├── Contents.json
│   │   │   │   ├── ic_album_reflash.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── ic_comment_normal.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── ic_comment_selected.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── ic_star_normal.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── ic_star_selected.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── nav_camera_black.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── nav_camera_white.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── Nav/
│   │   │   │   ├── Contents.json
│   │   │   │   ├── icon_more_add.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── nav_back_black.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── nav_back_white.imageset/
│   │   │   │       └── Contents.json
│   │   │   └── TabBar/
│   │   │       ├── Contents.json
│   │   │       ├── ic_tabbar01_normal.imageset/
│   │   │       │   └── Contents.json
│   │   │       ├── ic_tabbar01_selected.imageset/
│   │   │       │   └── Contents.json
│   │   │       ├── ic_tabbar02_normal.imageset/
│   │   │       │   └── Contents.json
│   │   │       ├── ic_tabbar02_selected.imageset/
│   │   │       │   └── Contents.json
│   │   │       ├── ic_tabbar03_normal.imageset/
│   │   │       │   └── Contents.json
│   │   │       ├── ic_tabbar03_selected.imageset/
│   │   │       │   └── Contents.json
│   │   │       ├── ic_tabbar04_normal.imageset/
│   │   │       │   └── Contents.json
│   │   │       └── ic_tabbar04_selected.imageset/
│   │   │           └── Contents.json
│   │   ├── Classes/
│   │   │   ├── AppDelegate/
│   │   │   │   ├── AppDelegate+Utils.swift
│   │   │   │   ├── AppDelegate+Wcdb.swift
│   │   │   │   └── AppDelegate.swift
│   │   │   ├── Base/
│   │   │   │   ├── FYBaseIGListViewController.swift
│   │   │   │   ├── FYBaseNavigationController.swift
│   │   │   │   ├── FYBaseTabBarController.swift
│   │   │   │   ├── FYBaseViewController.swift
│   │   │   │   ├── Model/
│   │   │   │   │   └── FYCellDataConfig.swift
│   │   │   │   └── ViewModel/
│   │   │   │       └── BaseViewModel.swift
│   │   │   ├── Common/
│   │   │   │   └── AppCommon.swift
│   │   │   ├── Extensions/
│   │   │   │   ├── Array/
│   │   │   │   │   └── Array+Extension.swift
│   │   │   │   ├── Dictionary/
│   │   │   │   │   └── Dictionary+Exted.swift
│   │   │   │   ├── Notification/
│   │   │   │   │   └── Notification+Name.swift
│   │   │   │   ├── RxSwift/
│   │   │   │   │   ├── JFButton+Rx.swift
│   │   │   │   │   ├── MJRefresh+Rx.swift
│   │   │   │   │   └── Observable+Operators.swift
│   │   │   │   ├── SnapKit/
│   │   │   │   │   ├── ConstraintArray+Extensions.swift
│   │   │   │   │   └── ConstraintArrayDSL.swift
│   │   │   │   ├── Strings/
│   │   │   │   │   ├── String+Date.swift
│   │   │   │   │   └── String+Extension.swift
│   │   │   │   ├── UIColor/
│   │   │   │   │   └── UIColor+Extension.swift
│   │   │   │   ├── UIKit/
│   │   │   │   │   ├── UIAlert+Extension.swift
│   │   │   │   │   ├── UIButton+Extension.swift
│   │   │   │   │   ├── UIFont+PingFang.swift
│   │   │   │   │   ├── UIImage+Extension.swift
│   │   │   │   │   ├── UIImageView+Kingfisher.swift
│   │   │   │   │   ├── UILabel+Extension.swift
│   │   │   │   │   ├── UINavBarItem+Extension.swift
│   │   │   │   │   └── UITableView+Extension.swift
│   │   │   │   └── UIView/
│   │   │   │       ├── UIView+Extensions.swift
│   │   │   │       └── UIViewController+Extend.swift
│   │   │   ├── Libraries/
│   │   │   │   ├── ActionSheet/
│   │   │   │   │   ├── FYActionSheet.swift
│   │   │   │   │   └── FYActionSheetCell.swift
│   │   │   │   ├── HUDProgress/
│   │   │   │   │   ├── HUDAssets.bundle/
│   │   │   │   │   │   └── Info.plist
│   │   │   │   │   └── MBConfiguredHUD.swift
│   │   │   │   ├── NavPopup/
│   │   │   │   │   ├── Cell/
│   │   │   │   │   │   └── FYNavDropMenuCell.swift
│   │   │   │   │   └── FYNavPopuListMenu.swift
│   │   │   │   └── Refreshing/
│   │   │   │       └── FYMomentsHeaderRefresh.swift
│   │   │   ├── MainModule/
│   │   │   │   ├── ChatRoom/
│   │   │   │   │   ├── Controller/
│   │   │   │   │   │   ├── FYChatBaseViewController.swift
│   │   │   │   │   │   ├── FYChatRoomListViewController.swift
│   │   │   │   │   │   └── FYMessageForwardViewController.swift
│   │   │   │   │   ├── Model/
│   │   │   │   │   │   ├── FYMessageBaseModel.swift
│   │   │   │   │   │   ├── FYMessageChatModel.swift
│   │   │   │   │   │   └── FYMessageItem.swift
│   │   │   │   │   ├── View/
│   │   │   │   │   │   ├── FYImageMessageCell.swift
│   │   │   │   │   │   ├── FYMessageBaseCell.swift
│   │   │   │   │   │   ├── FYTextMessageCell.swift
│   │   │   │   │   │   └── FYVideoMessageCell.swift
│   │   │   │   │   └── ViewModel/
│   │   │   │   │       └── FYMessageViewModel.swift
│   │   │   │   ├── Contacts/
│   │   │   │   │   ├── Controller/
│   │   │   │   │   │   ├── FYContactsInfoViewController.swift
│   │   │   │   │   │   ├── FYContactsListViewController.swift
│   │   │   │   │   │   └── FYEditChatInfoViewController.swift
│   │   │   │   │   └── View/
│   │   │   │   │       ├── FYContactsInfoView.swift
│   │   │   │   │       └── FYContactsTableViewCell.swift
│   │   │   │   ├── Conversation/
│   │   │   │   │   ├── Controller/
│   │   │   │   │   │   └── FYSesstionListViewController.swift
│   │   │   │   │   └── View/
│   │   │   │   │       └── FYConversationCell.swift
│   │   │   │   ├── Mine/
│   │   │   │   │   ├── Controller/
│   │   │   │   │   │   ├── FYMineViewController.swift
│   │   │   │   │   │   ├── FYSettingViewController.swift
│   │   │   │   │   │   └── FYThemeSelectionListVC.swift
│   │   │   │   │   └── View/
│   │   │   │   │       └── FYFastGridListView.swift
│   │   │   │   ├── Moments/
│   │   │   │   │   ├── FYMomentsViewController.swift
│   │   │   │   │   ├── JSONData/
│   │   │   │   │   │   ├── moments1.json
│   │   │   │   │   │   └── moments2.json
│   │   │   │   │   ├── Model/
│   │   │   │   │   │   ├── FYCommentInfo.swift
│   │   │   │   │   │   ├── FYMoUserInfo.swift
│   │   │   │   │   │   └── FYMomentInfo.swift
│   │   │   │   │   ├── Sections/
│   │   │   │   │   │   └── FYMomentBindingSection.swift
│   │   │   │   │   └── View/
│   │   │   │   │       ├── Cell/
│   │   │   │   │       │   ├── CommentContentCell.swift
│   │   │   │   │       │   ├── CommentContentView.swift
│   │   │   │   │       │   ├── CommentInputView.swift
│   │   │   │   │       │   ├── CommentThumbView.swift
│   │   │   │   │       │   ├── MomentBottomCell.swift
│   │   │   │   │       │   ├── MomentCommentCell.swift
│   │   │   │   │       │   ├── MomentHeaderCell.swift
│   │   │   │   │       │   ├── MomentHeaderImageCell.swift
│   │   │   │   │       │   ├── MomentLocationCell.swift
│   │   │   │   │       │   └── MomentTopCell.swift
│   │   │   │   │       ├── FYMomentNavBar.swift
│   │   │   │   │       ├── MomentLabel/
│   │   │   │   │       │   ├── FYLabel.swift
│   │   │   │   │       │   └── FYLabelType.swift
│   │   │   │   │       ├── NineImageView.swift
│   │   │   │   │       ├── OperateMenuView.swift
│   │   │   │   │       └── TextView/
│   │   │   │   │           └── FYTextView.swift
│   │   │   │   └── QrScan/
│   │   │   │       └── ScanQRCodeViewController.swift
│   │   │   ├── Resource/
│   │   │   │   ├── Languages/
│   │   │   │   │   ├── en.lproj/
│   │   │   │   │   │   ├── InfoPlist.strings
│   │   │   │   │   │   └── Localizable.strings
│   │   │   │   │   └── zh-Hans.lproj/
│   │   │   │   │       ├── InfoPlist.strings
│   │   │   │   │       ├── LWLocalizations.strings
│   │   │   │   │       └── Localizable.strings
│   │   │   │   ├── LaunchScreen.storyboard
│   │   │   │   └── R.generated.swift
│   │   │   ├── Thirdparty/
│   │   │   │   ├── BottomPopupController/
│   │   │   │   │   ├── BottomPopupDismissAnimator.swift
│   │   │   │   │   ├── BottomPopupDismissInteractionController.swift
│   │   │   │   │   ├── BottomPopupNavigationController.swift
│   │   │   │   │   ├── BottomPopupPresentAnimator.swift
│   │   │   │   │   ├── BottomPopupPresentationController.swift
│   │   │   │   │   ├── BottomPopupTransitionHandler.swift
│   │   │   │   │   ├── BottomPopupUtils.swift
│   │   │   │   │   ├── BottomPopupViewController.swift
│   │   │   │   │   └── CSBottomPopupNavigationController.swift
│   │   │   │   ├── NavigationHandy/
│   │   │   │   │   ├── NSObject+BinAdd.h
│   │   │   │   │   ├── NSObject+BinAdd.m
│   │   │   │   │   ├── UINavigationController+Extensions.h
│   │   │   │   │   └── UINavigationController+Extensions.m
│   │   │   │   ├── RxActivityIndicator/
│   │   │   │   │   └── ActivityIndicator.swift
│   │   │   │   └── RxErrorTracker/
│   │   │   │       └── ErrorTracker.swift
│   │   │   └── Utilites/
│   │   │       ├── DataBase/
│   │   │       │   ├── WCDBManager/
│   │   │       │   │   └── DBQuery/
│   │   │       │   │       ├── FYDBQueryHelper.swift
│   │   │       │   │       └── FYMessageUserModel.swift
│   │   │       │   ├── WCDataBaseManager.swift
│   │   │       │   └── WCDataBaseTable.swift
│   │   │       ├── FPSLabel/
│   │   │       │   ├── FPSLabel.swift
│   │   │       │   ├── WeakProxy.h
│   │   │       │   └── WeakProxy.m
│   │   │       ├── FileSizeManager/
│   │   │       │   ├── FYFileSizeManager.swift
│   │   │       │   └── FYUserDefaultManager.swift
│   │   │       ├── Helpers/
│   │   │       │   ├── CountDownHandy.swift
│   │   │       │   └── LanguageManager.swift
│   │   │       ├── KeyboardCore/
│   │   │       │   ├── Cell/
│   │   │       │   │   ├── ChatAppleEmojiCell.swift
│   │   │       │   │   ├── ChatKeyboardFlowLayout.swift
│   │   │       │   │   └── ChatMoreMenuCell.swift
│   │   │       │   ├── ChatEmojiListView.swift
│   │   │       │   ├── ChatGrowingTextView.swift
│   │   │       │   ├── ChatKeyboard+Extensions.swift
│   │   │       │   ├── ChatKeyboardView.swift
│   │   │       │   ├── ChatMoreMenuView.swift
│   │   │       │   ├── Helper/
│   │   │       │   │   ├── ChatEmotionAttachment.swift
│   │   │       │   │   ├── ChatEmotionHelper.swift
│   │   │       │   │   └── ChatFindEmotion.swift
│   │   │       │   ├── Model/
│   │   │       │   │   ├── ChatEmoticon.swift
│   │   │       │   │   └── ChatMoreMnueConfig.swift
│   │   │       │   └── Resource/
│   │   │       │       ├── Emoji/
│   │   │       │       │   └── Emoticons.bundle/
│   │   │       │       │       └── com.apple.emoji/
│   │   │       │       │           └── info.plist
│   │   │       │       └── Emotion/
│   │   │       │           └── Expression.plist
│   │   │       └── Theme/
│   │   │           ├── FYDarkTheme.swift
│   │   │           ├── FYLightTheme.swift
│   │   │           ├── FYThemeCenter.swift
│   │   │           └── FYThemeColors.swift
│   │   ├── FY-IMChat.entitlements
│   │   ├── FYObjcBridge.h
│   │   └── Info.plist
│   ├── FY-IMChat.xcodeproj/
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace/
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcshareddata/
│   │   │       └── IDEWorkspaceChecks.plist
│   │   └── xcshareddata/
│   │       └── xcschemes/
│   │           └── FY-IMChat.xcscheme
│   ├── FY-IMChat.xcworkspace/
│   │   ├── contents.xcworkspacedata
│   │   └── xcshareddata/
│   │       └── IDEWorkspaceChecks.plist
│   ├── FY-IMChatTests/
│   │   ├── FY_IMChatTests.swift
│   │   └── Info.plist
│   ├── FY-IMChatUITests/
│   │   ├── FY_IMChatUITests.swift
│   │   └── Info.plist
│   ├── JetChatWidget/
│   │   ├── Assets.xcassets/
│   │   │   ├── AccentColor.colorset/
│   │   │   │   └── Contents.json
│   │   │   ├── AppIcon.appiconset/
│   │   │   │   └── Contents.json
│   │   │   ├── Contents.json
│   │   │   ├── WidgetBackground.colorset/
│   │   │   │   └── Contents.json
│   │   │   └── icon_widget_bg.imageset/
│   │   │       └── Contents.json
│   │   ├── Info.plist
│   │   ├── JetChatWidget.intentdefinition
│   │   └── JetChatWidget.swift
│   ├── JetChatWidgetExtension.entitlements
│   ├── Podfile
│   └── Pods/
│       ├── Alamofire/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Source/
│       │       ├── AFError.swift
│       │       ├── Alamofire.swift
│       │       ├── AlamofireExtended.swift
│       │       ├── AuthenticationInterceptor.swift
│       │       ├── CachedResponseHandler.swift
│       │       ├── Combine.swift
│       │       ├── Concurrency.swift
│       │       ├── DispatchQueue+Alamofire.swift
│       │       ├── EventMonitor.swift
│       │       ├── HTTPHeaders.swift
│       │       ├── HTTPMethod.swift
│       │       ├── MultipartFormData.swift
│       │       ├── MultipartUpload.swift
│       │       ├── NetworkReachabilityManager.swift
│       │       ├── Notifications.swift
│       │       ├── OperationQueue+Alamofire.swift
│       │       ├── ParameterEncoder.swift
│       │       ├── ParameterEncoding.swift
│       │       ├── Protected.swift
│       │       ├── RedirectHandler.swift
│       │       ├── Request.swift
│       │       ├── RequestInterceptor.swift
│       │       ├── RequestTaskMap.swift
│       │       ├── Response.swift
│       │       ├── ResponseSerialization.swift
│       │       ├── Result+Alamofire.swift
│       │       ├── RetryPolicy.swift
│       │       ├── ServerTrustEvaluation.swift
│       │       ├── Session.swift
│       │       ├── SessionDelegate.swift
│       │       ├── StringEncoding+Alamofire.swift
│       │       ├── URLConvertible+URLRequestConvertible.swift
│       │       ├── URLEncodedFormEncoder.swift
│       │       ├── URLRequest+Alamofire.swift
│       │       ├── URLSessionConfiguration+Alamofire.swift
│       │       └── Validation.swift
│       ├── Alamofire.xcodeproj/
│       │   └── project.pbxproj
│       ├── FDFullscreenPopGesture/
│       │   ├── FDFullscreenPopGesture/
│       │   │   ├── UINavigationController+FDFullscreenPopGesture.h
│       │   │   └── UINavigationController+FDFullscreenPopGesture.m
│       │   ├── LICENSE
│       │   └── README.md
│       ├── FDFullscreenPopGesture.xcodeproj/
│       │   └── project.pbxproj
│       ├── HandyJSON/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Source/
│       │       ├── AnyExtensions.swift
│       │       ├── BuiltInBasicType.swift
│       │       ├── BuiltInBridgeType.swift
│       │       ├── CBridge.swift
│       │       ├── Configuration.swift
│       │       ├── ContextDescriptorType.swift
│       │       ├── CustomDateFormatTransform.swift
│       │       ├── DataTransform.swift
│       │       ├── DateFormatterTransform.swift
│       │       ├── DateTransform.swift
│       │       ├── Deserializer.swift
│       │       ├── EnumTransform.swift
│       │       ├── EnumType.swift
│       │       ├── Export.swift
│       │       ├── ExtendCustomBasicType.swift
│       │       ├── ExtendCustomModelType.swift
│       │       ├── FieldDescriptor.swift
│       │       ├── HandyJSON.h
│       │       ├── HelpingMapper.swift
│       │       ├── HexColorTransform.swift
│       │       ├── ISO8601DateTransform.swift
│       │       ├── Logger.swift
│       │       ├── MangledName.swift
│       │       ├── Measuable.swift
│       │       ├── Metadata.swift
│       │       ├── NSDecimalNumberTransform.swift
│       │       ├── OtherExtension.swift
│       │       ├── PointerType.swift
│       │       ├── Properties.swift
│       │       ├── PropertyInfo.swift
│       │       ├── ReflectionHelper.swift
│       │       ├── Serializer.swift
│       │       ├── TransformOf.swift
│       │       ├── TransformType.swift
│       │       ├── Transformable.swift
│       │       └── URLTransform.swift
│       ├── HandyJSON.xcodeproj/
│       │   └── project.pbxproj
│       ├── IGListDiffKit/
│       │   ├── LICENSE.md
│       │   ├── README.md
│       │   └── Source/
│       │       └── IGListDiffKit/
│       │           ├── IGListAssert.h
│       │           ├── IGListBatchUpdateData.h
│       │           ├── IGListBatchUpdateData.mm
│       │           ├── IGListCompatibility.h
│       │           ├── IGListDiff.h
│       │           ├── IGListDiff.mm
│       │           ├── IGListDiffKit.h
│       │           ├── IGListDiffable.h
│       │           ├── IGListExperiments.h
│       │           ├── IGListIndexPathResult.h
│       │           ├── IGListIndexPathResult.m
│       │           ├── IGListIndexSetResult.h
│       │           ├── IGListIndexSetResult.m
│       │           ├── IGListMacros.h
│       │           ├── IGListMoveIndex.h
│       │           ├── IGListMoveIndex.m
│       │           ├── IGListMoveIndexPath.h
│       │           ├── IGListMoveIndexPath.m
│       │           ├── Internal/
│       │           │   ├── IGListIndexPathResultInternal.h
│       │           │   ├── IGListIndexSetResultInternal.h
│       │           │   ├── IGListMoveIndexInternal.h
│       │           │   └── IGListMoveIndexPathInternal.h
│       │           ├── NSNumber+IGListDiffable.h
│       │           ├── NSNumber+IGListDiffable.m
│       │           ├── NSString+IGListDiffable.h
│       │           └── NSString+IGListDiffable.m
│       ├── IGListDiffKit.xcodeproj/
│       │   └── project.pbxproj
│       ├── IGListKit/
│       │   ├── LICENSE.md
│       │   ├── README.md
│       │   └── Source/
│       │       ├── IGListDiffKit/
│       │       │   └── Internal/
│       │       │       ├── IGListIndexPathResultInternal.h
│       │       │       ├── IGListIndexSetResultInternal.h
│       │       │       ├── IGListMoveIndexInternal.h
│       │       │       └── IGListMoveIndexPathInternal.h
│       │       └── IGListKit/
│       │           ├── IGListAdapter.h
│       │           ├── IGListAdapter.m
│       │           ├── IGListAdapterDataSource.h
│       │           ├── IGListAdapterDelegate.h
│       │           ├── IGListAdapterMoveDelegate.h
│       │           ├── IGListAdapterPerformanceDelegate.h
│       │           ├── IGListAdapterUpdateListener.h
│       │           ├── IGListAdapterUpdater.h
│       │           ├── IGListAdapterUpdater.m
│       │           ├── IGListAdapterUpdaterDelegate.h
│       │           ├── IGListBatchContext.h
│       │           ├── IGListBindable.h
│       │           ├── IGListBindingSectionController.h
│       │           ├── IGListBindingSectionController.m
│       │           ├── IGListBindingSectionControllerDataSource.h
│       │           ├── IGListBindingSectionControllerSelectionDelegate.h
│       │           ├── IGListCollectionContext.h
│       │           ├── IGListCollectionScrollingTraits.h
│       │           ├── IGListCollectionView.h
│       │           ├── IGListCollectionView.m
│       │           ├── IGListCollectionViewDelegateLayout.h
│       │           ├── IGListCollectionViewLayout.h
│       │           ├── IGListCollectionViewLayout.mm
│       │           ├── IGListCollectionViewLayoutCompatible.h
│       │           ├── IGListDisplayDelegate.h
│       │           ├── IGListGenericSectionController.h
│       │           ├── IGListGenericSectionController.m
│       │           ├── IGListKit.h
│       │           ├── IGListReloadDataUpdater.h
│       │           ├── IGListReloadDataUpdater.m
│       │           ├── IGListScrollDelegate.h
│       │           ├── IGListSectionController.h
│       │           ├── IGListSectionController.m
│       │           ├── IGListSingleSectionController.h
│       │           ├── IGListSingleSectionController.m
│       │           ├── IGListSupplementaryViewSource.h
│       │           ├── IGListTransitionDelegate.h
│       │           ├── IGListUpdatingDelegate.h
│       │           ├── IGListWorkingRangeDelegate.h
│       │           └── Internal/
│       │               ├── IGListAdapter+DebugDescription.h
│       │               ├── IGListAdapter+DebugDescription.m
│       │               ├── IGListAdapter+UICollectionView.h
│       │               ├── IGListAdapter+UICollectionView.m
│       │               ├── IGListAdapterInternal.h
│       │               ├── IGListAdapterProxy.h
│       │               ├── IGListAdapterProxy.m
│       │               ├── IGListAdapterUpdater+DebugDescription.h
│       │               ├── IGListAdapterUpdater+DebugDescription.m
│       │               ├── IGListAdapterUpdaterInternal.h
│       │               ├── IGListArrayUtilsInternal.h
│       │               ├── IGListBatchUpdateData+DebugDescription.h
│       │               ├── IGListBatchUpdateData+DebugDescription.m
│       │               ├── IGListBatchUpdateState.h
│       │               ├── IGListBatchUpdates.h
│       │               ├── IGListBatchUpdates.m
│       │               ├── IGListBindingSectionController+DebugDescription.h
│       │               ├── IGListBindingSectionController+DebugDescription.m
│       │               ├── IGListCollectionViewLayoutInternal.h
│       │               ├── IGListDebugger.h
│       │               ├── IGListDebugger.m
│       │               ├── IGListDebuggingUtilities.h
│       │               ├── IGListDebuggingUtilities.m
│       │               ├── IGListDisplayHandler.h
│       │               ├── IGListDisplayHandler.m
│       │               ├── IGListReloadIndexPath.h
│       │               ├── IGListReloadIndexPath.m
│       │               ├── IGListSectionControllerInternal.h
│       │               ├── IGListSectionMap+DebugDescription.h
│       │               ├── IGListSectionMap+DebugDescription.m
│       │               ├── IGListSectionMap.h
│       │               ├── IGListSectionMap.m
│       │               ├── IGListWorkingRangeHandler.h
│       │               ├── IGListWorkingRangeHandler.mm
│       │               ├── UICollectionView+DebugDescription.h
│       │               ├── UICollectionView+DebugDescription.m
│       │               ├── UICollectionView+IGListBatchUpdateData.h
│       │               ├── UICollectionView+IGListBatchUpdateData.m
│       │               ├── UICollectionViewLayout+InteractiveReordering.h
│       │               ├── UICollectionViewLayout+InteractiveReordering.m
│       │               ├── UIScrollView+IGListKit.h
│       │               └── UIScrollView+IGListKit.m
│       ├── IGListKit.xcodeproj/
│       │   └── project.pbxproj
│       ├── IQKeyboardManagerSwift/
│       │   ├── IQKeyboardManagerSwift/
│       │   │   ├── Categories/
│       │   │   │   ├── IQNSArray+Sort.swift
│       │   │   │   ├── IQUIScrollView+Additions.swift
│       │   │   │   ├── IQUITextFieldView+Additions.swift
│       │   │   │   ├── IQUIView+Hierarchy.swift
│       │   │   │   └── IQUIViewController+Additions.swift
│       │   │   ├── Constants/
│       │   │   │   ├── IQKeyboardManagerConstants.swift
│       │   │   │   └── IQKeyboardManagerConstantsInternal.swift
│       │   │   ├── IQKeyboardManager+Debug.swift
│       │   │   ├── IQKeyboardManager+Internal.swift
│       │   │   ├── IQKeyboardManager+OrientationNotification.swift
│       │   │   ├── IQKeyboardManager+Position.swift
│       │   │   ├── IQKeyboardManager+Toolbar.swift
│       │   │   ├── IQKeyboardManager+UIKeyboardNotification.swift
│       │   │   ├── IQKeyboardManager+UITextFieldViewNotification.swift
│       │   │   ├── IQKeyboardManager.swift
│       │   │   ├── IQKeyboardReturnKeyHandler.swift
│       │   │   ├── IQTextView/
│       │   │   │   └── IQTextView.swift
│       │   │   └── IQToolbar/
│       │   │       ├── IQBarButtonItem.swift
│       │   │       ├── IQInvocation.swift
│       │   │       ├── IQPreviousNextView.swift
│       │   │       ├── IQTitleBarButtonItem.swift
│       │   │       ├── IQToolbar.swift
│       │   │       └── IQUIView+IQKeyboardToolbar.swift
│       │   ├── LICENSE.md
│       │   └── README.md
│       ├── IQKeyboardManagerSwift.xcodeproj/
│       │   └── project.pbxproj
│       ├── Kingfisher/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Sources/
│       │       ├── Cache/
│       │       │   ├── CacheSerializer.swift
│       │       │   ├── DiskStorage.swift
│       │       │   ├── FormatIndicatedCacheSerializer.swift
│       │       │   ├── ImageCache.swift
│       │       │   ├── MemoryStorage.swift
│       │       │   └── Storage.swift
│       │       ├── Extensions/
│       │       │   ├── ImageView+Kingfisher.swift
│       │       │   ├── NSButton+Kingfisher.swift
│       │       │   ├── NSTextAttachment+Kingfisher.swift
│       │       │   ├── TVMonogramView+Kingfisher.swift
│       │       │   ├── UIButton+Kingfisher.swift
│       │       │   └── WKInterfaceImage+Kingfisher.swift
│       │       ├── General/
│       │       │   ├── ImageSource/
│       │       │   │   ├── AVAssetImageDataProvider.swift
│       │       │   │   ├── ImageDataProvider.swift
│       │       │   │   ├── Resource.swift
│       │       │   │   └── Source.swift
│       │       │   ├── KF.swift
│       │       │   ├── KFOptionsSetter.swift
│       │       │   ├── Kingfisher.swift
│       │       │   ├── KingfisherError.swift
│       │       │   ├── KingfisherManager.swift
│       │       │   └── KingfisherOptionsInfo.swift
│       │       ├── Image/
│       │       │   ├── Filter.swift
│       │       │   ├── GIFAnimatedImage.swift
│       │       │   ├── GraphicsContext.swift
│       │       │   ├── Image.swift
│       │       │   ├── ImageDrawing.swift
│       │       │   ├── ImageFormat.swift
│       │       │   ├── ImageProcessor.swift
│       │       │   ├── ImageProgressive.swift
│       │       │   ├── ImageTransition.swift
│       │       │   └── Placeholder.swift
│       │       ├── Networking/
│       │       │   ├── AuthenticationChallengeResponsable.swift
│       │       │   ├── ImageDataProcessor.swift
│       │       │   ├── ImageDownloader.swift
│       │       │   ├── ImageDownloaderDelegate.swift
│       │       │   ├── ImageModifier.swift
│       │       │   ├── ImagePrefetcher.swift
│       │       │   ├── RedirectHandler.swift
│       │       │   ├── RequestModifier.swift
│       │       │   ├── RetryStrategy.swift
│       │       │   ├── SessionDataTask.swift
│       │       │   └── SessionDelegate.swift
│       │       ├── SwiftUI/
│       │       │   ├── ImageBinder.swift
│       │       │   ├── KFImage.swift
│       │       │   └── KFImageOptions.swift
│       │       ├── Utility/
│       │       │   ├── Box.swift
│       │       │   ├── CallbackQueue.swift
│       │       │   ├── Delegate.swift
│       │       │   ├── ExtensionHelpers.swift
│       │       │   ├── Result.swift
│       │       │   ├── Runtime.swift
│       │       │   ├── SizeExtensions.swift
│       │       │   └── String+MD5.swift
│       │       └── Views/
│       │           ├── AnimatedImageView.swift
│       │           └── Indicator.swift
│       ├── Kingfisher.xcodeproj/
│       │   └── project.pbxproj
│       ├── Localize-Swift/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Sources/
│       │       ├── Localize.swift
│       │       ├── Localize_Swift.h
│       │       ├── String+LocalizeBundle.swift
│       │       ├── String+LocalizeTableName.swift
│       │       ├── String+LocalizedBundleTableName.swift
│       │       └── UI/
│       │           └── IBDesignable+Localize.swift
│       ├── Localize-Swift.xcodeproj/
│       │   └── project.pbxproj
│       ├── LookinServer/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Src/
│       │       ├── Server/
│       │       │   ├── Category/
│       │       │   │   ├── CALayer+LookinServer.h
│       │       │   │   ├── CALayer+LookinServer.m
│       │       │   │   ├── NSObject+LookinServer.h
│       │       │   │   ├── NSObject+LookinServer.m
│       │       │   │   ├── UIBlurEffect+LookinServer.h
│       │       │   │   ├── UIBlurEffect+LookinServer.m
│       │       │   │   ├── UIColor+LookinServer.h
│       │       │   │   ├── UIColor+LookinServer.m
│       │       │   │   ├── UIGestureRecognizer+LookinServer.h
│       │       │   │   ├── UIGestureRecognizer+LookinServer.m
│       │       │   │   ├── UIImage+LookinServer.h
│       │       │   │   ├── UIImage+LookinServer.m
│       │       │   │   ├── UIImageView+LookinServer.h
│       │       │   │   ├── UIImageView+LookinServer.m
│       │       │   │   ├── UILabel+LookinServer.h
│       │       │   │   ├── UILabel+LookinServer.m
│       │       │   │   ├── UITableView+LookinServer.h
│       │       │   │   ├── UITableView+LookinServer.m
│       │       │   │   ├── UITextField+LookinServer.h
│       │       │   │   ├── UITextField+LookinServer.m
│       │       │   │   ├── UITextView+LookinServer.h
│       │       │   │   ├── UITextView+LookinServer.m
│       │       │   │   ├── UIView+LookinServer.h
│       │       │   │   ├── UIView+LookinServer.m
│       │       │   │   ├── UIViewController+LookinServer.h
│       │       │   │   ├── UIViewController+LookinServer.m
│       │       │   │   ├── UIVisualEffectView+LookinServer.h
│       │       │   │   └── UIVisualEffectView+LookinServer.m
│       │       │   ├── Connection/
│       │       │   │   ├── LKS_ConnectionManager.h
│       │       │   │   ├── LKS_ConnectionManager.m
│       │       │   │   ├── LKS_RequestHandler.h
│       │       │   │   ├── LKS_RequestHandler.m
│       │       │   │   └── RequestHandler/
│       │       │   │       ├── LKS_AttrModificationHandler.h
│       │       │   │       ├── LKS_AttrModificationHandler.m
│       │       │   │       ├── LKS_AttrModificationPatchHandler.h
│       │       │   │       ├── LKS_AttrModificationPatchHandler.m
│       │       │   │       ├── LKS_HierarchyDetailsHandler.h
│       │       │   │       └── LKS_HierarchyDetailsHandler.m
│       │       │   ├── Inspect/
│       │       │   │   ├── LKS_LocalInspectManager.h
│       │       │   │   ├── LKS_LocalInspectManager.m
│       │       │   │   ├── LKS_LocalInspectPanelLabelView.h
│       │       │   │   ├── LKS_LocalInspectPanelLabelView.m
│       │       │   │   ├── LKS_LocalInspectViewController.h
│       │       │   │   └── LKS_LocalInspectViewController.m
│       │       │   ├── LookinServer.h
│       │       │   ├── Others/
│       │       │   │   ├── LKS_AttrGroupsMaker.h
│       │       │   │   ├── LKS_AttrGroupsMaker.m
│       │       │   │   ├── LKS_EventHandlerMaker.h
│       │       │   │   ├── LKS_EventHandlerMaker.m
│       │       │   │   ├── LKS_ExportManager.h
│       │       │   │   ├── LKS_ExportManager.m
│       │       │   │   ├── LKS_Helper.h
│       │       │   │   ├── LKS_Helper.m
│       │       │   │   ├── LKS_HierarchyDisplayItemsMaker.h
│       │       │   │   ├── LKS_HierarchyDisplayItemsMaker.m
│       │       │   │   ├── LKS_MethodTraceManager.h
│       │       │   │   ├── LKS_MethodTraceManager.m
│       │       │   │   ├── LKS_ObjectRegistry.h
│       │       │   │   ├── LKS_ObjectRegistry.m
│       │       │   │   ├── LKS_TraceManager.h
│       │       │   │   ├── LKS_TraceManager.m
│       │       │   │   └── LookinServerDefines.h
│       │       │   └── Perspective/
│       │       │       ├── LKS_PerspectiveDataSource.h
│       │       │       ├── LKS_PerspectiveDataSource.m
│       │       │       ├── LKS_PerspectiveHierarchyCell.h
│       │       │       ├── LKS_PerspectiveHierarchyCell.m
│       │       │       ├── LKS_PerspectiveHierarchyView.h
│       │       │       ├── LKS_PerspectiveHierarchyView.m
│       │       │       ├── LKS_PerspectiveItemLayer.h
│       │       │       ├── LKS_PerspectiveItemLayer.m
│       │       │       ├── LKS_PerspectiveLayer.h
│       │       │       ├── LKS_PerspectiveLayer.m
│       │       │       ├── LKS_PerspectiveManager.h
│       │       │       ├── LKS_PerspectiveManager.m
│       │       │       ├── LKS_PerspectiveToolbarButtons.h
│       │       │       ├── LKS_PerspectiveToolbarButtons.m
│       │       │       ├── LKS_PerspectiveViewController.h
│       │       │       └── LKS_PerspectiveViewController.m
│       │       └── Shared/
│       │           ├── Category/
│       │           │   ├── CALayer+Lookin.h
│       │           │   ├── CALayer+Lookin.m
│       │           │   ├── NSArray+Lookin.h
│       │           │   ├── NSArray+Lookin.m
│       │           │   ├── NSObject+Lookin.h
│       │           │   ├── NSObject+Lookin.m
│       │           │   ├── NSSet+Lookin.h
│       │           │   ├── NSSet+Lookin.m
│       │           │   ├── NSString+Lookin.h
│       │           │   └── NSString+Lookin.m
│       │           ├── LookinAppInfo.h
│       │           ├── LookinAppInfo.m
│       │           ├── LookinAttrIdentifiers.h
│       │           ├── LookinAttrIdentifiers.m
│       │           ├── LookinAttrType.h
│       │           ├── LookinAttribute.h
│       │           ├── LookinAttribute.m
│       │           ├── LookinAttributeModification.h
│       │           ├── LookinAttributeModification.m
│       │           ├── LookinAttributesGroup.h
│       │           ├── LookinAttributesGroup.m
│       │           ├── LookinAttributesSection.h
│       │           ├── LookinAttributesSection.m
│       │           ├── LookinAutoLayoutConstraint.h
│       │           ├── LookinAutoLayoutConstraint.m
│       │           ├── LookinCodingValueType.h
│       │           ├── LookinConnectionAttachment.h
│       │           ├── LookinConnectionAttachment.m
│       │           ├── LookinConnectionResponseAttachment.h
│       │           ├── LookinConnectionResponseAttachment.m
│       │           ├── LookinDashboardBlueprint.h
│       │           ├── LookinDashboardBlueprint.m
│       │           ├── LookinDefines.h
│       │           ├── LookinDisplayItem.h
│       │           ├── LookinDisplayItem.m
│       │           ├── LookinDisplayItemDetail.h
│       │           ├── LookinDisplayItemDetail.m
│       │           ├── LookinEventHandler.h
│       │           ├── LookinEventHandler.m
│       │           ├── LookinHierarchyFile.h
│       │           ├── LookinHierarchyFile.m
│       │           ├── LookinHierarchyInfo.h
│       │           ├── LookinHierarchyInfo.m
│       │           ├── LookinIvarTrace.h
│       │           ├── LookinIvarTrace.m
│       │           ├── LookinMethodTraceRecord.h
│       │           ├── LookinMethodTraceRecord.m
│       │           ├── LookinObject.h
│       │           ├── LookinObject.m
│       │           ├── LookinScreenshotFetchManager.h
│       │           ├── LookinStaticAsyncUpdateTask.h
│       │           ├── LookinStaticAsyncUpdateTask.m
│       │           ├── LookinTuple.h
│       │           ├── LookinTuple.m
│       │           ├── LookinWeakContainer.h
│       │           ├── LookinWeakContainer.m
│       │           ├── Message/
│       │           │   ├── LookinMsgAttribute.h
│       │           │   ├── LookinMsgAttribute.m
│       │           │   ├── LookinMsgTargetAction.h
│       │           │   └── LookinMsgTargetAction.m
│       │           └── Peertalk/
│       │               ├── Lookin_PTChannel.h
│       │               ├── Lookin_PTChannel.m
│       │               ├── Lookin_PTPrivate.h
│       │               ├── Lookin_PTProtocol.h
│       │               ├── Lookin_PTProtocol.m
│       │               ├── Lookin_PTUSBHub.h
│       │               ├── Lookin_PTUSBHub.m
│       │               └── Peertalk.h
│       ├── LookinServer.xcodeproj/
│       │   └── project.pbxproj
│       ├── MBProgressHUD/
│       │   ├── LICENSE
│       │   ├── MBProgressHUD.h
│       │   ├── MBProgressHUD.m
│       │   └── README.mdown
│       ├── MBProgressHUD.xcodeproj/
│       │   └── project.pbxproj
│       ├── MJRefresh/
│       │   ├── LICENSE
│       │   ├── MJRefresh/
│       │   │   ├── Base/
│       │   │   │   ├── MJRefreshAutoFooter.h
│       │   │   │   ├── MJRefreshAutoFooter.m
│       │   │   │   ├── MJRefreshBackFooter.h
│       │   │   │   ├── MJRefreshBackFooter.m
│       │   │   │   ├── MJRefreshComponent.h
│       │   │   │   ├── MJRefreshComponent.m
│       │   │   │   ├── MJRefreshFooter.h
│       │   │   │   ├── MJRefreshFooter.m
│       │   │   │   ├── MJRefreshHeader.h
│       │   │   │   ├── MJRefreshHeader.m
│       │   │   │   ├── MJRefreshTrailer.h
│       │   │   │   └── MJRefreshTrailer.m
│       │   │   ├── Custom/
│       │   │   │   ├── Footer/
│       │   │   │   │   ├── Auto/
│       │   │   │   │   │   ├── MJRefreshAutoGifFooter.h
│       │   │   │   │   │   ├── MJRefreshAutoGifFooter.m
│       │   │   │   │   │   ├── MJRefreshAutoNormalFooter.h
│       │   │   │   │   │   ├── MJRefreshAutoNormalFooter.m
│       │   │   │   │   │   ├── MJRefreshAutoStateFooter.h
│       │   │   │   │   │   └── MJRefreshAutoStateFooter.m
│       │   │   │   │   └── Back/
│       │   │   │   │       ├── MJRefreshBackGifFooter.h
│       │   │   │   │       ├── MJRefreshBackGifFooter.m
│       │   │   │   │       ├── MJRefreshBackNormalFooter.h
│       │   │   │   │       ├── MJRefreshBackNormalFooter.m
│       │   │   │   │       ├── MJRefreshBackStateFooter.h
│       │   │   │   │       └── MJRefreshBackStateFooter.m
│       │   │   │   ├── Header/
│       │   │   │   │   ├── MJRefreshGifHeader.h
│       │   │   │   │   ├── MJRefreshGifHeader.m
│       │   │   │   │   ├── MJRefreshNormalHeader.h
│       │   │   │   │   ├── MJRefreshNormalHeader.m
│       │   │   │   │   ├── MJRefreshStateHeader.h
│       │   │   │   │   └── MJRefreshStateHeader.m
│       │   │   │   └── Trailer/
│       │   │   │       ├── MJRefreshNormalTrailer.h
│       │   │   │       ├── MJRefreshNormalTrailer.m
│       │   │   │       ├── MJRefreshStateTrailer.h
│       │   │   │       └── MJRefreshStateTrailer.m
│       │   │   ├── MJRefresh.bundle/
│       │   │   │   ├── en.lproj/
│       │   │   │   │   └── Localizable.strings
│       │   │   │   ├── ko.lproj/
│       │   │   │   │   └── Localizable.strings
│       │   │   │   ├── ru.lproj/
│       │   │   │   │   └── Localizable.strings
│       │   │   │   ├── uk.lproj/
│       │   │   │   │   └── Localizable.strings
│       │   │   │   ├── zh-Hans.lproj/
│       │   │   │   │   └── Localizable.strings
│       │   │   │   └── zh-Hant.lproj/
│       │   │   │       └── Localizable.strings
│       │   │   ├── MJRefresh.h
│       │   │   ├── MJRefreshConfig.h
│       │   │   ├── MJRefreshConfig.m
│       │   │   ├── MJRefreshConst.h
│       │   │   ├── MJRefreshConst.m
│       │   │   ├── NSBundle+MJRefresh.h
│       │   │   ├── NSBundle+MJRefresh.m
│       │   │   ├── UICollectionViewLayout+MJRefresh.h
│       │   │   ├── UICollectionViewLayout+MJRefresh.m
│       │   │   ├── UIScrollView+MJExtension.h
│       │   │   ├── UIScrollView+MJExtension.m
│       │   │   ├── UIScrollView+MJRefresh.h
│       │   │   ├── UIScrollView+MJRefresh.m
│       │   │   ├── UIView+MJExtension.h
│       │   │   └── UIView+MJExtension.m
│       │   └── README.md
│       ├── MJRefresh.xcodeproj/
│       │   └── project.pbxproj
│       ├── Moya/
│       │   ├── License.md
│       │   ├── Readme.md
│       │   └── Sources/
│       │       ├── Moya/
│       │       │   ├── AnyEncodable.swift
│       │       │   ├── Atomic.swift
│       │       │   ├── Cancellable.swift
│       │       │   ├── Endpoint.swift
│       │       │   ├── Image.swift
│       │       │   ├── Moya+Alamofire.swift
│       │       │   ├── MoyaError.swift
│       │       │   ├── MoyaProvider+Defaults.swift
│       │       │   ├── MoyaProvider+Internal.swift
│       │       │   ├── MoyaProvider.swift
│       │       │   ├── MultiTarget.swift
│       │       │   ├── MultipartFormData.swift
│       │       │   ├── Plugin.swift
│       │       │   ├── Plugins/
│       │       │   │   ├── AccessTokenPlugin.swift
│       │       │   │   ├── CredentialsPlugin.swift
│       │       │   │   ├── NetworkActivityPlugin.swift
│       │       │   │   └── NetworkLoggerPlugin.swift
│       │       │   ├── RequestTypeWrapper.swift
│       │       │   ├── Response.swift
│       │       │   ├── TargetType.swift
│       │       │   ├── Task.swift
│       │       │   ├── URL+Moya.swift
│       │       │   ├── URLRequest+Encoding.swift
│       │       │   └── ValidationType.swift
│       │       └── RxMoya/
│       │           ├── MoyaProvider+Rx.swift
│       │           ├── Observable+Response.swift
│       │           └── Single+Response.swift
│       ├── Moya.xcodeproj/
│       │   └── project.pbxproj
│       ├── NSObject+Rx/
│       │   ├── HasDisposeBag.swift
│       │   ├── LICENSE
│       │   ├── NSObject+Rx.swift
│       │   └── Readme.md
│       ├── NSObject+Rx.xcodeproj/
│       │   └── project.pbxproj
│       ├── Pods.xcodeproj/
│       │   └── project.pbxproj
│       ├── R.swift/
│       │   ├── License
│       │   └── rswift
│       ├── R.swift.Library/
│       │   ├── Library/
│       │   │   ├── Core/
│       │   │   │   ├── ColorResource.swift
│       │   │   │   ├── FileResource.swift
│       │   │   │   ├── FontResource.swift
│       │   │   │   ├── Identifier.swift
│       │   │   │   ├── ImageResource.swift
│       │   │   │   ├── NibResource.swift
│       │   │   │   ├── ReuseIdentifierProtocol.swift
│       │   │   │   ├── StoryboardResource.swift
│       │   │   │   ├── StoryboardSegueIdentifierProtocol.swift
│       │   │   │   ├── StoryboardViewControllerResource.swift
│       │   │   │   ├── StringResource.swift
│       │   │   │   └── Validatable.swift
│       │   │   ├── Foundation/
│       │   │   │   ├── Bundle+FileResource.swift
│       │   │   │   └── Data+FileResource.swift
│       │   │   └── UIKit/
│       │   │       ├── NibResource+UIKit.swift
│       │   │       ├── StoryboardResourceWithInitialController+UIKit.swift
│       │   │       ├── TypedStoryboardSegueInfo+UIStoryboardSegue.swift
│       │   │       ├── UICollectionView+ReuseIdentifierProtocol.swift
│       │   │       ├── UIColor+ColorResource.swift
│       │   │       ├── UIFont+FontResource.swift
│       │   │       ├── UIImage+ImageResource.swift
│       │   │       ├── UINib+NibResource.swift
│       │   │       ├── UIStoryboard+StoryboardResource.swift
│       │   │       ├── UIStoryboard+StoryboardViewControllerResource.swift
│       │   │       ├── UITableView+ReuseIdentifierProtocol.swift
│       │   │       ├── UIViewController+NibResource.swift
│       │   │       └── UIViewController+StoryboardSegueIdentifierProtocol.swift
│       │   ├── License
│       │   └── Readme.md
│       ├── R.swift.Library.xcodeproj/
│       │   └── project.pbxproj
│       ├── R.swift.xcodeproj/
│       │   └── project.pbxproj
│       ├── ReachabilitySwift/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Sources/
│       │       └── Reachability.swift
│       ├── ReachabilitySwift.xcodeproj/
│       │   └── project.pbxproj
│       ├── RxCocoa/
│       │   ├── LICENSE.md
│       │   ├── Platform/
│       │   │   ├── DataStructures/
│       │   │   │   ├── Bag.swift
│       │   │   │   ├── InfiniteSequence.swift
│       │   │   │   ├── PriorityQueue.swift
│       │   │   │   └── Queue.swift
│       │   │   ├── DispatchQueue+Extensions.swift
│       │   │   ├── Platform.Darwin.swift
│       │   │   ├── Platform.Linux.swift
│       │   │   └── RecursiveLock.swift
│       │   ├── README.md
│       │   └── RxCocoa/
│       │       ├── Common/
│       │       │   ├── ControlTarget.swift
│       │       │   ├── DelegateProxy.swift
│       │       │   ├── DelegateProxyType.swift
│       │       │   ├── Infallible+Bind.swift
│       │       │   ├── Observable+Bind.swift
│       │       │   ├── RxCocoaObjCRuntimeError+Extensions.swift
│       │       │   ├── RxTarget.swift
│       │       │   ├── SectionedViewDataSourceType.swift
│       │       │   └── TextInput.swift
│       │       ├── Foundation/
│       │       │   ├── KVORepresentable+CoreGraphics.swift
│       │       │   ├── KVORepresentable+Swift.swift
│       │       │   ├── KVORepresentable.swift
│       │       │   ├── NSObject+Rx+KVORepresentable.swift
│       │       │   ├── NSObject+Rx+RawRepresentable.swift
│       │       │   ├── NSObject+Rx.swift
│       │       │   ├── NotificationCenter+Rx.swift
│       │       │   └── URLSession+Rx.swift
│       │       ├── Runtime/
│       │       │   ├── _RX.m
│       │       │   ├── _RXDelegateProxy.m
│       │       │   ├── _RXKVOObserver.m
│       │       │   ├── _RXObjCRuntime.m
│       │       │   └── include/
│       │       │       ├── RxCocoaRuntime.h
│       │       │       ├── _RX.h
│       │       │       ├── _RXDelegateProxy.h
│       │       │       ├── _RXKVOObserver.h
│       │       │       └── _RXObjCRuntime.h
│       │       ├── RxCocoa.h
│       │       ├── RxCocoa.swift
│       │       ├── Traits/
│       │       │   ├── ControlEvent.swift
│       │       │   ├── ControlProperty.swift
│       │       │   ├── Driver/
│       │       │   │   ├── BehaviorRelay+Driver.swift
│       │       │   │   ├── ControlEvent+Driver.swift
│       │       │   │   ├── ControlProperty+Driver.swift
│       │       │   │   ├── Driver+Subscription.swift
│       │       │   │   ├── Driver.swift
│       │       │   │   └── ObservableConvertibleType+Driver.swift
│       │       │   ├── SharedSequence/
│       │       │   │   ├── ObservableConvertibleType+SharedSequence.swift
│       │       │   │   ├── SchedulerType+SharedSequence.swift
│       │       │   │   ├── SharedSequence+Concurrency.swift
│       │       │   │   ├── SharedSequence+Operators+arity.swift
│       │       │   │   ├── SharedSequence+Operators.swift
│       │       │   │   └── SharedSequence.swift
│       │       │   └── Signal/
│       │       │       ├── ControlEvent+Signal.swift
│       │       │       ├── ObservableConvertibleType+Signal.swift
│       │       │       ├── PublishRelay+Signal.swift
│       │       │       ├── Signal+Subscription.swift
│       │       │       └── Signal.swift
│       │       ├── iOS/
│       │       │   ├── DataSources/
│       │       │   │   ├── RxCollectionViewReactiveArrayDataSource.swift
│       │       │   │   ├── RxPickerViewAdapter.swift
│       │       │   │   └── RxTableViewReactiveArrayDataSource.swift
│       │       │   ├── Events/
│       │       │   │   └── ItemEvents.swift
│       │       │   ├── NSTextStorage+Rx.swift
│       │       │   ├── Protocols/
│       │       │   │   ├── RxCollectionViewDataSourceType.swift
│       │       │   │   ├── RxPickerViewDataSourceType.swift
│       │       │   │   └── RxTableViewDataSourceType.swift
│       │       │   ├── Proxies/
│       │       │   │   ├── RxCollectionViewDataSourcePrefetchingProxy.swift
│       │       │   │   ├── RxCollectionViewDataSourceProxy.swift
│       │       │   │   ├── RxCollectionViewDelegateProxy.swift
│       │       │   │   ├── RxNavigationControllerDelegateProxy.swift
│       │       │   │   ├── RxPickerViewDataSourceProxy.swift
│       │       │   │   ├── RxPickerViewDelegateProxy.swift
│       │       │   │   ├── RxScrollViewDelegateProxy.swift
│       │       │   │   ├── RxSearchBarDelegateProxy.swift
│       │       │   │   ├── RxSearchControllerDelegateProxy.swift
│       │       │   │   ├── RxTabBarControllerDelegateProxy.swift
│       │       │   │   ├── RxTabBarDelegateProxy.swift
│       │       │   │   ├── RxTableViewDataSourcePrefetchingProxy.swift
│       │       │   │   ├── RxTableViewDataSourceProxy.swift
│       │       │   │   ├── RxTableViewDelegateProxy.swift
│       │       │   │   ├── RxTextStorageDelegateProxy.swift
│       │       │   │   ├── RxTextViewDelegateProxy.swift
│       │       │   │   └── RxWKNavigationDelegateProxy.swift
│       │       │   ├── UIActivityIndicatorView+Rx.swift
│       │       │   ├── UIApplication+Rx.swift
│       │       │   ├── UIBarButtonItem+Rx.swift
│       │       │   ├── UIButton+Rx.swift
│       │       │   ├── UICollectionView+Rx.swift
│       │       │   ├── UIControl+Rx.swift
│       │       │   ├── UIDatePicker+Rx.swift
│       │       │   ├── UIGestureRecognizer+Rx.swift
│       │       │   ├── UINavigationController+Rx.swift
│       │       │   ├── UIPickerView+Rx.swift
│       │       │   ├── UIRefreshControl+Rx.swift
│       │       │   ├── UIScrollView+Rx.swift
│       │       │   ├── UISearchBar+Rx.swift
│       │       │   ├── UISearchController+Rx.swift
│       │       │   ├── UISegmentedControl+Rx.swift
│       │       │   ├── UISlider+Rx.swift
│       │       │   ├── UIStepper+Rx.swift
│       │       │   ├── UISwitch+Rx.swift
│       │       │   ├── UITabBar+Rx.swift
│       │       │   ├── UITabBarController+Rx.swift
│       │       │   ├── UITableView+Rx.swift
│       │       │   ├── UITextField+Rx.swift
│       │       │   ├── UITextView+Rx.swift
│       │       │   └── WKWebView+Rx.swift
│       │       └── macOS/
│       │           ├── NSButton+Rx.swift
│       │           ├── NSControl+Rx.swift
│       │           ├── NSSlider+Rx.swift
│       │           ├── NSTextField+Rx.swift
│       │           ├── NSTextView+Rx.swift
│       │           └── NSView+Rx.swift
│       ├── RxCocoa.xcodeproj/
│       │   └── project.pbxproj
│       ├── RxRelay/
│       │   ├── LICENSE.md
│       │   ├── README.md
│       │   └── RxRelay/
│       │       ├── BehaviorRelay.swift
│       │       ├── Observable+Bind.swift
│       │       ├── PublishRelay.swift
│       │       ├── ReplayRelay.swift
│       │       └── Utils.swift
│       ├── RxRelay.xcodeproj/
│       │   └── project.pbxproj
│       ├── RxSwift/
│       │   ├── LICENSE.md
│       │   ├── Platform/
│       │   │   ├── AtomicInt.swift
│       │   │   ├── DataStructures/
│       │   │   │   ├── Bag.swift
│       │   │   │   ├── InfiniteSequence.swift
│       │   │   │   ├── PriorityQueue.swift
│       │   │   │   └── Queue.swift
│       │   │   ├── DispatchQueue+Extensions.swift
│       │   │   ├── Platform.Darwin.swift
│       │   │   ├── Platform.Linux.swift
│       │   │   └── RecursiveLock.swift
│       │   ├── README.md
│       │   └── RxSwift/
│       │       ├── AnyObserver.swift
│       │       ├── Binder.swift
│       │       ├── Cancelable.swift
│       │       ├── Concurrency/
│       │       │   ├── AsyncLock.swift
│       │       │   ├── Lock.swift
│       │       │   ├── LockOwnerType.swift
│       │       │   ├── SynchronizedDisposeType.swift
│       │       │   ├── SynchronizedOnType.swift
│       │       │   └── SynchronizedUnsubscribeType.swift
│       │       ├── ConnectableObservableType.swift
│       │       ├── Date+Dispatch.swift
│       │       ├── Disposable.swift
│       │       ├── Disposables/
│       │       │   ├── AnonymousDisposable.swift
│       │       │   ├── BinaryDisposable.swift
│       │       │   ├── BooleanDisposable.swift
│       │       │   ├── CompositeDisposable.swift
│       │       │   ├── Disposables.swift
│       │       │   ├── DisposeBag.swift
│       │       │   ├── DisposeBase.swift
│       │       │   ├── NopDisposable.swift
│       │       │   ├── RefCountDisposable.swift
│       │       │   ├── ScheduledDisposable.swift
│       │       │   ├── SerialDisposable.swift
│       │       │   ├── SingleAssignmentDisposable.swift
│       │       │   └── SubscriptionDisposable.swift
│       │       ├── Errors.swift
│       │       ├── Event.swift
│       │       ├── Extensions/
│       │       │   └── Bag+Rx.swift
│       │       ├── GroupedObservable.swift
│       │       ├── ImmediateSchedulerType.swift
│       │       ├── Observable+Concurrency.swift
│       │       ├── Observable.swift
│       │       ├── ObservableConvertibleType.swift
│       │       ├── ObservableType+Extensions.swift
│       │       ├── ObservableType.swift
│       │       ├── Observables/
│       │       │   ├── AddRef.swift
│       │       │   ├── Amb.swift
│       │       │   ├── AsMaybe.swift
│       │       │   ├── AsSingle.swift
│       │       │   ├── Buffer.swift
│       │       │   ├── Catch.swift
│       │       │   ├── CombineLatest+Collection.swift
│       │       │   ├── CombineLatest+arity.swift
│       │       │   ├── CombineLatest.swift
│       │       │   ├── CompactMap.swift
│       │       │   ├── Concat.swift
│       │       │   ├── Create.swift
│       │       │   ├── Debounce.swift
│       │       │   ├── Debug.swift
│       │       │   ├── Decode.swift
│       │       │   ├── DefaultIfEmpty.swift
│       │       │   ├── Deferred.swift
│       │       │   ├── Delay.swift
│       │       │   ├── DelaySubscription.swift
│       │       │   ├── Dematerialize.swift
│       │       │   ├── DistinctUntilChanged.swift
│       │       │   ├── Do.swift
│       │       │   ├── ElementAt.swift
│       │       │   ├── Empty.swift
│       │       │   ├── Enumerated.swift
│       │       │   ├── Error.swift
│       │       │   ├── Filter.swift
│       │       │   ├── First.swift
│       │       │   ├── Generate.swift
│       │       │   ├── GroupBy.swift
│       │       │   ├── Just.swift
│       │       │   ├── Map.swift
│       │       │   ├── Materialize.swift
│       │       │   ├── Merge.swift
│       │       │   ├── Multicast.swift
│       │       │   ├── Never.swift
│       │       │   ├── ObserveOn.swift
│       │       │   ├── Optional.swift
│       │       │   ├── Producer.swift
│       │       │   ├── Range.swift
│       │       │   ├── Reduce.swift
│       │       │   ├── Repeat.swift
│       │       │   ├── RetryWhen.swift
│       │       │   ├── Sample.swift
│       │       │   ├── Scan.swift
│       │       │   ├── Sequence.swift
│       │       │   ├── ShareReplayScope.swift
│       │       │   ├── SingleAsync.swift
│       │       │   ├── Sink.swift
│       │       │   ├── Skip.swift
│       │       │   ├── SkipUntil.swift
│       │       │   ├── SkipWhile.swift
│       │       │   ├── StartWith.swift
│       │       │   ├── SubscribeOn.swift
│       │       │   ├── Switch.swift
│       │       │   ├── SwitchIfEmpty.swift
│       │       │   ├── Take.swift
│       │       │   ├── TakeLast.swift
│       │       │   ├── TakeWithPredicate.swift
│       │       │   ├── Throttle.swift
│       │       │   ├── Timeout.swift
│       │       │   ├── Timer.swift
│       │       │   ├── ToArray.swift
│       │       │   ├── Using.swift
│       │       │   ├── Window.swift
│       │       │   ├── WithLatestFrom.swift
│       │       │   ├── WithUnretained.swift
│       │       │   ├── Zip+Collection.swift
│       │       │   ├── Zip+arity.swift
│       │       │   └── Zip.swift
│       │       ├── ObserverType.swift
│       │       ├── Observers/
│       │       │   ├── AnonymousObserver.swift
│       │       │   ├── ObserverBase.swift
│       │       │   └── TailRecursiveSink.swift
│       │       ├── Reactive.swift
│       │       ├── Rx.swift
│       │       ├── RxMutableBox.swift
│       │       ├── SchedulerType.swift
│       │       ├── Schedulers/
│       │       │   ├── ConcurrentDispatchQueueScheduler.swift
│       │       │   ├── ConcurrentMainScheduler.swift
│       │       │   ├── CurrentThreadScheduler.swift
│       │       │   ├── HistoricalScheduler.swift
│       │       │   ├── HistoricalSchedulerTimeConverter.swift
│       │       │   ├── Internal/
│       │       │   │   ├── DispatchQueueConfiguration.swift
│       │       │   │   ├── InvocableScheduledItem.swift
│       │       │   │   ├── InvocableType.swift
│       │       │   │   ├── ScheduledItem.swift
│       │       │   │   └── ScheduledItemType.swift
│       │       │   ├── MainScheduler.swift
│       │       │   ├── OperationQueueScheduler.swift
│       │       │   ├── RecursiveScheduler.swift
│       │       │   ├── SchedulerServices+Emulation.swift
│       │       │   ├── SerialDispatchQueueScheduler.swift
│       │       │   ├── VirtualTimeConverterType.swift
│       │       │   └── VirtualTimeScheduler.swift
│       │       ├── Subjects/
│       │       │   ├── AsyncSubject.swift
│       │       │   ├── BehaviorSubject.swift
│       │       │   ├── PublishSubject.swift
│       │       │   ├── ReplaySubject.swift
│       │       │   └── SubjectType.swift
│       │       ├── SwiftSupport/
│       │       │   └── SwiftSupport.swift
│       │       └── Traits/
│       │           ├── Infallible/
│       │           │   ├── Infallible+CombineLatest+arity.swift
│       │           │   ├── Infallible+Concurrency.swift
│       │           │   ├── Infallible+Create.swift
│       │           │   ├── Infallible+Operators.swift
│       │           │   ├── Infallible+Zip+arity.swift
│       │           │   ├── Infallible.swift
│       │           │   └── ObservableConvertibleType+Infallible.swift
│       │           └── PrimitiveSequence/
│       │               ├── Completable+AndThen.swift
│       │               ├── Completable.swift
│       │               ├── Maybe.swift
│       │               ├── ObservableType+PrimitiveSequence.swift
│       │               ├── PrimitiveSequence+Concurrency.swift
│       │               ├── PrimitiveSequence+Zip+arity.swift
│       │               ├── PrimitiveSequence.swift
│       │               └── Single.swift
│       ├── RxSwift.xcodeproj/
│       │   └── project.pbxproj
│       ├── RxTheme/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Sources/
│       │       ├── Extensions/
│       │       │   ├── CALayer+Theme.swift
│       │       │   ├── CAShapeLayer+Theme.swift
│       │       │   ├── UIActivityIndicatorView+Theme.swift
│       │       │   ├── UIBarButtonItem+Theme.swift
│       │       │   ├── UIButton+Theme.swift
│       │       │   ├── UILabel+Theme.swift
│       │       │   ├── UINavigationBar+Theme.swift
│       │       │   ├── UIPageControl+Theme.swift
│       │       │   ├── UIProgressView+Theme.swift
│       │       │   ├── UISearchBar+Theme.swift
│       │       │   ├── UISegmentedControl+Theme.swift
│       │       │   ├── UISlider+Theme.swift
│       │       │   ├── UISwitch+Theme.swift
│       │       │   ├── UITAbleViewCell+Theme.swift
│       │       │   ├── UITabBar+Theme.swift
│       │       │   ├── UITableView+Theme.swift
│       │       │   ├── UITextField+Theme.swift
│       │       │   ├── UITextView+Theme.swift
│       │       │   ├── UIToolbar+Theme.swift
│       │       │   └── UIView+Theme.swift
│       │       ├── ThemeAttribute.swift
│       │       ├── ThemeProvider.swift
│       │       ├── ThemeProxy.swift
│       │       └── ThemeService.swift
│       ├── RxTheme.xcodeproj/
│       │   └── project.pbxproj
│       ├── SDWebImage/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   ├── SDWebImage/
│       │   │   ├── Core/
│       │   │   │   ├── NSButton+WebCache.h
│       │   │   │   ├── NSButton+WebCache.m
│       │   │   │   ├── NSData+ImageContentType.h
│       │   │   │   ├── NSData+ImageContentType.m
│       │   │   │   ├── NSImage+Compatibility.h
│       │   │   │   ├── NSImage+Compatibility.m
│       │   │   │   ├── SDAnimatedImage.h
│       │   │   │   ├── SDAnimatedImage.m
│       │   │   │   ├── SDAnimatedImagePlayer.h
│       │   │   │   ├── SDAnimatedImagePlayer.m
│       │   │   │   ├── SDAnimatedImageRep.h
│       │   │   │   ├── SDAnimatedImageRep.m
│       │   │   │   ├── SDAnimatedImageView+WebCache.h
│       │   │   │   ├── SDAnimatedImageView+WebCache.m
│       │   │   │   ├── SDAnimatedImageView.h
│       │   │   │   ├── SDAnimatedImageView.m
│       │   │   │   ├── SDDiskCache.h
│       │   │   │   ├── SDDiskCache.m
│       │   │   │   ├── SDGraphicsImageRenderer.h
│       │   │   │   ├── SDGraphicsImageRenderer.m
│       │   │   │   ├── SDImageAPNGCoder.h
│       │   │   │   ├── SDImageAPNGCoder.m
│       │   │   │   ├── SDImageAWebPCoder.h
│       │   │   │   ├── SDImageAWebPCoder.m
│       │   │   │   ├── SDImageCache.h
│       │   │   │   ├── SDImageCache.m
│       │   │   │   ├── SDImageCacheConfig.h
│       │   │   │   ├── SDImageCacheConfig.m
│       │   │   │   ├── SDImageCacheDefine.h
│       │   │   │   ├── SDImageCacheDefine.m
│       │   │   │   ├── SDImageCachesManager.h
│       │   │   │   ├── SDImageCachesManager.m
│       │   │   │   ├── SDImageCoder.h
│       │   │   │   ├── SDImageCoder.m
│       │   │   │   ├── SDImageCoderHelper.h
│       │   │   │   ├── SDImageCoderHelper.m
│       │   │   │   ├── SDImageCodersManager.h
│       │   │   │   ├── SDImageCodersManager.m
│       │   │   │   ├── SDImageFrame.h
│       │   │   │   ├── SDImageFrame.m
│       │   │   │   ├── SDImageGIFCoder.h
│       │   │   │   ├── SDImageGIFCoder.m
│       │   │   │   ├── SDImageGraphics.h
│       │   │   │   ├── SDImageGraphics.m
│       │   │   │   ├── SDImageHEICCoder.h
│       │   │   │   ├── SDImageHEICCoder.m
│       │   │   │   ├── SDImageIOAnimatedCoder.h
│       │   │   │   ├── SDImageIOAnimatedCoder.m
│       │   │   │   ├── SDImageIOCoder.h
│       │   │   │   ├── SDImageIOCoder.m
│       │   │   │   ├── SDImageLoader.h
│       │   │   │   ├── SDImageLoader.m
│       │   │   │   ├── SDImageLoadersManager.h
│       │   │   │   ├── SDImageLoadersManager.m
│       │   │   │   ├── SDImageTransformer.h
│       │   │   │   ├── SDImageTransformer.m
│       │   │   │   ├── SDMemoryCache.h
│       │   │   │   ├── SDMemoryCache.m
│       │   │   │   ├── SDWebImageCacheKeyFilter.h
│       │   │   │   ├── SDWebImageCacheKeyFilter.m
│       │   │   │   ├── SDWebImageCacheSerializer.h
│       │   │   │   ├── SDWebImageCacheSerializer.m
│       │   │   │   ├── SDWebImageCompat.h
│       │   │   │   ├── SDWebImageCompat.m
│       │   │   │   ├── SDWebImageDefine.h
│       │   │   │   ├── SDWebImageDefine.m
│       │   │   │   ├── SDWebImageDownloader.h
│       │   │   │   ├── SDWebImageDownloader.m
│       │   │   │   ├── SDWebImageDownloaderConfig.h
│       │   │   │   ├── SDWebImageDownloaderConfig.m
│       │   │   │   ├── SDWebImageDownloaderDecryptor.h
│       │   │   │   ├── SDWebImageDownloaderDecryptor.m
│       │   │   │   ├── SDWebImageDownloaderOperation.h
│       │   │   │   ├── SDWebImageDownloaderOperation.m
│       │   │   │   ├── SDWebImageDownloaderRequestModifier.h
│       │   │   │   ├── SDWebImageDownloaderRequestModifier.m
│       │   │   │   ├── SDWebImageDownloaderResponseModifier.h
│       │   │   │   ├── SDWebImageDownloaderResponseModifier.m
│       │   │   │   ├── SDWebImageError.h
│       │   │   │   ├── SDWebImageError.m
│       │   │   │   ├── SDWebImageIndicator.h
│       │   │   │   ├── SDWebImageIndicator.m
│       │   │   │   ├── SDWebImageManager.h
│       │   │   │   ├── SDWebImageManager.m
│       │   │   │   ├── SDWebImageOperation.h
│       │   │   │   ├── SDWebImageOperation.m
│       │   │   │   ├── SDWebImageOptionsProcessor.h
│       │   │   │   ├── SDWebImageOptionsProcessor.m
│       │   │   │   ├── SDWebImagePrefetcher.h
│       │   │   │   ├── SDWebImagePrefetcher.m
│       │   │   │   ├── SDWebImageTransition.h
│       │   │   │   ├── SDWebImageTransition.m
│       │   │   │   ├── UIButton+WebCache.h
│       │   │   │   ├── UIButton+WebCache.m
│       │   │   │   ├── UIImage+ExtendedCacheData.h
│       │   │   │   ├── UIImage+ExtendedCacheData.m
│       │   │   │   ├── UIImage+ForceDecode.h
│       │   │   │   ├── UIImage+ForceDecode.m
│       │   │   │   ├── UIImage+GIF.h
│       │   │   │   ├── UIImage+GIF.m
│       │   │   │   ├── UIImage+MemoryCacheCost.h
│       │   │   │   ├── UIImage+MemoryCacheCost.m
│       │   │   │   ├── UIImage+Metadata.h
│       │   │   │   ├── UIImage+Metadata.m
│       │   │   │   ├── UIImage+MultiFormat.h
│       │   │   │   ├── UIImage+MultiFormat.m
│       │   │   │   ├── UIImage+Transform.h
│       │   │   │   ├── UIImage+Transform.m
│       │   │   │   ├── UIImageView+HighlightedWebCache.h
│       │   │   │   ├── UIImageView+HighlightedWebCache.m
│       │   │   │   ├── UIImageView+WebCache.h
│       │   │   │   ├── UIImageView+WebCache.m
│       │   │   │   ├── UIView+WebCache.h
│       │   │   │   ├── UIView+WebCache.m
│       │   │   │   ├── UIView+WebCacheOperation.h
│       │   │   │   └── UIView+WebCacheOperation.m
│       │   │   └── Private/
│       │   │       ├── NSBezierPath+SDRoundedCorners.h
│       │   │       ├── NSBezierPath+SDRoundedCorners.m
│       │   │       ├── SDAssociatedObject.h
│       │   │       ├── SDAssociatedObject.m
│       │   │       ├── SDAsyncBlockOperation.h
│       │   │       ├── SDAsyncBlockOperation.m
│       │   │       ├── SDDeviceHelper.h
│       │   │       ├── SDDeviceHelper.m
│       │   │       ├── SDDisplayLink.h
│       │   │       ├── SDDisplayLink.m
│       │   │       ├── SDFileAttributeHelper.h
│       │   │       ├── SDFileAttributeHelper.m
│       │   │       ├── SDImageAssetManager.h
│       │   │       ├── SDImageAssetManager.m
│       │   │       ├── SDImageCachesManagerOperation.h
│       │   │       ├── SDImageCachesManagerOperation.m
│       │   │       ├── SDImageIOAnimatedCoderInternal.h
│       │   │       ├── SDInternalMacros.h
│       │   │       ├── SDInternalMacros.m
│       │   │       ├── SDWeakProxy.h
│       │   │       ├── SDWeakProxy.m
│       │   │       ├── SDWebImageTransitionInternal.h
│       │   │       ├── SDmetamacros.h
│       │   │       ├── UIColor+SDHexString.h
│       │   │       └── UIColor+SDHexString.m
│       │   └── WebImage/
│       │       └── SDWebImage.h
│       ├── SDWebImage.xcodeproj/
│       │   └── project.pbxproj
│       ├── SQLiteRepairKit/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── repair/
│       │       ├── SQLiteRepairKit.h
│       │       ├── sqliterk.c
│       │       ├── sqliterk.h
│       │       ├── sqliterk_api.c
│       │       ├── sqliterk_btree.c
│       │       ├── sqliterk_btree.h
│       │       ├── sqliterk_column.c
│       │       ├── sqliterk_column.h
│       │       ├── sqliterk_crypto.c
│       │       ├── sqliterk_crypto.h
│       │       ├── sqliterk_os.c
│       │       ├── sqliterk_os.h
│       │       ├── sqliterk_output.cpp
│       │       ├── sqliterk_pager.c
│       │       ├── sqliterk_pager.h
│       │       ├── sqliterk_util.c
│       │       ├── sqliterk_util.h
│       │       ├── sqliterk_values.c
│       │       └── sqliterk_values.h
│       ├── SQLiteRepairKit.xcodeproj/
│       │   └── project.pbxproj
│       ├── SnapKit/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Sources/
│       │       ├── Constraint.swift
│       │       ├── ConstraintAttributes.swift
│       │       ├── ConstraintConfig.swift
│       │       ├── ConstraintConstantTarget.swift
│       │       ├── ConstraintDSL.swift
│       │       ├── ConstraintDescription.swift
│       │       ├── ConstraintDirectionalInsetTarget.swift
│       │       ├── ConstraintDirectionalInsets.swift
│       │       ├── ConstraintInsetTarget.swift
│       │       ├── ConstraintInsets.swift
│       │       ├── ConstraintItem.swift
│       │       ├── ConstraintLayoutGuide+Extensions.swift
│       │       ├── ConstraintLayoutGuide.swift
│       │       ├── ConstraintLayoutGuideDSL.swift
│       │       ├── ConstraintLayoutSupport.swift
│       │       ├── ConstraintLayoutSupportDSL.swift
│       │       ├── ConstraintMaker.swift
│       │       ├── ConstraintMakerEditable.swift
│       │       ├── ConstraintMakerExtendable.swift
│       │       ├── ConstraintMakerFinalizable.swift
│       │       ├── ConstraintMakerPrioritizable.swift
│       │       ├── ConstraintMakerRelatable+Extensions.swift
│       │       ├── ConstraintMakerRelatable.swift
│       │       ├── ConstraintMultiplierTarget.swift
│       │       ├── ConstraintOffsetTarget.swift
│       │       ├── ConstraintPriority.swift
│       │       ├── ConstraintPriorityTarget.swift
│       │       ├── ConstraintRelatableTarget.swift
│       │       ├── ConstraintRelation.swift
│       │       ├── ConstraintView+Extensions.swift
│       │       ├── ConstraintView.swift
│       │       ├── ConstraintViewDSL.swift
│       │       ├── Debugging.swift
│       │       ├── LayoutConstraint.swift
│       │       ├── LayoutConstraintItem.swift
│       │       ├── Typealiases.swift
│       │       └── UILayoutSupport+Extensions.swift
│       ├── SnapKit.xcodeproj/
│       │   └── project.pbxproj
│       ├── SwiftDate/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Sources/
│       │       └── SwiftDate/
│       │           ├── Date/
│       │           │   ├── Date+Compare.swift
│       │           │   ├── Date+Components.swift
│       │           │   ├── Date+Create.swift
│       │           │   ├── Date+Math.swift
│       │           │   └── Date.swift
│       │           ├── DateInRegion/
│       │           │   ├── DateInRegion+Compare.swift
│       │           │   ├── DateInRegion+Components.swift
│       │           │   ├── DateInRegion+Create.swift
│       │           │   ├── DateInRegion+Math.swift
│       │           │   ├── DateInRegion.swift
│       │           │   └── Region.swift
│       │           ├── DateRepresentable.swift
│       │           ├── Formatters/
│       │           │   ├── DotNetParserFormatter.swift
│       │           │   ├── Formatter+Protocols.swift
│       │           │   ├── ISOFormatter.swift
│       │           │   ├── ISOParser.swift
│       │           │   └── RelativeFormatter/
│       │           │       ├── RelativeFormatter+Style.swift
│       │           │       ├── RelativeFormatter.swift
│       │           │       ├── RelativeFormatterLanguage.swift
│       │           │       └── langs/
│       │           │           ├── af.json
│       │           │           ├── am.json
│       │           │           ├── ar.json
│       │           │           ├── ar_AE.json
│       │           │           ├── as.json
│       │           │           ├── be.json
│       │           │           ├── bg.json
│       │           │           ├── bn.json
│       │           │           ├── br.json
│       │           │           ├── bs-Cyrl.json
│       │           │           ├── bs.json
│       │           │           ├── ca.json
│       │           │           ├── cs.json
│       │           │           ├── cy.json
│       │           │           ├── da.json
│       │           │           ├── de.json
│       │           │           ├── dsb.json
│       │           │           ├── dz.json
│       │           │           ├── ee.json
│       │           │           ├── el.json
│       │           │           ├── en.json
│       │           │           ├── es.json
│       │           │           ├── es_AR.json
│       │           │           ├── es_MX.json
│       │           │           ├── es_PY.json
│       │           │           ├── es_US.json
│       │           │           ├── et.json
│       │           │           ├── eu.json
│       │           │           ├── fa.json
│       │           │           ├── fi.json
│       │           │           ├── fil.json
│       │           │           ├── fo.json
│       │           │           ├── fr.json
│       │           │           ├── fr_CA.json
│       │           │           ├── fur.json
│       │           │           ├── fy.json
│       │           │           ├── ga.json
│       │           │           ├── gd.json
│       │           │           ├── gl.json
│       │           │           ├── gu.json
│       │           │           ├── he.json
│       │           │           ├── hi.json
│       │           │           ├── hr.json
│       │           │           ├── hsb.json
│       │           │           ├── hu.json
│       │           │           ├── hy.json
│       │           │           ├── id.json
│       │           │           ├── is.json
│       │           │           ├── it.json
│       │           │           ├── ja.json
│       │           │           ├── jgo.json
│       │           │           ├── ka.json
│       │           │           ├── kea.json
│       │           │           ├── kk.json
│       │           │           ├── kl.json
│       │           │           ├── km.json
│       │           │           ├── kn.json
│       │           │           ├── ko.json
│       │           │           ├── kok.json
│       │           │           ├── ksh.json
│       │           │           ├── ky.json
│       │           │           ├── lb.json
│       │           │           ├── lkt.json
│       │           │           ├── lo.json
│       │           │           ├── lt.json
│       │           │           ├── lv.json
│       │           │           ├── mk.json
│       │           │           ├── ml.json
│       │           │           ├── mn.json
│       │           │           ├── mr.json
│       │           │           ├── ms.json
│       │           │           ├── mt.json
│       │           │           ├── my.json
│       │           │           ├── mzn.json
│       │           │           ├── nb.json
│       │           │           ├── ne.json
│       │           │           ├── nl.json
│       │           │           ├── nn.json
│       │           │           ├── or.json
│       │           │           ├── pa.json
│       │           │           ├── pl.json
│       │           │           ├── ps.json
│       │           │           ├── pt.json
│       │           │           ├── ro.json
│       │           │           ├── ru.json
│       │           │           ├── sah.json
│       │           │           ├── sd.json
│       │           │           ├── se.json
│       │           │           ├── se_FI.json
│       │           │           ├── si.json
│       │           │           ├── sk.json
│       │           │           ├── sl.json
│       │           │           ├── sq.json
│       │           │           ├── sr.json
│       │           │           ├── sr_Latn.json
│       │           │           ├── sv.json
│       │           │           ├── sw.json
│       │           │           ├── ta.json
│       │           │           ├── te.json
│       │           │           ├── th.json
│       │           │           ├── ti.json
│       │           │           ├── tk.json
│       │           │           ├── to.json
│       │           │           ├── tr.json
│       │           │           ├── ug.json
│       │           │           ├── uk.json
│       │           │           ├── ur.json
│       │           │           ├── ur_IN.json
│       │           │           ├── uz.json
│       │           │           ├── uz_Cyrl.json
│       │           │           ├── vi.json
│       │           │           ├── wae.json
│       │           │           ├── yi.json
│       │           │           ├── yue_Hans.json
│       │           │           ├── yue_Hant.json
│       │           │           ├── zh.json
│       │           │           ├── zh_Hans.json
│       │           │           ├── zh_Hans_HK.json
│       │           │           ├── zh_Hans_MO.json
│       │           │           ├── zh_Hans_SG.json
│       │           │           ├── zh_Hant.json
│       │           │           ├── zh_Hant_HK.json
│       │           │           └── zu.json
│       │           ├── Foundation+Extras/
│       │           │   ├── DateComponents+Extras.swift
│       │           │   ├── Int+DateComponents.swift
│       │           │   ├── String+Parser.swift
│       │           │   └── TimeInterval+Formatter.swift
│       │           ├── Supports/
│       │           │   ├── AssociatedValues.swift
│       │           │   ├── Calendars.swift
│       │           │   ├── Commons.swift
│       │           │   ├── Locales.swift
│       │           │   ├── TimeStructures.swift
│       │           │   └── Zones.swift
│       │           ├── SwiftDate.swift
│       │           └── TimePeriod/
│       │               ├── Groups/
│       │               │   ├── TimePeriodChain.swift
│       │               │   ├── TimePeriodCollection.swift
│       │               │   └── TimePeriodGroup.swift
│       │               ├── TimePeriod+Support.swift
│       │               ├── TimePeriod.swift
│       │               └── TimePeriodProtocol.swift
│       ├── SwiftDate.xcodeproj/
│       │   └── project.pbxproj
│       ├── SwifterSwift/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Sources/
│       │       └── SwifterSwift/
│       │           ├── AppKit/
│       │           │   ├── NSColorExtensions.swift
│       │           │   ├── NSImageExtensions.swift
│       │           │   └── NSViewExtensions.swift
│       │           ├── CoreAnimation/
│       │           │   ├── CAGradientLayerExtensions.swift
│       │           │   └── CATransform3DExtensions.swift
│       │           ├── CoreGraphics/
│       │           │   ├── CGAffineTransformExtensions.swift
│       │           │   ├── CGColorExtensions.swift
│       │           │   ├── CGFloatExtensions.swift
│       │           │   ├── CGPointExtensions.swift
│       │           │   ├── CGRectExtensions.swift
│       │           │   ├── CGSizeExtensions.swift
│       │           │   └── CGVectorExtensions.swift
│       │           ├── CoreLocation/
│       │           │   ├── CLLocationArrayExtensions.swift
│       │           │   ├── CLLocationExtensions.swift
│       │           │   └── CLVisitExtensions.swift
│       │           ├── Dispatch/
│       │           │   └── DispatchQueueExtensions.swift
│       │           ├── Foundation/
│       │           │   ├── CalendarExtensions.swift
│       │           │   ├── DataExtensions.swift
│       │           │   ├── DateExtensions.swift
│       │           │   ├── FileManagerExtensions.swift
│       │           │   ├── LocaleExtensions.swift
│       │           │   ├── NSAttributedStringExtensions.swift
│       │           │   ├── NSPredicateExtensions.swift
│       │           │   ├── NSRegularExpressionExtensions.swift
│       │           │   ├── NotificationCenterExtensions.swift
│       │           │   ├── URLExtensions.swift
│       │           │   ├── URLRequestExtensions.swift
│       │           │   └── UserDefaultsExtensions.swift
│       │           ├── MapKit/
│       │           │   ├── MKMapViewExtensions.swift
│       │           │   └── MKPolylineExtensions.swift
│       │           ├── SceneKit/
│       │           │   ├── SCNBoxExtensions.swift
│       │           │   ├── SCNCapsuleExtensions.swift
│       │           │   ├── SCNConeExtensions.swift
│       │           │   ├── SCNCylinderExtensions.swift
│       │           │   ├── SCNGeometryExtensions.swift
│       │           │   ├── SCNMaterialExtensions.swift
│       │           │   ├── SCNPlaneExtensions.swift
│       │           │   ├── SCNShapeExtensions.swift
│       │           │   ├── SCNSphereExtensions.swift
│       │           │   └── SCNVector3Extensions.swift
│       │           ├── Shared/
│       │           │   ├── ColorExtensions.swift
│       │           │   └── EdgeInsetsExtensions.swift
│       │           ├── SpriteKit/
│       │           │   └── SKNodeExtensions.swift
│       │           ├── StoreKit/
│       │           │   └── SKProductExtensions.swift
│       │           ├── SwiftStdlib/
│       │           │   ├── ArrayExtensions.swift
│       │           │   ├── BidirectionalCollectionExtensions.swift
│       │           │   ├── BinaryFloatingPointExtensions.swift
│       │           │   ├── BoolExtensions.swift
│       │           │   ├── CharacterExtensions.swift
│       │           │   ├── CollectionExtensions.swift
│       │           │   ├── ComparableExtensions.swift
│       │           │   ├── DecodableExtensions.swift
│       │           │   ├── Deprecated/
│       │           │   │   └── StdlibDeprecated.swift
│       │           │   ├── DictionaryExtensions.swift
│       │           │   ├── DoubleExtensions.swift
│       │           │   ├── FloatExtensions.swift
│       │           │   ├── FloatingPointExtensions.swift
│       │           │   ├── IntExtensions.swift
│       │           │   ├── KeyedDecodingContainerExtensions.swift
│       │           │   ├── MutableCollectionExtensions.swift
│       │           │   ├── OptionalExtensions.swift
│       │           │   ├── RandomAccessCollectionExtensions.swift
│       │           │   ├── RangeReplaceableCollectionExtensions.swift
│       │           │   ├── SequenceExtensions.swift
│       │           │   ├── SignedIntegerExtensions.swift
│       │           │   ├── SignedNumericExtensions.swift
│       │           │   ├── StringExtensions.swift
│       │           │   └── StringProtocolExtensions.swift
│       │           └── UIKit/
│       │               ├── UIActivityExtensions.swift
│       │               ├── UIAlertControllerExtensions.swift
│       │               ├── UIApplicationExtensions.swift
│       │               ├── UIBarButtonItemExtensions.swift
│       │               ├── UIBezierPathExtensions.swift
│       │               ├── UIButtonExtensions.swift
│       │               ├── UICollectionViewExtensions.swift
│       │               ├── UIColorExtensions.swift
│       │               ├── UIDatePickerExtensions.swift
│       │               ├── UIFontExtensions.swift
│       │               ├── UIGestureRecognizerExtensions.swift
│       │               ├── UIImageExtensions.swift
│       │               ├── UIImageViewExtensions.swift
│       │               ├── UILabelExtensions.swift
│       │               ├── UILayoutPriorityExtensions.swift
│       │               ├── UINavigationBarExtensions.swift
│       │               ├── UINavigationControllerExtensions.swift
│       │               ├── UINavigationItemExtensions.swift
│       │               ├── UIRefreshControlExtensions.swift
│       │               ├── UIScrollViewExtensions.swift
│       │               ├── UISearchBarExtensions.swift
│       │               ├── UISegmentedControlExtensions.swift
│       │               ├── UISliderExtensions.swift
│       │               ├── UIStackViewExtensions.swift
│       │               ├── UIStoryboardExtensions.swift
│       │               ├── UISwitchExtensions.swift
│       │               ├── UITabBarExtensions.swift
│       │               ├── UITableViewExtensions.swift
│       │               ├── UITextFieldExtensions.swift
│       │               ├── UITextViewExtensions.swift
│       │               ├── UIViewControllerExtensions.swift
│       │               ├── UIViewExtensions.swift
│       │               └── UIWindowExtensions.swift
│       ├── SwifterSwift.xcodeproj/
│       │   └── project.pbxproj
│       ├── SwiftyJSON/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── Source/
│       │       └── SwiftyJSON/
│       │           └── SwiftyJSON.swift
│       ├── SwiftyJSON.xcodeproj/
│       │   └── project.pbxproj
│       ├── TZImagePickerController/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── TZImagePickerController/
│       │       └── TZImagePickerController/
│       │           ├── NSBundle+TZImagePicker.h
│       │           ├── NSBundle+TZImagePicker.m
│       │           ├── TZAssetCell.h
│       │           ├── TZAssetCell.m
│       │           ├── TZAssetModel.h
│       │           ├── TZAssetModel.m
│       │           ├── TZAuthLimitedFooterTipView.h
│       │           ├── TZAuthLimitedFooterTipView.m
│       │           ├── TZGifPhotoPreviewController.h
│       │           ├── TZGifPhotoPreviewController.m
│       │           ├── TZImageCropManager.h
│       │           ├── TZImageCropManager.m
│       │           ├── TZImageManager.h
│       │           ├── TZImageManager.m
│       │           ├── TZImagePickerController.bundle/
│       │           │   ├── ar.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── de.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── en.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── es.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── fr.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── ja.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── ko-KP.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── pt.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── ru.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── vi.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   ├── zh-Hans.lproj/
│       │           │   │   └── Localizable.strings
│       │           │   └── zh-Hant.lproj/
│       │           │       └── Localizable.strings
│       │           ├── TZImagePickerController.h
│       │           ├── TZImagePickerController.m
│       │           ├── TZImageRequestOperation.h
│       │           ├── TZImageRequestOperation.m
│       │           ├── TZLocationManager.h
│       │           ├── TZLocationManager.m
│       │           ├── TZPhotoPickerController.h
│       │           ├── TZPhotoPickerController.m
│       │           ├── TZPhotoPreviewCell.h
│       │           ├── TZPhotoPreviewCell.m
│       │           ├── TZPhotoPreviewController.h
│       │           ├── TZPhotoPreviewController.m
│       │           ├── TZProgressView.h
│       │           ├── TZProgressView.m
│       │           ├── TZVideoCropController.h
│       │           ├── TZVideoCropController.m
│       │           ├── TZVideoEditedPreviewController.h
│       │           ├── TZVideoEditedPreviewController.m
│       │           ├── TZVideoPlayerController.h
│       │           ├── TZVideoPlayerController.m
│       │           ├── UIView+TZLayout.h
│       │           └── UIView+TZLayout.m
│       ├── TZImagePickerController.xcodeproj/
│       │   └── project.pbxproj
│       ├── Target Support Files/
│       │   ├── Alamofire/
│       │   │   ├── Alamofire-Info.plist
│       │   │   ├── Alamofire-dummy.m
│       │   │   ├── Alamofire-prefix.pch
│       │   │   ├── Alamofire-umbrella.h
│       │   │   ├── Alamofire.debug.xcconfig
│       │   │   ├── Alamofire.modulemap
│       │   │   └── Alamofire.release.xcconfig
│       │   ├── FDFullscreenPopGesture/
│       │   │   ├── FDFullscreenPopGesture-Info.plist
│       │   │   ├── FDFullscreenPopGesture-dummy.m
│       │   │   ├── FDFullscreenPopGesture-prefix.pch
│       │   │   ├── FDFullscreenPopGesture-umbrella.h
│       │   │   ├── FDFullscreenPopGesture.debug.xcconfig
│       │   │   ├── FDFullscreenPopGesture.modulemap
│       │   │   └── FDFullscreenPopGesture.release.xcconfig
│       │   ├── HandyJSON/
│       │   │   ├── HandyJSON-Info.plist
│       │   │   ├── HandyJSON-dummy.m
│       │   │   ├── HandyJSON-prefix.pch
│       │   │   ├── HandyJSON-umbrella.h
│       │   │   ├── HandyJSON.debug.xcconfig
│       │   │   ├── HandyJSON.modulemap
│       │   │   └── HandyJSON.release.xcconfig
│       │   ├── IGListDiffKit/
│       │   │   ├── IGListDiffKit-Info.plist
│       │   │   ├── IGListDiffKit-dummy.m
│       │   │   ├── IGListDiffKit-prefix.pch
│       │   │   ├── IGListDiffKit-umbrella.h
│       │   │   ├── IGListDiffKit.debug.xcconfig
│       │   │   ├── IGListDiffKit.modulemap
│       │   │   └── IGListDiffKit.release.xcconfig
│       │   ├── IGListKit/
│       │   │   ├── IGListKit-Info.plist
│       │   │   ├── IGListKit-dummy.m
│       │   │   ├── IGListKit-prefix.pch
│       │   │   ├── IGListKit-umbrella.h
│       │   │   ├── IGListKit.debug.xcconfig
│       │   │   ├── IGListKit.modulemap
│       │   │   └── IGListKit.release.xcconfig
│       │   ├── IQKeyboardManagerSwift/
│       │   │   ├── IQKeyboardManagerSwift-Info.plist
│       │   │   ├── IQKeyboardManagerSwift-dummy.m
│       │   │   ├── IQKeyboardManagerSwift-prefix.pch
│       │   │   ├── IQKeyboardManagerSwift-umbrella.h
│       │   │   ├── IQKeyboardManagerSwift.debug.xcconfig
│       │   │   ├── IQKeyboardManagerSwift.modulemap
│       │   │   └── IQKeyboardManagerSwift.release.xcconfig
│       │   ├── Kingfisher/
│       │   │   ├── Kingfisher-Info.plist
│       │   │   ├── Kingfisher-dummy.m
│       │   │   ├── Kingfisher-prefix.pch
│       │   │   ├── Kingfisher-umbrella.h
│       │   │   ├── Kingfisher.debug.xcconfig
│       │   │   ├── Kingfisher.modulemap
│       │   │   └── Kingfisher.release.xcconfig
│       │   ├── Localize-Swift/
│       │   │   ├── Localize-Swift-Info.plist
│       │   │   ├── Localize-Swift-dummy.m
│       │   │   ├── Localize-Swift-prefix.pch
│       │   │   ├── Localize-Swift-umbrella.h
│       │   │   ├── Localize-Swift.debug.xcconfig
│       │   │   ├── Localize-Swift.modulemap
│       │   │   └── Localize-Swift.release.xcconfig
│       │   ├── LookinServer/
│       │   │   ├── LookinServer-Info.plist
│       │   │   ├── LookinServer-dummy.m
│       │   │   ├── LookinServer-prefix.pch
│       │   │   ├── LookinServer-umbrella.h
│       │   │   ├── LookinServer.debug.xcconfig
│       │   │   ├── LookinServer.modulemap
│       │   │   └── LookinServer.release.xcconfig
│       │   ├── MBProgressHUD/
│       │   │   ├── MBProgressHUD-Info.plist
│       │   │   ├── MBProgressHUD-dummy.m
│       │   │   ├── MBProgressHUD-prefix.pch
│       │   │   ├── MBProgressHUD-umbrella.h
│       │   │   ├── MBProgressHUD.debug.xcconfig
│       │   │   ├── MBProgressHUD.modulemap
│       │   │   └── MBProgressHUD.release.xcconfig
│       │   ├── MJRefresh/
│       │   │   ├── MJRefresh-Info.plist
│       │   │   ├── MJRefresh-dummy.m
│       │   │   ├── MJRefresh-prefix.pch
│       │   │   ├── MJRefresh-umbrella.h
│       │   │   ├── MJRefresh.debug.xcconfig
│       │   │   ├── MJRefresh.modulemap
│       │   │   └── MJRefresh.release.xcconfig
│       │   ├── Moya/
│       │   │   ├── Moya-Info.plist
│       │   │   ├── Moya-dummy.m
│       │   │   ├── Moya-prefix.pch
│       │   │   ├── Moya-umbrella.h
│       │   │   ├── Moya.debug.xcconfig
│       │   │   ├── Moya.modulemap
│       │   │   └── Moya.release.xcconfig
│       │   ├── NSObject+Rx/
│       │   │   ├── NSObject+Rx-Info.plist
│       │   │   ├── NSObject+Rx-dummy.m
│       │   │   ├── NSObject+Rx-prefix.pch
│       │   │   ├── NSObject+Rx-umbrella.h
│       │   │   ├── NSObject+Rx.debug.xcconfig
│       │   │   ├── NSObject+Rx.modulemap
│       │   │   └── NSObject+Rx.release.xcconfig
│       │   ├── Pods-FY-IMChat/
│       │   │   ├── Pods-FY-IMChat-Info.plist
│       │   │   ├── Pods-FY-IMChat-acknowledgements.markdown
│       │   │   ├── Pods-FY-IMChat-acknowledgements.plist
│       │   │   ├── Pods-FY-IMChat-dummy.m
│       │   │   ├── Pods-FY-IMChat-frameworks.sh
│       │   │   ├── Pods-FY-IMChat-umbrella.h
│       │   │   ├── Pods-FY-IMChat.debug.xcconfig
│       │   │   ├── Pods-FY-IMChat.modulemap
│       │   │   └── Pods-FY-IMChat.release.xcconfig
│       │   ├── R.swift/
│       │   │   ├── R.swift.debug.xcconfig
│       │   │   └── R.swift.release.xcconfig
│       │   ├── R.swift.Library/
│       │   │   ├── R.swift.Library-Info.plist
│       │   │   ├── R.swift.Library-dummy.m
│       │   │   ├── R.swift.Library-prefix.pch
│       │   │   ├── R.swift.Library-umbrella.h
│       │   │   ├── R.swift.Library.debug.xcconfig
│       │   │   ├── R.swift.Library.modulemap
│       │   │   └── R.swift.Library.release.xcconfig
│       │   ├── ReachabilitySwift/
│       │   │   ├── ReachabilitySwift-Info.plist
│       │   │   ├── ReachabilitySwift-dummy.m
│       │   │   ├── ReachabilitySwift-prefix.pch
│       │   │   ├── ReachabilitySwift-umbrella.h
│       │   │   ├── ReachabilitySwift.debug.xcconfig
│       │   │   ├── ReachabilitySwift.modulemap
│       │   │   └── ReachabilitySwift.release.xcconfig
│       │   ├── RxCocoa/
│       │   │   ├── RxCocoa-Info.plist
│       │   │   ├── RxCocoa-dummy.m
│       │   │   ├── RxCocoa-prefix.pch
│       │   │   ├── RxCocoa-umbrella.h
│       │   │   ├── RxCocoa.debug.xcconfig
│       │   │   ├── RxCocoa.modulemap
│       │   │   └── RxCocoa.release.xcconfig
│       │   ├── RxRelay/
│       │   │   ├── RxRelay-Info.plist
│       │   │   ├── RxRelay-dummy.m
│       │   │   ├── RxRelay-prefix.pch
│       │   │   ├── RxRelay-umbrella.h
│       │   │   ├── RxRelay.debug.xcconfig
│       │   │   ├── RxRelay.modulemap
│       │   │   └── RxRelay.release.xcconfig
│       │   ├── RxSwift/
│       │   │   ├── RxSwift-Info.plist
│       │   │   ├── RxSwift-dummy.m
│       │   │   ├── RxSwift-prefix.pch
│       │   │   ├── RxSwift-umbrella.h
│       │   │   ├── RxSwift.debug.xcconfig
│       │   │   ├── RxSwift.modulemap
│       │   │   └── RxSwift.release.xcconfig
│       │   ├── RxTheme/
│       │   │   ├── RxTheme-Info.plist
│       │   │   ├── RxTheme-dummy.m
│       │   │   ├── RxTheme-prefix.pch
│       │   │   ├── RxTheme-umbrella.h
│       │   │   ├── RxTheme.debug.xcconfig
│       │   │   ├── RxTheme.modulemap
│       │   │   └── RxTheme.release.xcconfig
│       │   ├── SDWebImage/
│       │   │   ├── SDWebImage-Info.plist
│       │   │   ├── SDWebImage-dummy.m
│       │   │   ├── SDWebImage-prefix.pch
│       │   │   ├── SDWebImage-umbrella.h
│       │   │   ├── SDWebImage.debug.xcconfig
│       │   │   ├── SDWebImage.modulemap
│       │   │   └── SDWebImage.release.xcconfig
│       │   ├── SQLiteRepairKit/
│       │   │   ├── SQLiteRepairKit-Info.plist
│       │   │   ├── SQLiteRepairKit-dummy.m
│       │   │   ├── SQLiteRepairKit-prefix.pch
│       │   │   ├── SQLiteRepairKit-umbrella.h
│       │   │   ├── SQLiteRepairKit.debug.xcconfig
│       │   │   ├── SQLiteRepairKit.modulemap
│       │   │   └── SQLiteRepairKit.release.xcconfig
│       │   ├── SnapKit/
│       │   │   ├── SnapKit-Info.plist
│       │   │   ├── SnapKit-dummy.m
│       │   │   ├── SnapKit-prefix.pch
│       │   │   ├── SnapKit-umbrella.h
│       │   │   ├── SnapKit.debug.xcconfig
│       │   │   ├── SnapKit.modulemap
│       │   │   └── SnapKit.release.xcconfig
│       │   ├── SwiftDate/
│       │   │   ├── SwiftDate-Info.plist
│       │   │   ├── SwiftDate-dummy.m
│       │   │   ├── SwiftDate-prefix.pch
│       │   │   ├── SwiftDate-umbrella.h
│       │   │   ├── SwiftDate.debug.xcconfig
│       │   │   ├── SwiftDate.modulemap
│       │   │   └── SwiftDate.release.xcconfig
│       │   ├── SwifterSwift/
│       │   │   ├── SwifterSwift-Info.plist
│       │   │   ├── SwifterSwift-dummy.m
│       │   │   ├── SwifterSwift-prefix.pch
│       │   │   ├── SwifterSwift-umbrella.h
│       │   │   ├── SwifterSwift.debug.xcconfig
│       │   │   ├── SwifterSwift.modulemap
│       │   │   └── SwifterSwift.release.xcconfig
│       │   ├── SwiftyJSON/
│       │   │   ├── SwiftyJSON-Info.plist
│       │   │   ├── SwiftyJSON-dummy.m
│       │   │   ├── SwiftyJSON-prefix.pch
│       │   │   ├── SwiftyJSON-umbrella.h
│       │   │   ├── SwiftyJSON.debug.xcconfig
│       │   │   ├── SwiftyJSON.modulemap
│       │   │   └── SwiftyJSON.release.xcconfig
│       │   ├── TZImagePickerController/
│       │   │   ├── TZImagePickerController-Info.plist
│       │   │   ├── TZImagePickerController-dummy.m
│       │   │   ├── TZImagePickerController-prefix.pch
│       │   │   ├── TZImagePickerController-umbrella.h
│       │   │   ├── TZImagePickerController.debug.xcconfig
│       │   │   ├── TZImagePickerController.modulemap
│       │   │   └── TZImagePickerController.release.xcconfig
│       │   ├── UITableView+FDTemplateLayoutCell/
│       │   │   ├── UITableView+FDTemplateLayoutCell-Info.plist
│       │   │   ├── UITableView+FDTemplateLayoutCell-dummy.m
│       │   │   ├── UITableView+FDTemplateLayoutCell-prefix.pch
│       │   │   ├── UITableView+FDTemplateLayoutCell-umbrella.h
│       │   │   ├── UITableView+FDTemplateLayoutCell.debug.xcconfig
│       │   │   ├── UITableView+FDTemplateLayoutCell.modulemap
│       │   │   └── UITableView+FDTemplateLayoutCell.release.xcconfig
│       │   ├── UIView+FDCollapsibleConstraints/
│       │   │   ├── UIView+FDCollapsibleConstraints-Info.plist
│       │   │   ├── UIView+FDCollapsibleConstraints-dummy.m
│       │   │   ├── UIView+FDCollapsibleConstraints-prefix.pch
│       │   │   ├── UIView+FDCollapsibleConstraints-umbrella.h
│       │   │   ├── UIView+FDCollapsibleConstraints.debug.xcconfig
│       │   │   ├── UIView+FDCollapsibleConstraints.modulemap
│       │   │   └── UIView+FDCollapsibleConstraints.release.xcconfig
│       │   ├── WCDB.swift/
│       │   │   ├── WCDB.swift-Info.plist
│       │   │   ├── WCDB.swift-dummy.m
│       │   │   ├── WCDB.swift-prefix.pch
│       │   │   ├── WCDB.swift-umbrella.h
│       │   │   ├── WCDB.swift.debug.xcconfig
│       │   │   ├── WCDB.swift.modulemap
│       │   │   └── WCDB.swift.release.xcconfig
│       │   ├── WCDBOptimizedSQLCipher/
│       │   │   ├── WCDBOptimizedSQLCipher-Info.plist
│       │   │   ├── WCDBOptimizedSQLCipher-dummy.m
│       │   │   ├── WCDBOptimizedSQLCipher-prefix.pch
│       │   │   ├── WCDBOptimizedSQLCipher-umbrella.h
│       │   │   ├── WCDBOptimizedSQLCipher.debug.xcconfig
│       │   │   ├── WCDBOptimizedSQLCipher.modulemap
│       │   │   └── WCDBOptimizedSQLCipher.release.xcconfig
│       │   ├── YBImageBrowser/
│       │   │   ├── YBImageBrowser-Info.plist
│       │   │   ├── YBImageBrowser-dummy.m
│       │   │   ├── YBImageBrowser-prefix.pch
│       │   │   ├── YBImageBrowser-umbrella.h
│       │   │   ├── YBImageBrowser.debug.xcconfig
│       │   │   ├── YBImageBrowser.modulemap
│       │   │   └── YBImageBrowser.release.xcconfig
│       │   ├── YYImage/
│       │   │   ├── YYImage-Info.plist
│       │   │   ├── YYImage-dummy.m
│       │   │   ├── YYImage-prefix.pch
│       │   │   ├── YYImage-umbrella.h
│       │   │   ├── YYImage.debug.xcconfig
│       │   │   ├── YYImage.modulemap
│       │   │   └── YYImage.release.xcconfig
│       │   └── YYText/
│       │       ├── YYText-Info.plist
│       │       ├── YYText-dummy.m
│       │       ├── YYText-prefix.pch
│       │       ├── YYText-umbrella.h
│       │       ├── YYText.debug.xcconfig
│       │       ├── YYText.modulemap
│       │       └── YYText.release.xcconfig
│       ├── UITableView+FDTemplateLayoutCell/
│       │   ├── Classes/
│       │   │   ├── UITableView+FDIndexPathHeightCache.h
│       │   │   ├── UITableView+FDIndexPathHeightCache.m
│       │   │   ├── UITableView+FDKeyedHeightCache.h
│       │   │   ├── UITableView+FDKeyedHeightCache.m
│       │   │   ├── UITableView+FDTemplateLayoutCell.h
│       │   │   ├── UITableView+FDTemplateLayoutCell.m
│       │   │   ├── UITableView+FDTemplateLayoutCellDebug.h
│       │   │   └── UITableView+FDTemplateLayoutCellDebug.m
│       │   ├── LICENSE
│       │   └── README.md
│       ├── UITableView+FDTemplateLayoutCell.xcodeproj/
│       │   └── project.pbxproj
│       ├── UIView+FDCollapsibleConstraints/
│       │   ├── Classes/
│       │   │   ├── UIView+FDCollapsibleConstraints.h
│       │   │   └── UIView+FDCollapsibleConstraints.m
│       │   ├── LICENSE
│       │   └── README.md
│       ├── UIView+FDCollapsibleConstraints.xcodeproj/
│       │   └── project.pbxproj
│       ├── WCDB.swift/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── swift/
│       │       └── source/
│       │           ├── abstract/
│       │           │   ├── Column.swift
│       │           │   ├── ColumnDef.swift
│       │           │   ├── ColumnIndex.swift
│       │           │   ├── ColumnResult.swift
│       │           │   ├── ColumnType.swift
│       │           │   ├── Conflict.swift
│       │           │   ├── Convertible.swift
│       │           │   ├── Describable.swift
│       │           │   ├── Expression.swift
│       │           │   ├── ForeignKey.swift
│       │           │   ├── FundamentalValue.swift
│       │           │   ├── Handle.swift
│       │           │   ├── HandleStatement.swift
│       │           │   ├── JoinClause.swift
│       │           │   ├── LiteralValue.swift
│       │           │   ├── ModuleArgument.swift
│       │           │   ├── Operable.swift
│       │           │   ├── Order.swift
│       │           │   ├── OrderTerm.swift
│       │           │   ├── Pragma.swift
│       │           │   ├── Statement.swift
│       │           │   ├── StatementAlterTable.swift
│       │           │   ├── StatementAttach.swift
│       │           │   ├── StatementCreateIndex.swift
│       │           │   ├── StatementCreateTable.swift
│       │           │   ├── StatementCreateVirtualTable.swift
│       │           │   ├── StatementDelete.swift
│       │           │   ├── StatementDetach.swift
│       │           │   ├── StatementDropIndex.swift
│       │           │   ├── StatementDropTable.swift
│       │           │   ├── StatementExplain.swift
│       │           │   ├── StatementInsert.swift
│       │           │   ├── StatementPragma.swift
│       │           │   ├── StatementReindex.swift
│       │           │   ├── StatementRelease.swift
│       │           │   ├── StatementRollback.swift
│       │           │   ├── StatementSavepoint.swift
│       │           │   ├── StatementSelect.swift
│       │           │   ├── StatementTransaction.swift
│       │           │   ├── StatementUpdate.swift
│       │           │   ├── StatementVacuum.swift
│       │           │   ├── Subquery.swift
│       │           │   ├── TableConstraint.swift
│       │           │   ├── Tokenize.swift
│       │           │   └── Tracer.swift
│       │           ├── builtin/
│       │           │   ├── CodableType.swift
│       │           │   ├── CommonStatement.swift
│       │           │   └── Master.swift
│       │           ├── core/
│       │           │   ├── base/
│       │           │   │   ├── Config.swift
│       │           │   │   ├── Core.swift
│       │           │   │   ├── CoreStatement.swift
│       │           │   │   ├── Database.swift
│       │           │   │   ├── HandlePool.swift
│       │           │   │   ├── RecyclableCore.swift
│       │           │   │   └── Transaction.swift
│       │           │   ├── binding/
│       │           │   │   ├── ColumnConstraintBinding.swift
│       │           │   │   ├── IndexBinding.swift
│       │           │   │   ├── Property.swift
│       │           │   │   ├── Redirectable.swift
│       │           │   │   ├── TableBinding.swift
│       │           │   │   ├── TableConstraintBinding.swift
│       │           │   │   └── VirtualTableBinding.swift
│       │           │   ├── codable/
│       │           │   │   ├── CodingTableKey.swift
│       │           │   │   ├── ColumnCodable.swift
│       │           │   │   ├── ColumnTypeDecoder.swift
│       │           │   │   ├── TableCodable.swift
│       │           │   │   ├── TableDecoder.swift
│       │           │   │   └── TableEncoder.swift
│       │           │   ├── fts/
│       │           │   │   └── WCDBTokenize.swift
│       │           │   └── interface/
│       │           │       ├── ChainCall.swift
│       │           │       ├── Declare.swift
│       │           │       ├── Delete.swift
│       │           │       ├── Insert.swift
│       │           │       ├── Interface.swift
│       │           │       ├── MultiSelect.swift
│       │           │       ├── RowSelect.swift
│       │           │       ├── Select.swift
│       │           │       ├── Selectable.swift
│       │           │       ├── Table.swift
│       │           │       ├── TableInterface.swift
│       │           │       └── Update.swift
│       │           └── util/
│       │               ├── Atomic.swift
│       │               ├── ConcurrentList.swift
│       │               ├── Convenience.swift
│       │               ├── Error.swift
│       │               ├── File.swift
│       │               ├── Lock.swift
│       │               ├── Optional.swift
│       │               ├── RWLock.swift
│       │               ├── Recyclable.swift
│       │               ├── SQLite-Bridging.c
│       │               ├── SQLite-Bridging.h
│       │               ├── SQLite-Bridging.swift
│       │               ├── SteadyClock.swift
│       │               ├── Tagged.swift
│       │               ├── ThreadLocal.swift
│       │               ├── TimedQueue.swift
│       │               └── WCDB-Bridging.h
│       ├── WCDB.swift.xcodeproj/
│       │   └── project.pbxproj
│       ├── WCDBOptimizedSQLCipher/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   ├── ext/
│       │   │   ├── fts3/
│       │   │   │   ├── fts3.c
│       │   │   │   ├── fts3.h
│       │   │   │   ├── fts3Int.h
│       │   │   │   ├── fts3_aux.c
│       │   │   │   ├── fts3_expr.c
│       │   │   │   ├── fts3_hash.c
│       │   │   │   ├── fts3_hash.h
│       │   │   │   ├── fts3_icu.c
│       │   │   │   ├── fts3_porter.c
│       │   │   │   ├── fts3_snippet.c
│       │   │   │   ├── fts3_tokenize_vtab.c
│       │   │   │   ├── fts3_tokenizer.c
│       │   │   │   ├── fts3_tokenizer.h
│       │   │   │   ├── fts3_tokenizer1.c
│       │   │   │   ├── fts3_unicode.c
│       │   │   │   ├── fts3_unicode2.c
│       │   │   │   └── fts3_write.c
│       │   │   ├── icu/
│       │   │   │   ├── icu.c
│       │   │   │   └── sqliteicu.h
│       │   │   ├── rbu/
│       │   │   │   ├── sqlite3rbu.c
│       │   │   │   └── sqlite3rbu.h
│       │   │   ├── rtree/
│       │   │   │   ├── rtree.c
│       │   │   │   ├── rtree.h
│       │   │   │   └── sqlite3rtree.h
│       │   │   └── userauth/
│       │   │       └── sqlite3userauth.h
│       │   ├── fts5.c
│       │   ├── fts5.h
│       │   ├── keywordhash.h
│       │   ├── opcodes.c
│       │   ├── opcodes.h
│       │   ├── parse.c
│       │   ├── parse.h
│       │   ├── sqlite3.h
│       │   └── src/
│       │       ├── alter.c
│       │       ├── analyze.c
│       │       ├── attach.c
│       │       ├── auth.c
│       │       ├── backup.c
│       │       ├── bitvec.c
│       │       ├── btmutex.c
│       │       ├── btree.c
│       │       ├── btree.h
│       │       ├── btreeInt.h
│       │       ├── build.c
│       │       ├── callback.c
│       │       ├── complete.c
│       │       ├── crypto.c
│       │       ├── crypto.h
│       │       ├── crypto_cc.c
│       │       ├── crypto_impl.c
│       │       ├── crypto_libtomcrypt.c
│       │       ├── ctime.c
│       │       ├── date.c
│       │       ├── dbstat.c
│       │       ├── delete.c
│       │       ├── expr.c
│       │       ├── fault.c
│       │       ├── fkey.c
│       │       ├── func.c
│       │       ├── global.c
│       │       ├── hash.c
│       │       ├── hash.h
│       │       ├── hwtime.h
│       │       ├── insert.c
│       │       ├── legacy.c
│       │       ├── loadext.c
│       │       ├── main.c
│       │       ├── malloc.c
│       │       ├── mem0.c
│       │       ├── mem1.c
│       │       ├── mem2.c
│       │       ├── mem3.c
│       │       ├── mem5.c
│       │       ├── memjournal.c
│       │       ├── msvc.h
│       │       ├── mutex.c
│       │       ├── mutex.h
│       │       ├── mutex_noop.c
│       │       ├── mutex_unix.c
│       │       ├── mutex_wcdb.c
│       │       ├── mutex_wcdb.h
│       │       ├── notify.c
│       │       ├── os.c
│       │       ├── os.h
│       │       ├── os_common.h
│       │       ├── os_setup.h
│       │       ├── os_unix.c
│       │       ├── os_wcdb.c
│       │       ├── os_wcdb.h
│       │       ├── pager.c
│       │       ├── pager.h
│       │       ├── pcache.c
│       │       ├── pcache.h
│       │       ├── pcache1.c
│       │       ├── pragma.c
│       │       ├── pragma.h
│       │       ├── prepare.c
│       │       ├── printf.c
│       │       ├── queue.c
│       │       ├── queue.h
│       │       ├── random.c
│       │       ├── resolve.c
│       │       ├── rowset.c
│       │       ├── select.c
│       │       ├── sqlcipher.h
│       │       ├── sqlite3ext.h
│       │       ├── sqliteInt.h
│       │       ├── sqliteLimit.h
│       │       ├── status.c
│       │       ├── table.c
│       │       ├── threads.c
│       │       ├── tokenize.c
│       │       ├── treeview.c
│       │       ├── trigger.c
│       │       ├── update.c
│       │       ├── utf.c
│       │       ├── util.c
│       │       ├── vacuum.c
│       │       ├── vdbe.c
│       │       ├── vdbe.h
│       │       ├── vdbeInt.h
│       │       ├── vdbeapi.c
│       │       ├── vdbeaux.c
│       │       ├── vdbeblob.c
│       │       ├── vdbemem.c
│       │       ├── vdbesort.c
│       │       ├── vdbetrace.c
│       │       ├── vtab.c
│       │       ├── vxworks.h
│       │       ├── wal.c
│       │       ├── wal.h
│       │       ├── walker.c
│       │       ├── where.c
│       │       ├── whereInt.h
│       │       ├── wherecode.c
│       │       └── whereexpr.c
│       ├── WCDBOptimizedSQLCipher.xcodeproj/
│       │   └── project.pbxproj
│       ├── YBImageBrowser/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   ├── Video/
│       │   │   ├── YBIBVideoActionBar.h
│       │   │   ├── YBIBVideoActionBar.m
│       │   │   ├── YBIBVideoCell+Internal.h
│       │   │   ├── YBIBVideoCell.h
│       │   │   ├── YBIBVideoCell.m
│       │   │   ├── YBIBVideoData+Internal.h
│       │   │   ├── YBIBVideoData.h
│       │   │   ├── YBIBVideoData.m
│       │   │   ├── YBIBVideoTopBar.h
│       │   │   ├── YBIBVideoTopBar.m
│       │   │   ├── YBIBVideoView.h
│       │   │   └── YBIBVideoView.m
│       │   └── YBImageBrowser/
│       │       ├── AuxiliaryView/
│       │       │   ├── YBIBAuxiliaryViewHandler.h
│       │       │   ├── YBIBAuxiliaryViewHandler.m
│       │       │   ├── YBIBLoadingView.h
│       │       │   ├── YBIBLoadingView.m
│       │       │   ├── YBIBToastView.h
│       │       │   └── YBIBToastView.m
│       │       ├── Base/
│       │       │   ├── NSObject+YBImageBrowser.h
│       │       │   ├── NSObject+YBImageBrowser.m
│       │       │   ├── YBIBAnimatedTransition.h
│       │       │   ├── YBIBAnimatedTransition.m
│       │       │   ├── YBIBCollectionView.h
│       │       │   ├── YBIBCollectionView.m
│       │       │   ├── YBIBCollectionViewLayout.h
│       │       │   ├── YBIBCollectionViewLayout.m
│       │       │   ├── YBIBContainerView.h
│       │       │   ├── YBIBContainerView.m
│       │       │   ├── YBIBDataMediator.h
│       │       │   ├── YBIBDataMediator.m
│       │       │   ├── YBIBScreenRotationHandler.h
│       │       │   ├── YBIBScreenRotationHandler.m
│       │       │   └── YBImageBrowser+Internal.h
│       │       ├── Helper/
│       │       │   ├── YBIBCopywriter.h
│       │       │   ├── YBIBCopywriter.m
│       │       │   ├── YBIBIconManager.h
│       │       │   ├── YBIBIconManager.m
│       │       │   ├── YBIBPhotoAlbumManager.h
│       │       │   ├── YBIBPhotoAlbumManager.m
│       │       │   ├── YBIBSentinel.h
│       │       │   ├── YBIBSentinel.m
│       │       │   ├── YBIBUtilities.h
│       │       │   └── YBIBUtilities.m
│       │       ├── Image/
│       │       │   ├── YBIBImageCache+Internal.h
│       │       │   ├── YBIBImageCache.h
│       │       │   ├── YBIBImageCache.m
│       │       │   ├── YBIBImageCell+Internal.h
│       │       │   ├── YBIBImageCell.h
│       │       │   ├── YBIBImageCell.m
│       │       │   ├── YBIBImageData+Internal.h
│       │       │   ├── YBIBImageData.h
│       │       │   ├── YBIBImageData.m
│       │       │   ├── YBIBImageLayout.h
│       │       │   ├── YBIBImageLayout.m
│       │       │   ├── YBIBImageScrollView.h
│       │       │   ├── YBIBImageScrollView.m
│       │       │   ├── YBIBInteractionProfile.h
│       │       │   ├── YBIBInteractionProfile.m
│       │       │   ├── YBImage.h
│       │       │   └── YBImage.m
│       │       ├── Protocol/
│       │       │   ├── YBIBCellProtocol.h
│       │       │   ├── YBIBDataProtocol.h
│       │       │   ├── YBIBGetBaseInfoProtocol.h
│       │       │   ├── YBIBOperateBrowserProtocol.h
│       │       │   ├── YBIBOrientationReceiveProtocol.h
│       │       │   ├── YBImageBrowserDataSource.h
│       │       │   └── YBImageBrowserDelegate.h
│       │       ├── ToolView/
│       │       │   ├── YBIBSheetView.h
│       │       │   ├── YBIBSheetView.m
│       │       │   ├── YBIBToolViewHandler.h
│       │       │   ├── YBIBToolViewHandler.m
│       │       │   ├── YBIBTopView.h
│       │       │   └── YBIBTopView.m
│       │       ├── WebImageMediator/
│       │       │   ├── YBIBDefaultWebImageMediator.h
│       │       │   ├── YBIBDefaultWebImageMediator.m
│       │       │   └── YBIBWebImageMediator.h
│       │       ├── YBImageBrowser.h
│       │       └── YBImageBrowser.m
│       ├── YBImageBrowser.xcodeproj/
│       │   └── project.pbxproj
│       ├── YYImage/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── YYImage/
│       │       ├── YYAnimatedImageView.h
│       │       ├── YYAnimatedImageView.m
│       │       ├── YYFrameImage.h
│       │       ├── YYFrameImage.m
│       │       ├── YYImage.h
│       │       ├── YYImage.m
│       │       ├── YYImageCoder.h
│       │       ├── YYImageCoder.m
│       │       ├── YYSpriteSheetImage.h
│       │       └── YYSpriteSheetImage.m
│       ├── YYImage.xcodeproj/
│       │   └── project.pbxproj
│       ├── YYText/
│       │   ├── LICENSE
│       │   ├── README.md
│       │   └── YYText/
│       │       ├── Component/
│       │       │   ├── YYTextContainerView.h
│       │       │   ├── YYTextContainerView.m
│       │       │   ├── YYTextDebugOption.h
│       │       │   ├── YYTextDebugOption.m
│       │       │   ├── YYTextEffectWindow.h
│       │       │   ├── YYTextEffectWindow.m
│       │       │   ├── YYTextInput.h
│       │       │   ├── YYTextInput.m
│       │       │   ├── YYTextKeyboardManager.h
│       │       │   ├── YYTextKeyboardManager.m
│       │       │   ├── YYTextLayout.h
│       │       │   ├── YYTextLayout.m
│       │       │   ├── YYTextLine.h
│       │       │   ├── YYTextLine.m
│       │       │   ├── YYTextMagnifier.h
│       │       │   ├── YYTextMagnifier.m
│       │       │   ├── YYTextSelectionView.h
│       │       │   └── YYTextSelectionView.m
│       │       ├── String/
│       │       │   ├── YYTextArchiver.h
│       │       │   ├── YYTextArchiver.m
│       │       │   ├── YYTextAttribute.h
│       │       │   ├── YYTextAttribute.m
│       │       │   ├── YYTextParser.h
│       │       │   ├── YYTextParser.m
│       │       │   ├── YYTextRubyAnnotation.h
│       │       │   ├── YYTextRubyAnnotation.m
│       │       │   ├── YYTextRunDelegate.h
│       │       │   └── YYTextRunDelegate.m
│       │       ├── Utility/
│       │       │   ├── NSAttributedString+YYText.h
│       │       │   ├── NSAttributedString+YYText.m
│       │       │   ├── NSParagraphStyle+YYText.h
│       │       │   ├── NSParagraphStyle+YYText.m
│       │       │   ├── UIPasteboard+YYText.h
│       │       │   ├── UIPasteboard+YYText.m
│       │       │   ├── UIView+YYText.h
│       │       │   ├── UIView+YYText.m
│       │       │   ├── YYTextAsyncLayer.h
│       │       │   ├── YYTextAsyncLayer.m
│       │       │   ├── YYTextTransaction.h
│       │       │   ├── YYTextTransaction.m
│       │       │   ├── YYTextUtilities.h
│       │       │   ├── YYTextUtilities.m
│       │       │   ├── YYTextWeakProxy.h
│       │       │   └── YYTextWeakProxy.m
│       │       ├── YYLabel.h
│       │       ├── YYLabel.m
│       │       ├── YYText.h
│       │       ├── YYTextView.h
│       │       └── YYTextView.m
│       └── YYText.xcodeproj/
│           └── project.pbxproj
├── LICENSE
└── README.md
Download .txt
Showing preview only (389K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (4426 symbols across 185 files)

FILE: JetChat/Pods/IGListDiffKit/Source/IGListDiffKit/IGListExperiments.h
  function IGListExperimentEnabled (line 45) | NS_SWIFT_NAME(ListExperimentEnabled(mask:option:))

FILE: JetChat/Pods/IGListKit/Source/IGListKit/IGListCollectionScrollingTraits.h
  type IGListCollectionScrollingTraits (line 15) | struct IGListCollectionScrollingTraits {

FILE: JetChat/Pods/IGListKit/Source/IGListKit/Internal/IGListAdapterInternal.h
  function NSString (line 21) | NSString *IGListReusableViewIdentifier(Class viewClass, NSString * _Null...

FILE: JetChat/Pods/IGListKit/Source/IGListKit/Internal/IGListArrayUtilsInternal.h
  function NSArray (line 13) | static NSArray *objectsWithDuplicateIdentifiersRemoved(NSArray<id<IGList...

FILE: JetChat/Pods/IGListKit/Source/IGListKit/Internal/IGListBatchUpdateState.h
  type IGListBatchUpdateStateIdle (line 10) | typedef NS_ENUM (NSInteger, IGListBatchUpdateState) {

FILE: JetChat/Pods/IGListKit/Source/IGListKit/Internal/IGListCollectionViewLayoutInternal.h
  function CGRect (line 8) | static CGRect IGListRectIntegralScaled(CGRect rect) {

FILE: JetChat/Pods/LookinServer/Src/Server/Perspective/LKS_PerspectiveLayer.h
  type LKS_PerspectiveDimension2D (line 14) | typedef NS_ENUM (NSUInteger, LKS_PerspectiveDimension) {

FILE: JetChat/Pods/LookinServer/Src/Shared/LookinAppInfo.h
  type LookinAppInfoDeviceSimulator (line 13) | typedef NS_ENUM(NSInteger, LookinAppInfoDevice) {

FILE: JetChat/Pods/LookinServer/Src/Shared/LookinAttrIdentifiers.h
  type NSString (line 15) | typedef NSString * LookinAttrGroupIdentifier;
  type NSString (line 36) | typedef NSString * LookinAttrSectionIdentifier;
  type NSString (line 126) | typedef NSString * LookinAttrIdentifier;

FILE: JetChat/Pods/LookinServer/Src/Shared/LookinAttrType.h
  type LookinAttrTypeNone (line 11) | typedef NS_ENUM(NSInteger, LookinAttrType) {

FILE: JetChat/Pods/LookinServer/Src/Shared/LookinAttributesSection.h
  type LookinAttributesSectionStyleDefault (line 16) | typedef NS_ENUM (NSInteger, LookinAttributesSectionStyle) {

FILE: JetChat/Pods/LookinServer/Src/Shared/LookinAutoLayoutConstraint.h
  type LookinConstraintItemTypeUnknown (line 15) | typedef NS_ENUM(NSInteger, LookinConstraintItemType) {

FILE: JetChat/Pods/LookinServer/Src/Shared/LookinCodingValueType.h
  type LookinCodingValueTypeUnknown (line 9) | typedef NS_ENUM(NSInteger, LookinCodingValueType) {

FILE: JetChat/Pods/LookinServer/Src/Shared/LookinDisplayItem.h
  type LookinDisplayItemImageEncodeTypeNone (line 22) | typedef NS_ENUM(NSUInteger, LookinDisplayItemImageEncodeType) {
  type LookinDisplayItemProperty_None (line 28) | typedef NS_ENUM(NSUInteger, LookinDisplayItemProperty) {

FILE: JetChat/Pods/LookinServer/Src/Shared/LookinEventHandler.h
  type LookinEventHandlerTypeTargetAction (line 15) | typedef NS_ENUM(NSInteger, LookinEventHandlerType) {

FILE: JetChat/Pods/LookinServer/Src/Shared/LookinStaticAsyncUpdateTask.h
  type LookinStaticAsyncUpdateTaskTypeNoScreenshot (line 13) | typedef NS_ENUM(NSInteger, LookinStaticAsyncUpdateTaskType) {

FILE: JetChat/Pods/LookinServer/Src/Shared/Peertalk/Lookin_PTUSBHub.h
  type PTUSBHubError (line 39) | typedef enum {

FILE: JetChat/Pods/MBProgressHUD/MBProgressHUD.h
  type MBProgressHUDModeIndeterminate (line 39) | typedef NS_ENUM(NSInteger, MBProgressHUDMode) {
  type MBProgressHUDAnimationFade (line 54) | typedef NS_ENUM(NSInteger, MBProgressHUDAnimation) {
  type MBProgressHUDBackgroundStyleSolidColor (line 65) | typedef NS_ENUM(NSInteger, MBProgressHUDBackgroundStyle) {

FILE: JetChat/Pods/MJRefresh/MJRefresh/Base/MJRefreshComponent.h
  function interface (line 43) | interface MJRefreshComponent : UIView

FILE: JetChat/Pods/MJRefresh/MJRefresh/MJRefreshConst.h
  function CG_INLINE (line 89) | CG_INLINE BOOL MJRefreshExchangeImplementations(

FILE: JetChat/Pods/RxCocoa/RxCocoa/Runtime/include/_RXObjCRuntime.h
  type objc_method_description (line 96) | struct objc_method_description

FILE: JetChat/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.h
  type NSInteger (line 17) | typedef NSInteger SDImageFormat

FILE: JetChat/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.h
  type SDImageCacheConfigExpireTypeAccessDate (line 13) | typedef NS_ENUM(NSUInteger, SDImageCacheConfigExpireType) {

FILE: JetChat/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.h
  type SDImageCacheTypeNone (line 15) | typedef NS_ENUM(NSInteger, SDImageCacheType) {
  type NSString (line 41) | typedef NSString * _Nullable (^SDImageCacheAdditionalCachePathBlock)(NSS...

FILE: JetChat/Pods/SDWebImage/SDWebImage/Core/SDImageCachesManager.h
  type SDImageCachesManagerOperationPolicySerial (line 13) | typedef NS_ENUM(NSUInteger, SDImageCachesManagerOperationPolicy) {

FILE: JetChat/Pods/SDWebImage/SDWebImage/Core/SDImageCoder.h
  type NSString (line 13) | typedef NSString * SDImageCoderOption
  type NSDictionary (line 14) | typedef NSDictionary<SDImageCoderOption, id> SDImageCoderOptions;
  type NSMutableDictionary (line 15) | typedef NSMutableDictionary<SDImageCoderOption, id> SDImageCoderMutableO...

FILE: JetChat/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheKeyFilter.h
  type NSString (line 12) | typedef NSString * _Nullable(^SDWebImageCacheKeyFilterBlock)(NSURL * _No...

FILE: JetChat/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.h
  type NSData (line 12) | typedef NSData * _Nullable(^SDWebImageCacheSerializerBlock)(UIImage * _N...

FILE: JetChat/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.h
  type NSString (line 12) | typedef NSString * SDWebImageContextOption
  type NSDictionary (line 13) | typedef NSDictionary<SDWebImageContextOption, id> SDWebImageContext;
  type NSMutableDictionary (line 14) | typedef NSMutableDictionary<SDWebImageContextOption, id> SDWebImageMutab...

FILE: JetChat/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.h
  type SDImageLoaderProgressBlock (line 103) | typedef SDImageLoaderProgressBlock SDWebImageDownloaderProgressBlock;
  type SDImageLoaderCompletedBlock (line 104) | typedef SDImageLoaderCompletedBlock SDWebImageDownloaderCompletedBlock;

FILE: JetChat/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.h
  type SDWebImageDownloaderFIFOExecutionOrder (line 13) | typedef NS_ENUM(NSInteger, SDWebImageDownloaderExecutionOrder) {

FILE: JetChat/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderDecryptor.h
  type NSData (line 12) | typedef NSData * _Nullable (^SDWebImageDownloaderDecryptorBlock)(NSData ...

FILE: JetChat/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderRequestModifier.h
  type NSURLRequest (line 12) | typedef NSURLRequest * _Nullable (^SDWebImageDownloaderRequestModifierBl...

FILE: JetChat/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderResponseModifier.h
  type NSURLResponse (line 12) | typedef NSURLResponse * _Nullable (^SDWebImageDownloaderResponseModifier...

FILE: JetChat/Pods/SDWebImage/SDWebImage/Core/SDWebImageOptionsProcessor.h
  type SDWebImageOptionsResult (line 15) | typedef SDWebImageOptionsResult * _Nullable(^SDWebImageOptionsProcessorB...

FILE: JetChat/Pods/SDWebImage/SDWebImage/Core/SDWebImageTransition.h
  type UIViewAnimationOptions (line 15) | typedef UIViewAnimationOptions SDWebImageAnimationOptions;

FILE: JetChat/Pods/SDWebImage/SDWebImage/Core/UIImage+Transform.h
  type UIRectCorner (line 18) | typedef UIRectCorner SDRectCorner;

FILE: JetChat/Pods/SQLiteRepairKit/repair/SQLiteRepairKit.h
  type sqliterk (line 30) | typedef struct sqliterk sqliterk;
  type sqliterk_table (line 31) | typedef struct sqliterk_table sqliterk_table;
  type sqliterk_column (line 32) | typedef struct sqliterk_column sqliterk_column;
  type sqliterk_notify (line 34) | typedef struct sqliterk_notify sqliterk_notify;
  type sqliterk_notify (line 35) | struct sqliterk_notify {
  type sqliterk_cipher_conf (line 49) | typedef struct sqliterk_cipher_conf {
  type sqlite3 (line 61) | typedef struct sqlite3 sqlite3;
  type sqliterk_master_info (line 62) | typedef struct sqliterk_master_info sqliterk_master_info;
  type sqliterk_type (line 113) | typedef enum {
  type sqliterk_value_type (line 131) | typedef enum {
  type sqliterk_loglevel (line 158) | typedef enum {
  type sqliterk_os (line 165) | typedef struct sqliterk_os sqliterk_os;
  type sqliterk_os (line 166) | struct sqliterk_os {

FILE: JetChat/Pods/SQLiteRepairKit/repair/sqliterk.c
  type sqliterk (line 31) | struct sqliterk {
  function sqliterkOpen (line 57) | int sqliterkOpen(const char *path,
  function sqliterk_set_recursive (line 98) | void sqliterk_set_recursive(sqliterk *rk, int recursive)
  function sqliterkParse (line 103) | int sqliterkParse(sqliterk *rk)
  function sqliterkParsePage (line 117) | int sqliterkParsePage(sqliterk *rk, int pageno)
  function sqliterkParseBtree (line 140) | static int sqliterkParseBtree(sqliterk *rk, sqliterk_btree *btree)
  function sqliterkParseMaster (line 156) | int sqliterkParseMaster(sqliterk *rk)
  function sqliterkClose (line 163) | int sqliterkClose(sqliterk *rk)
  function sqliterkNotify_onBeginParseBtree (line 176) | static void sqliterkNotify_onBeginParseBtree(sqliterk *rk,
  function sqliterkNotify_onEndParseBtree (line 189) | static void
  function sqliterkNotify_onParseColumn (line 197) | static int sqliterkNotify_onParseColumn(sqliterk *rk,
  function sqliterkNotify_onBeginParsePage (line 272) | static int
  function sqliterkNotify_onEndParsePage (line 283) | static void sqliterkNotify_onEndParsePage(sqliterk *rk,
  function sqliterkSetNotify (line 314) | int sqliterkSetNotify(sqliterk *rk, sqliterk_notify notify)
  function sqliterkSetUserInfo (line 323) | int sqliterkSetUserInfo(sqliterk *rk, void *userInfo)
  function sqliterkGetParsedPageCount (line 340) | int sqliterkGetParsedPageCount(sqliterk *rk)
  function sqliterkGetValidPageCount (line 348) | int sqliterkGetValidPageCount(sqliterk *rk)
  function sqliterkGetPageCount (line 356) | int sqliterkGetPageCount(sqliterk *rk)
  function sqliterkGetIntegrity (line 364) | unsigned int sqliterkGetIntegrity(sqliterk *rk)

FILE: JetChat/Pods/SQLiteRepairKit/repair/sqliterk.h
  type sqliterk (line 24) | typedef struct sqliterk sqliterk;
  type sqliterk_cipher_conf (line 25) | typedef struct sqliterk_cipher_conf sqliterk_cipher_conf;
  type sqliterk_notify (line 26) | typedef struct sqliterk_notify sqliterk_notify;

FILE: JetChat/Pods/SQLiteRepairKit/repair/sqliterk_api.c
  function sqliterk_register_notify (line 30) | int sqliterk_register_notify(sqliterk *rk, sqliterk_notify notify)
  function sqliterk_open (line 35) | int sqliterk_open(const char *path,
  function sqliterk_parse (line 47) | int sqliterk_parse(sqliterk *rk)
  function sqliterk_parse_page (line 52) | int sqliterk_parse_page(sqliterk *rk, int pageno)
  function sqliterk_parse_master (line 57) | int sqliterk_parse_master(sqliterk *rk)
  function sqliterk_close (line 62) | int sqliterk_close(sqliterk *rk)
  function sqliterk_set_user_info (line 72) | void sqliterk_set_user_info(sqliterk *rk, void *userInfo)
  function sqliterk_column_count (line 77) | int sqliterk_column_count(sqliterk_column *column)
  function sqliterk_value_type (line 82) | sqliterk_value_type sqliterk_column_type(sqliterk_column *column, int in...
  function sqliterk_column_integer (line 87) | int sqliterk_column_integer(sqliterk_column *column, int index)
  function sqliterk_column_integer64 (line 92) | int64_t sqliterk_column_integer64(sqliterk_column *column, int index)
  function sqliterk_column_number (line 97) | double sqliterk_column_number(sqliterk_column *column, int index)
  function sqliterk_column_bytes (line 112) | int sqliterk_column_bytes(sqliterk_column *column, int index)
  function sqliterk_column_rowid (line 117) | int64_t sqliterk_column_rowid(sqliterk_column *column)
  function sqliterk_table_set_user_info (line 127) | void sqliterk_table_set_user_info(sqliterk_table *table, void *userInfo)
  function sqliterk_type (line 137) | sqliterk_type sqliterk_table_type(sqliterk_table *table)
  function sqliterk_register (line 142) | int sqliterk_register(sqliterk_os os)
  function sqliterk_table_root (line 147) | int sqliterk_table_root(sqliterk_table *table)
  function sqliterk_parsed_page_count (line 158) | int sqliterk_parsed_page_count(sqliterk *rk)
  function sqliterk_valid_page_count (line 163) | int sqliterk_valid_page_count(sqliterk *rk)
  function sqliterk_page_count (line 168) | int sqliterk_page_count(sqliterk *rk)
  function sqliterk_integrity (line 173) | unsigned int sqliterk_integrity(sqliterk *rk)
  function sqliterk_cipher_conf_set_key (line 178) | void sqliterk_cipher_conf_set_key(sqliterk_cipher_conf *conf, const void...

FILE: JetChat/Pods/SQLiteRepairKit/repair/sqliterk_btree.c
  type sqliterk_btree (line 43) | struct sqliterk_btree {
  function sqliterkBtreeOpen (line 59) | int sqliterkBtreeOpen(sqliterk *rk,
  function sqliterkBtreeParse (line 124) | int sqliterkBtreeParse(sqliterk_btree *btree)
  function sqliterkBtreeParsePage (line 145) | static int sqliterkBtreeParsePage(sqliterk_btree *btree, int pageno)
  function sqliterkBtreeParseCell (line 274) | static int sqliterkBtreeParseCell(sqliterk_btree *btree,
  function sqliterkBtreeParsePayload (line 332) | static int sqliterkBtreeParsePayload(sqliterk_btree *btree,
  function sqliterkBtreeClose (line 487) | int sqliterkBtreeClose(sqliterk_btree *btree)
  function sqliterkBtreeSetMeta (line 508) | int sqliterkBtreeSetMeta(sqliterk_btree *btree,
  function sqliterk_btree_type (line 554) | sqliterk_btree_type sqliterkBtreeGetType(sqliterk_btree *btree)
  function sqliterkBtreeSetType (line 562) | int sqliterkBtreeSetType(sqliterk_btree *btree, sqliterk_btree_type type)
  function sqliterkBtreeIsSystemType (line 575) | int sqliterkBtreeIsSystemType(sqliterk_btree_type type)
  function sqliterkBtreeSetNotify (line 584) | void sqliterkBtreeSetNotify(sqliterk_btree *btree,
  function sqliterkBtreeSetUserInfo (line 593) | void sqliterkBtreeSetUserInfo(sqliterk_btree *btree, void *userInfo)
  function sqliterk_page (line 609) | sqliterk_page *sqliterkBtreeGetRootPage(sqliterk_btree *btree)
  function sqliterkBtreeGetLengthForSerialType (line 648) | static int sqliterkBtreeGetLengthForSerialType(int serialType)

FILE: JetChat/Pods/SQLiteRepairKit/repair/sqliterk_btree.h
  type sqliterk_btree (line 25) | typedef struct sqliterk_btree sqliterk_btree;
  type sqliterk_pager (line 26) | typedef struct sqliterk_pager sqliterk_pager;
  type sqliterk_values (line 27) | typedef struct sqliterk_values sqliterk_values;
  type sqliterk_column (line 28) | typedef struct sqliterk_column sqliterk_column;
  type sqliterk_page (line 29) | typedef struct sqliterk_page sqliterk_page;
  type sqliterk (line 30) | typedef struct sqliterk sqliterk;
  type sqliterk_btree_notify (line 31) | typedef struct sqliterk_btree_notify sqliterk_btree_notify;
  type sqliterk_btree_type (line 33) | typedef enum {
  type sqliterk_btree_notify (line 47) | struct sqliterk_btree_notify {

FILE: JetChat/Pods/SQLiteRepairKit/repair/sqliterk_column.c
  type sqliterk_column (line 24) | struct sqliterk_column {
  function sqliterkColumnAlloc (line 30) | int sqliterkColumnAlloc(sqliterk_column **column)
  function sqliterkColumnFree (line 60) | int sqliterkColumnFree(sqliterk_column *column)
  function sqliterk_values (line 75) | sqliterk_values *sqliterkColumnGetValues(sqliterk_column *column)
  function sqliterkColumnSetRowId (line 83) | void sqliterkColumnSetRowId(sqliterk_column *column, int64_t rowid)
  function sqliterkColumnGetRowId (line 90) | int64_t sqliterkColumnGetRowId(sqliterk_column *column)
  function sqliterk_values (line 98) | sqliterk_values *sqliterkColumnGetOverflowPages(sqliterk_column *column)
  function sqliterkColumnClear (line 106) | int sqliterkColumnClear(sqliterk_column *column)

FILE: JetChat/Pods/SQLiteRepairKit/repair/sqliterk_column.h
  type sqliterk_column (line 26) | typedef struct sqliterk_column sqliterk_column;

FILE: JetChat/Pods/SQLiteRepairKit/repair/sqliterk_crypto.c
  type codec_ctx (line 41) | typedef struct codec_ctx codec_ctx;
  type sqlite3_file_rkredir (line 114) | typedef struct {
  function sqliterkRead (line 120) | int sqliterkRead(sqlite3_file *fd, void *data, int iAmt, sqlite3_int64 i...
  function sqliterkCryptoSetCipher (line 133) | int sqliterkCryptoSetCipher(sqliterk_pager *pager,
  function sqliterkCryptoFreeCodec (line 225) | void sqliterkCryptoFreeCodec(sqliterk_pager *pager)
  function sqliterkCryptoDecode (line 233) | int sqliterkCryptoDecode(sqliterk_codec *codec, int pgno, void *data)

FILE: JetChat/Pods/SQLiteRepairKit/repair/sqliterk_crypto.h
  type sqliterk_file (line 28) | typedef struct sqliterk_file sqliterk_file;
  type sqliterk_pager (line 29) | typedef struct sqliterk_pager sqliterk_pager;
  type sqliterk_codec (line 30) | typedef struct codec_ctx sqliterk_codec;
  type sqliterk_cipher_conf (line 31) | typedef struct sqliterk_cipher_conf sqliterk_cipher_conf;

FILE: JetChat/Pods/SQLiteRepairKit/repair/sqliterk_os.c
  type sqliterk_file (line 30) | struct sqliterk_file {
  function sqliterkOSReadOnlyOpen (line 36) | int sqliterkOSReadOnlyOpen(const char *path, sqliterk_file **file)
  function sqliterkOSClose (line 78) | int sqliterkOSClose(sqliterk_file *file)
  function sqliterkOSRead (line 96) | int sqliterkOSRead(sqliterk_file *file,
  function sqliterkOSFileSize (line 134) | int sqliterkOSFileSize(sqliterk_file *file, size_t *filesize)
  function sqliterkOSFree (line 158) | void sqliterkOSFree(void *p)
  function sqliterkDefaultLog (line 163) | static void
  function sqliterkOSLog (line 172) | int sqliterkOSLog(sqliterk_loglevel loglevel,
  function sqliterkOSRegister (line 189) | int sqliterkOSRegister(sqliterk_os os)

FILE: JetChat/Pods/SQLiteRepairKit/repair/sqliterk_os.h
  type sqliterk_file (line 28) | typedef struct sqliterk_file sqliterk_file;
  type sqliterk_os (line 31) | typedef struct sqliterk_os sqliterk_os;

FILE: JetChat/Pods/SQLiteRepairKit/repair/sqliterk_output.cpp
  type Op (line 52) | enum Op {
  function setKey (line 63) | void setKey(const void *key, unsigned int keyLength)
  function cipher (line 74) | void cipher(unsigned char *data, unsigned int length)
  type sqliterk_master_entity (line 113) | struct sqliterk_master_entity {
    method sqliterk_master_entity (line 118) | sqliterk_master_entity() {}
    method sqliterk_master_entity (line 120) | sqliterk_master_entity(sqliterk_type type_,
  type sqliterk_master_info (line 128) | struct sqliterk_master_info : public sqliterk_master_map {
  type sqliterk_output_ctx (line 131) | struct sqliterk_output_ctx {
  function dummyParseTableCallback (line 153) | static void dummyParseTableCallback(sqliterk *rk, sqliterk_table *table)
  function master_onParseColumn (line 157) | static int master_onParseColumn(sqliterk *rk,
  function fini_insert (line 203) | static void fini_insert(sqliterk_output_ctx *ctx)
  function init_insert (line 218) | static int init_insert(sqliterk_output_ctx *ctx, const std::string &table)
  function table_onBeginParseTable (line 290) | static void table_onBeginParseTable(sqliterk *rk, sqliterk_table *table)
  function table_onParseColumn (line 300) | static int table_onParseColumn(sqliterk *rk,
  function sqliterk_output (line 410) | int sqliterk_output(sqliterk *rk,
  function sqliterk_output_cb (line 418) | int sqliterk_output_cb(sqliterk *rk,
  function sqliterk_cancel (line 579) | void sqliterk_cancel(sqliterk *rk)
  function sqliterk_make_master (line 588) | int sqliterk_make_master(const char **tables,
  type master_file_header (line 613) | struct master_file_header {
  type master_file_entity (line 620) | struct master_file_entity {
  function sqliterk_save_master (line 632) | int sqliterk_save_master(sqlite3 *db,
  function inflate_read (line 835) | static int inflate_read(FILE *fp,
  function pstrcmp (line 874) | static int pstrcmp(const void *p1, const void *p2)
  function sqliterk_load_master (line 879) | int sqliterk_load_master(const char *path,
  function sqliterk_free_master (line 1021) | void sqliterk_free_master(sqliterk_master_info *master)

FILE: JetChat/Pods/SQLiteRepairKit/repair/sqliterk_pager.c
  type sqliterk_page (line 35) | struct sqliterk_page {
  function sqliterkPagerOpen (line 41) | int sqliterkPagerOpen(const char *path,
  function sqliterkPagerParseHeader (line 137) | static int sqliterkPagerParseHeader(sqliterk_pager *pager, int forcePage...
  function sqliterkPagerClose (line 285) | int sqliterkPagerClose(sqliterk_pager *pager)
  function sqliterkPagerGetPageCount (line 308) | int sqliterkPagerGetPageCount(sqliterk_pager *pager)
  function sqliterkPagerIsPagenoValid (line 316) | int sqliterkPagerIsPagenoValid(sqliterk_pager *pager, int pageno)
  function sqliterkPageAcquireType (line 325) | int sqliterkPageAcquireType(sqliterk_pager *pager,
  function sqliterkPageAcquire (line 368) | int sqliterkPageAcquire(sqliterk_pager *pager, int pageno, sqliterk_page...
  function sqliterkPageAcquireOverflow (line 374) | int sqliterkPageAcquireOverflow(sqliterk_pager *pager,
  function sqliterkPageAcquireOne (line 382) | static int sqliterkPageAcquireOne(sqliterk_pager *pager,
  function sqliterkPageRelease (line 450) | int sqliterkPageRelease(sqliterk_page *page)
  function sqliterkPageClearData (line 464) | int sqliterkPageClearData(sqliterk_page *page)
  function sqliterkPagerGetSize (line 484) | int sqliterkPagerGetSize(sqliterk_pager *pager)
  function sqliterkPagerGetUsableSize (line 492) | int sqliterkPagerGetUsableSize(sqliterk_pager *pager)
  function sqliterkPageGetPageno (line 500) | int sqliterkPageGetPageno(sqliterk_page *page)
  function sqliterk_page_type (line 507) | sqliterk_page_type sqliterkPageGetType(sqliterk_page *page)
  function sqliterkPagenoHeaderOffset (line 515) | int sqliterkPagenoHeaderOffset(int pageno)
  function sqliterkPageHeaderOffset (line 523) | int sqliterkPageHeaderOffset(sqliterk_page *page)
  function sqliterkPagerSetStatus (line 554) | void sqliterkPagerSetStatus(sqliterk_pager *pager,
  function sqliterk_status (line 568) | sqliterk_status sqliterkPagerGetStatus(sqliterk_pager *pager, int pageno)
  function sqliterkPagerGetParsedPageCount (line 577) | int sqliterkPagerGetParsedPageCount(sqliterk_pager *pager)
  function sqliterkPagerGetValidPageCount (line 592) | int sqliterkPagerGetValidPageCount(sqliterk_pager *pager)
  function sqliterkPagerGetIntegrity (line 600) | unsigned int sqliterkPagerGetIntegrity(sqliterk_pager *pager)

FILE: JetChat/Pods/SQLiteRepairKit/repair/sqliterk_pager.h
  type sqliterk_status (line 34) | typedef enum {
  type sqliterk_page_type (line 44) | typedef enum {
  type sqliterk_pager (line 54) | typedef struct sqliterk_pager sqliterk_pager;
  type sqliterk_page (line 56) | typedef struct sqliterk_page sqliterk_page;
  type sqliterk_file (line 58) | typedef struct sqliterk_file sqliterk_file;
  type sqliterk_cipher_conf (line 59) | typedef struct sqliterk_cipher_conf sqliterk_cipher_conf;
  type sqliterk_pager (line 60) | struct sqliterk_pager {

FILE: JetChat/Pods/SQLiteRepairKit/repair/sqliterk_util.c
  function sqliterkParseInt (line 27) | int sqliterkParseInt(const unsigned char *data,
  function sqliterkParseInt64 (line 44) | int sqliterkParseInt64(const unsigned char *data,
  function sqliterkParseVarint (line 92) | int sqliterkParseVarint(const unsigned char *data,
  function sqliterkParseVarint64 (line 109) | int sqliterkParseVarint64(const unsigned char *data,
  function sqliterkGetMaxVarintLength (line 134) | int sqliterkGetMaxVarintLength()
  function sqliterkParseNumber (line 139) | int sqliterkParseNumber(const unsigned char *data, int offset, double *v...

FILE: JetChat/Pods/SQLiteRepairKit/repair/sqliterk_values.c
  type sqliterk_integer (line 31) | typedef int64_t sqliterk_integer;
  type sqliterk_number (line 32) | typedef double sqliterk_number;
  type sqliterk_text (line 33) | typedef struct sqliterk_text sqliterk_text;
  type sqliterk_text (line 34) | struct sqliterk_text {
  type sqliterk_binary (line 38) | typedef struct sqliterk_binary sqliterk_binary;
  type sqliterk_binary (line 39) | struct sqliterk_binary {
  type sqliterk_any (line 43) | typedef union sqliterk_any sqliterk_any;
  type sqliterk_value (line 52) | struct sqliterk_value {
  type sqliterk_values (line 57) | struct sqliterk_values {
  function sqliterkValuesAlloc (line 63) | int sqliterkValuesAlloc(sqliterk_values **values)
  function sqliterkValuesFree (line 87) | int sqliterkValuesFree(sqliterk_values *values)
  function sqliterkValuesClear (line 108) | int sqliterkValuesClear(sqliterk_values *values)
  function sqliterkValuesAutoGrow (line 123) | static int sqliterkValuesAutoGrow(sqliterk_values *values)
  function sqliterkValuesGetCount (line 151) | int sqliterkValuesGetCount(sqliterk_values *values)
  function sqliterk_value_type (line 159) | sqliterk_value_type sqliterkValuesGetType(sqliterk_values *values, int i...
  function sqliterkValuesGetInteger64 (line 167) | int64_t sqliterkValuesGetInteger64(sqliterk_values *values, int index)
  function sqliterkValuesGetInteger (line 189) | int sqliterkValuesGetInteger(sqliterk_values *values, int index)
  function sqliterkValuesGetNumber (line 194) | double sqliterkValuesGetNumber(sqliterk_values *values, int index)
  function sqliterkValuesGetBytes (line 248) | int sqliterkValuesGetBytes(sqliterk_values *values, int index)
  function sqliterkValuesAddInteger64 (line 267) | int sqliterkValuesAddInteger64(sqliterk_values *values, int64_t i)
  function sqliterkValuesAddInteger (line 292) | int sqliterkValuesAddInteger(sqliterk_values *values, int i)
  function sqliterkValuesAddNumber (line 297) | int sqliterkValuesAddNumber(sqliterk_values *values, double d)
  function sqliterkValuesAddText (line 322) | int sqliterkValuesAddText(sqliterk_values *values, const char *t)
  function sqliterkValuesAddNoTerminatorText (line 327) | int sqliterkValuesAddNoTerminatorText(sqliterk_values *values,
  function sqliterkValuesAddBinary (line 361) | int sqliterkValuesAddBinary(sqliterk_values *values, const void *b, cons...
  function sqliterkValuesAddNull (line 391) | int sqliterkValuesAddNull(sqliterk_values *values)
  function sqliterkValueClear (line 407) | int sqliterkValueClear(sqliterk_value *value)

FILE: JetChat/Pods/SQLiteRepairKit/repair/sqliterk_values.h
  type sqliterk_values (line 28) | typedef struct sqliterk_values sqliterk_values;
  type sqliterk_value (line 29) | typedef struct sqliterk_value sqliterk_value;

FILE: JetChat/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZAssetCell.h
  type TZAssetCellType (line 12) | typedef enum : NSUInteger {

FILE: JetChat/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/TZAssetModel.h
  type TZAssetModelMediaType (line 13) | typedef enum : NSUInteger {

FILE: JetChat/Pods/TZImagePickerController/TZImagePickerController/TZImagePickerController/UIView+TZLayout.h
  type TZOscillatoryAnimationType (line 11) | typedef enum : NSUInteger {

FILE: JetChat/Pods/WCDB.swift/swift/source/util/SQLite-Bridging.c
  function sqlite3_bind_text_transient (line 24) | int sqlite3_bind_text_transient(sqlite3_stmt *a, int b, const char *c, i...
  function sqlite3_bind_blob_transient (line 29) | int sqlite3_bind_blob_transient(sqlite3_stmt *a, int b, const void *c, i...
  function sqlite3_config_multithread (line 34) | int sqlite3_config_multithread(void)
  function sqlite3_config_memstatus (line 39) | int sqlite3_config_memstatus(int a)
  function sqlite3_config_log (line 44) | int sqlite3_config_log(sqlite3_global_log a, void *b)

FILE: JetChat/Pods/WCDB.swift/swift/source/util/SQLite-Bridging.h
  type Tokenizer (line 27) | struct Tokenizer {
  type Tokenizer (line 31) | typedef struct Tokenizer Tokenizer;
  type Cursor (line 33) | struct Cursor {
  type Cursor (line 37) | typedef struct Cursor Cursor;
  type sqlite3_stmt (line 39) | typedef struct sqlite3_stmt sqlite3_stmt;

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/fts3/fts3.c
  function sqlite3Fts3Always (line 318) | int sqlite3Fts3Always(int b) { assert( b ); return b; }
  function sqlite3Fts3Never (line 319) | int sqlite3Fts3Never(int b)  { assert( !b ); return b; }
  function sqlite3Fts3PutVarint (line 328) | int sqlite3Fts3PutVarint(char *p, sqlite_int64 v){
  function sqlite3Fts3GetVarint (line 352) | int sqlite3Fts3GetVarint(const char *p, sqlite_int64 *v){
  function sqlite3Fts3GetVarint32 (line 377) | int sqlite3Fts3GetVarint32(const char *p, int *pi){
  function sqlite3Fts3VarintLen (line 398) | int sqlite3Fts3VarintLen(sqlite3_uint64 v){
  function sqlite3Fts3Dequote (line 421) | void sqlite3Fts3Dequote(char *z){
  function fts3GetDeltaVarint (line 450) | static void fts3GetDeltaVarint(char **pp, sqlite3_int64 *pVal){
  function fts3GetReverseVarint (line 465) | static void fts3GetReverseVarint(
  function fts3DisconnectMethod (line 487) | static int fts3DisconnectMethod(sqlite3_vtab *pVtab){
  function sqlite3Fts3ErrMsg (line 514) | void sqlite3Fts3ErrMsg(char **pzErr, const char *zFormat, ...){
  function fts3DbExec (line 529) | static void fts3DbExec(
  function fts3DestroyMethod (line 552) | static int fts3DestroyMethod(sqlite3_vtab *pVtab){
  function fts3DeclareVtab (line 584) | static void fts3DeclareVtab(int *pRc, Fts3Table *p){
  function sqlite3Fts3CreateStatTable (line 621) | void sqlite3Fts3CreateStatTable(int *pRc, Fts3Table *p){
  function fts3CreateTables (line 639) | static int fts3CreateTables(Fts3Table *p){
  function fts3DatabasePageSize (line 704) | static void fts3DatabasePageSize(int *pRc, Fts3Table *p){
  function fts3IsSpecialColumn (line 738) | static int fts3IsSpecialColumn(
  function fts3Appendf (line 763) | static void fts3Appendf(
  function fts3GobbleInt (line 930) | static int fts3GobbleInt(const char **pp, int *pnOut){
  function fts3PrefixParameter (line 965) | static int fts3PrefixParameter(
  function fts3ContentColumns (line 1034) | static int fts3ContentColumns(
  function fts3InitVtab (line 1109) | static int fts3InitVtab(
  function fts3ConnectMethod (line 1486) | static int fts3ConnectMethod(
  function fts3CreateMethod (line 1496) | static int fts3CreateMethod(
  function fts3SetEstimatedRows (line 1512) | static void fts3SetEstimatedRows(sqlite3_index_info *pIdxInfo, i64 nRow){
  function fts3SetUniqueFlag (line 1525) | static void fts3SetUniqueFlag(sqlite3_index_info *pIdxInfo){
  function fts3BestIndexMethod (line 1541) | static int fts3BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *...
  function fts3OpenMethod (line 1666) | static int fts3OpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppC...
  function fts3CloseMethod (line 1687) | static int fts3CloseMethod(sqlite3_vtab_cursor *pCursor){
  function fts3CursorSeekStmt (line 1711) | static int fts3CursorSeekStmt(Fts3Cursor *pCsr, sqlite3_stmt **ppStmt){
  function fts3CursorSeek (line 1730) | static int fts3CursorSeek(sqlite3_context *pContext, Fts3Cursor *pCsr){
  function fts3ScanInteriorNode (line 1775) | static int fts3ScanInteriorNode(
  function fts3SelectLeaf (line 1896) | static int fts3SelectLeaf(
  function fts3PutDeltaVarint (line 1944) | static void fts3PutDeltaVarint(
  function fts3PoslistCopy (line 1968) | static void fts3PoslistCopy(char **pp, char **ppPoslist){
  function fts3ColumnlistCopy (line 2015) | static void fts3ColumnlistCopy(char **pp, char **ppPoslist){
  function fts3ReadNextPos (line 2060) | static void fts3ReadNextPos(
  function fts3PutColNumber (line 2081) | static int fts3PutColNumber(char **pp, int iCol){
  function fts3PoslistMerge (line 2099) | static void fts3PoslistMerge(
  function fts3PoslistPhraseMerge (line 2189) | static int fts3PoslistPhraseMerge(
  function fts3PoslistNearMerge (line 2313) | static int fts3PoslistNearMerge(
  type TermSelect (line 2352) | typedef struct TermSelect TermSelect;
  type TermSelect (line 2353) | struct TermSelect {
  function fts3GetDeltaVarint3 (line 2371) | static void fts3GetDeltaVarint3(
  function fts3PutDeltaVarint3 (line 2405) | static void fts3PutDeltaVarint3(
  function fts3DoclistOrMerge (line 2451) | static int fts3DoclistOrMerge(
  function fts3DoclistPhraseMerge (line 2543) | static int fts3DoclistPhraseMerge(
  function sqlite3Fts3FirstFilter (line 2614) | int sqlite3Fts3FirstFilter(
  function fts3TermSelectFinishMerge (line 2666) | static int fts3TermSelectFinishMerge(Fts3Table *p, TermSelect *pTS){
  function fts3TermSelectMerge (line 2720) | static int fts3TermSelectMerge(
  function fts3SegReaderCursorAppend (line 2792) | static int fts3SegReaderCursorAppend(
  function fts3SegReaderCursor (line 2817) | static int fts3SegReaderCursor(
  function sqlite3Fts3SegReaderCursor (line 2891) | int sqlite3Fts3SegReaderCursor(
  function fts3SegReaderCursorAddZero (line 2923) | static int fts3SegReaderCursorAddZero(
  function fts3TermSegReaderCursor (line 2948) | static int fts3TermSegReaderCursor(
  function fts3SegReaderCursorFree (line 3005) | static void fts3SegReaderCursorFree(Fts3MultiSegReader *pSegcsr){
  function fts3TermSelect (line 3014) | static int fts3TermSelect(
  function fts3DoclistCountDocids (line 3071) | static int fts3DoclistCountDocids(char *aList, int nList){
  function fts3NextMethod (line 3097) | static int fts3NextMethod(sqlite3_vtab_cursor *pCursor){
  function sqlite3_int64 (line 3132) | static sqlite3_int64 fts3DocidRange(sqlite3_value *pVal, i64 iDefault){
  function fts3FilterMethod (line 3158) | static int fts3FilterMethod(
  function fts3EofMethod (line 3275) | static int fts3EofMethod(sqlite3_vtab_cursor *pCursor){
  function fts3RowidMethod (line 3285) | static int fts3RowidMethod(sqlite3_vtab_cursor *pCursor, sqlite_int64 *p...
  function fts3ColumnMethod (line 3302) | static int fts3ColumnMethod(
  function fts3UpdateMethod (line 3352) | static int fts3UpdateMethod(
  function fts3SyncMethod (line 3365) | static int fts3SyncMethod(sqlite3_vtab *pVtab){
  function fts3SetHasStat (line 3414) | static int fts3SetHasStat(Fts3Table *p){
  function fts3BeginMethod (line 3438) | static int fts3BeginMethod(sqlite3_vtab *pVtab){
  function fts3CommitMethod (line 3455) | static int fts3CommitMethod(sqlite3_vtab *pVtab){
  function fts3RollbackMethod (line 3470) | static int fts3RollbackMethod(sqlite3_vtab *pVtab){
  function fts3ReversePoslist (line 3485) | static void fts3ReversePoslist(char *pStart, char **ppPoslist){
  function fts3FunctionArg (line 3528) | static int fts3FunctionArg(
  function fts3SnippetFunc (line 3551) | static void fts3SnippetFunc(
  function fts3OffsetsFunc (line 3594) | static void fts3OffsetsFunc(
  function fts3OptimizeFunc (line 3620) | static void fts3OptimizeFunc(
  function fts3MatchinfoFunc (line 3654) | static void fts3MatchinfoFunc(
  function fts3FindFunctionMethod (line 3674) | static int fts3FindFunctionMethod(
  function fts3RenameMethod (line 3710) | static int fts3RenameMethod(
  function fts3SavepointMethod (line 3768) | static int fts3SavepointMethod(sqlite3_vtab *pVtab, int iSavepoint){
  function fts3ReleaseMethod (line 3785) | static int fts3ReleaseMethod(sqlite3_vtab *pVtab, int iSavepoint){
  function fts3RollbackToMethod (line 3800) | static int fts3RollbackToMethod(sqlite3_vtab *pVtab, int iSavepoint){
  function hashDestroy (line 3841) | static void hashDestroy(void *p){
  function sqlite3Fts3Init (line 3872) | int sqlite3Fts3Init(sqlite3 *db){
  function fts3EvalAllocateReaders (line 3982) | static void fts3EvalAllocateReaders(
  function fts3EvalPhraseMergeToken (line 4024) | static int fts3EvalPhraseMergeToken(
  function fts3EvalPhraseLoad (line 4088) | static int fts3EvalPhraseLoad(
  function fts3EvalDeferredPhrase (line 4124) | static int fts3EvalDeferredPhrase(Fts3Cursor *pCsr, Fts3Phrase *pPhrase){
  function fts3EvalPhraseStart (line 4236) | static int fts3EvalPhraseStart(Fts3Cursor *pCsr, int bOptOk, Fts3Phrase ...
  function sqlite3Fts3DoclistPrev (line 4293) | void sqlite3Fts3DoclistPrev(
  function sqlite3Fts3DoclistNext (line 4349) | void sqlite3Fts3DoclistNext(
  function fts3EvalDlPhraseNext (line 4386) | static void fts3EvalDlPhraseNext(
  type TokenDoclist (line 4432) | typedef struct TokenDoclist TokenDoclist;
  type TokenDoclist (line 4433) | struct TokenDoclist {
  function incrPhraseTokenNext (line 4449) | static int incrPhraseTokenNext(
  function fts3EvalIncrPhraseNext (line 4501) | static int fts3EvalIncrPhraseNext(
  function fts3EvalPhraseNext (line 4601) | static int fts3EvalPhraseNext(
  function fts3EvalStartReaders (line 4640) | static void fts3EvalStartReaders(
  type Fts3TokenAndCost (line 4676) | typedef struct Fts3TokenAndCost Fts3TokenAndCost;
  type Fts3TokenAndCost (line 4677) | struct Fts3TokenAndCost {
  function fts3EvalTokenCosts (line 4693) | static void fts3EvalTokenCosts(
  function fts3EvalAverageDocsize (line 4747) | static int fts3EvalAverageDocsize(Fts3Cursor *pCsr, int *pnPage){
  function fts3EvalSelectDeferred (line 4808) | static int fts3EvalSelectDeferred(
  function fts3EvalStart (line 4941) | static int fts3EvalStart(Fts3Cursor *pCsr){
  function fts3EvalInvalidatePoslist (line 4991) | static void fts3EvalInvalidatePoslist(Fts3Phrase *pPhrase){
  function fts3EvalNearTrim (line 5022) | static int fts3EvalNearTrim(
  function fts3EvalNextRow (line 5096) | static void fts3EvalNextRow(
  function fts3EvalNearTest (line 5237) | static int fts3EvalNearTest(Fts3Expr *pExpr, int *pRc){
  function fts3EvalTestExpr (line 5323) | static int fts3EvalTestExpr(
  function sqlite3Fts3EvalTestDeferred (line 5434) | int sqlite3Fts3EvalTestDeferred(Fts3Cursor *pCsr, int *pRc){
  function fts3EvalNext (line 5464) | static int fts3EvalNext(Fts3Cursor *pCsr){
  function fts3EvalRestart (line 5505) | static void fts3EvalRestart(
  function fts3EvalUpdateCounts (line 5548) | static void fts3EvalUpdateCounts(Fts3Expr *pExpr){
  function fts3EvalGatherStats (line 5591) | static int fts3EvalGatherStats(
  function sqlite3Fts3EvalPhraseStats (line 5702) | int sqlite3Fts3EvalPhraseStats(
  function sqlite3Fts3EvalPhrasePoslist (line 5750) | int sqlite3Fts3EvalPhrasePoslist(
  function sqlite3Fts3EvalPhraseCleanup (line 5884) | void sqlite3Fts3EvalPhraseCleanup(Fts3Phrase *pPhrase){
  function sqlite3Fts3Corrupt (line 5902) | int sqlite3Fts3Corrupt(){
  function sqlite3_fts3_init (line 5912) | __declspec(dllexport)

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/fts3/fts3Int.h
  type u8 (line 156) | typedef unsigned char u8;
  type i16 (line 157) | typedef short int i16;
  type u32 (line 158) | typedef unsigned int u32;
  type sqlite3_uint64 (line 159) | typedef sqlite3_uint64 u64;
  type sqlite3_int64 (line 160) | typedef sqlite3_int64 i64;
  type Fts3Table (line 194) | typedef struct Fts3Table Fts3Table;
  type Fts3Cursor (line 195) | typedef struct Fts3Cursor Fts3Cursor;
  type Fts3Expr (line 196) | typedef struct Fts3Expr Fts3Expr;
  type Fts3Phrase (line 197) | typedef struct Fts3Phrase Fts3Phrase;
  type Fts3PhraseToken (line 198) | typedef struct Fts3PhraseToken Fts3PhraseToken;
  type Fts3Doclist (line 200) | typedef struct Fts3Doclist Fts3Doclist;
  type Fts3SegFilter (line 201) | typedef struct Fts3SegFilter Fts3SegFilter;
  type Fts3DeferredToken (line 202) | typedef struct Fts3DeferredToken Fts3DeferredToken;
  type Fts3SegReader (line 203) | typedef struct Fts3SegReader Fts3SegReader;
  type Fts3MultiSegReader (line 204) | typedef struct Fts3MultiSegReader Fts3MultiSegReader;
  type MatchinfoBuffer (line 206) | typedef struct MatchinfoBuffer MatchinfoBuffer;
  type Fts3Table (line 215) | struct Fts3Table {
  type Fts3Cursor (line 297) | struct Fts3Cursor {
  type Fts3Doclist (line 354) | struct Fts3Doclist {
  type Fts3PhraseToken (line 371) | struct Fts3PhraseToken {
  type Fts3Phrase (line 384) | struct Fts3Phrase {
  type Fts3Expr (line 424) | struct Fts3Expr {
  type Fts3SegFilter (line 514) | struct Fts3SegFilter {
  type Fts3MultiSegReader (line 521) | struct Fts3MultiSegReader {

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/fts3/fts3_aux.c
  type Fts3auxTable (line 20) | typedef struct Fts3auxTable Fts3auxTable;
  type Fts3auxCursor (line 21) | typedef struct Fts3auxCursor Fts3auxCursor;
  type Fts3auxTable (line 23) | struct Fts3auxTable {
  type Fts3auxCursor (line 28) | struct Fts3auxCursor {
  function fts3auxConnectMethod (line 57) | static int fts3auxConnectMethod(
  function fts3auxDisconnectMethod (line 128) | static int fts3auxDisconnectMethod(sqlite3_vtab *pVtab){
  function fts3auxBestIndexMethod (line 149) | static int fts3auxBestIndexMethod(
  function fts3auxOpenMethod (line 219) | static int fts3auxOpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **...
  function fts3auxCloseMethod (line 235) | static int fts3auxCloseMethod(sqlite3_vtab_cursor *pCursor){
  function fts3auxGrowStatArray (line 248) | static int fts3auxGrowStatArray(Fts3auxCursor *pCsr, int nSize){
  function fts3auxNextMethod (line 267) | static int fts3auxNextMethod(sqlite3_vtab_cursor *pCursor){
  function fts3auxFilterMethod (line 361) | static int fts3auxFilterMethod(
  function fts3auxEofMethod (line 456) | static int fts3auxEofMethod(sqlite3_vtab_cursor *pCursor){
  function fts3auxColumnMethod (line 464) | static int fts3auxColumnMethod(
  function fts3auxRowidMethod (line 505) | static int fts3auxRowidMethod(
  function sqlite3Fts3InitAux (line 518) | int sqlite3Fts3InitAux(sqlite3 *db){

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/fts3/fts3_expr.c
  type ParseContext (line 92) | typedef struct ParseContext ParseContext;
  type ParseContext (line 93) | struct ParseContext {
  function fts3isspace (line 116) | static int fts3isspace(char c){
  function sqlite3Fts3OpenTokenizer (line 131) | int sqlite3Fts3OpenTokenizer(
  function getNextToken (line 176) | static int getNextToken(
  function getNextString (line 275) | static int getNextString(
  function getNextNode (line 393) | static int getNextNode(
  function opPrecedence (line 559) | static int opPrecedence(Fts3Expr *p){
  function insertBinaryOperator (line 580) | static void insertBinaryOperator(
  function fts3ExprParse (line 611) | static int fts3ExprParse(
  function fts3ExprCheckDepth (line 760) | static int fts3ExprCheckDepth(Fts3Expr *p, int nMaxDepth){
  function fts3ExprBalance (line 786) | static int fts3ExprBalance(Fts3Expr **pp, int nMaxDepth){
  function fts3ExprParseUnbalanced (line 960) | static int fts3ExprParseUnbalanced(
  function sqlite3Fts3ExprParse (line 1023) | int sqlite3Fts3ExprParse(
  function fts3FreeExprNode (line 1067) | static void fts3FreeExprNode(Fts3Expr *p){
  function sqlite3Fts3ExprFree (line 1081) | void sqlite3Fts3ExprFree(Fts3Expr *pDel){
  function queryTestTokenizer (line 1114) | static int queryTestTokenizer(
  function fts3ExprTest (line 1206) | static void fts3ExprTest(
  function sqlite3Fts3ExprInitTestInterface (line 1296) | int sqlite3Fts3ExprInitTestInterface(sqlite3* db){

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/fts3/fts3_hash.c
  function fts3HashFree (line 45) | static void fts3HashFree(void *p){
  function sqlite3Fts3HashInit (line 59) | void sqlite3Fts3HashInit(Fts3Hash *pNew, char keyClass, char copyKey){
  function sqlite3Fts3HashClear (line 74) | void sqlite3Fts3HashClear(Fts3Hash *pH){
  function fts3StrHash (line 97) | static int fts3StrHash(const void *pKey, int nKey){
  function fts3StrCompare (line 107) | static int fts3StrCompare(const void *pKey1, int n1, const void *pKey2, ...
  function fts3BinHash (line 115) | static int fts3BinHash(const void *pKey, int nKey){
  function fts3BinCompare (line 123) | static int fts3BinCompare(const void *pKey1, int n1, const void *pKey2, ...
  function fts3HashInsertElement (line 166) | static void fts3HashInsertElement(
  function fts3Rehash (line 196) | static int fts3Rehash(Fts3Hash *pH, int new_size){
  function Fts3HashElem (line 220) | static Fts3HashElem *fts3FindElementByHash(
  function fts3RemoveElementByHash (line 248) | static void fts3RemoveElementByHash(
  function Fts3HashElem (line 282) | Fts3HashElem *sqlite3Fts3HashFindElem(

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/fts3/fts3_hash.h
  type Fts3Hash (line 21) | typedef struct Fts3Hash Fts3Hash;
  type Fts3HashElem (line 22) | typedef struct Fts3HashElem Fts3HashElem;
  type Fts3Hash (line 32) | struct Fts3Hash {
  type Fts3HashElem (line 50) | struct Fts3HashElem {

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/fts3/fts3_icu.c
  type IcuTokenizer (line 27) | typedef struct IcuTokenizer IcuTokenizer;
  type IcuCursor (line 28) | typedef struct IcuCursor IcuCursor;
  type IcuTokenizer (line 30) | struct IcuTokenizer {
  type IcuCursor (line 35) | struct IcuCursor {
  function icuCreate (line 52) | static int icuCreate(
  function icuDestroy (line 82) | static int icuDestroy(sqlite3_tokenizer *pTokenizer){
  function icuOpen (line 94) | static int icuOpen(
  function icuClose (line 166) | static int icuClose(sqlite3_tokenizer_cursor *pCursor){
  function icuNext (line 177) | static int icuNext(
  function sqlite3Fts3IcuTokenizerModule (line 255) | void sqlite3Fts3IcuTokenizerModule(

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/fts3/fts3_porter.c
  type porter_tokenizer (line 38) | typedef struct porter_tokenizer {
  type porter_tokenizer_cursor (line 45) | typedef struct porter_tokenizer_cursor {
  function porterCreate (line 59) | static int porterCreate(
  function porterDestroy (line 78) | static int porterDestroy(sqlite3_tokenizer *pTokenizer){
  function porterOpen (line 89) | static int porterOpen(
  function porterClose (line 122) | static int porterClose(sqlite3_tokenizer_cursor *pCursor){
  function isConsonant (line 150) | static int isConsonant(const char *z){
  function isVowel (line 159) | static int isVowel(const char *z){
  function m_gt_0 (line 188) | static int m_gt_0(const char *z){
  function m_eq_1 (line 198) | static int m_eq_1(const char *z){
  function m_gt_1 (line 212) | static int m_gt_1(const char *z){
  function hasVowel (line 226) | static int hasVowel(const char *z){
  function doubleConsonant (line 237) | static int doubleConsonant(const char *z){
  function star_oh (line 249) | static int star_oh(const char *z){
  function stem (line 269) | static int stem(
  function copy_stemmer (line 294) | static void copy_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){
  function porter_stemmer (line 341) | static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pn...
  function porterNext (line 594) | static int porterNext(
  function sqlite3Fts3PorterTokenizerModule (line 656) | void sqlite3Fts3PorterTokenizerModule(

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/fts3/fts3_snippet.c
  type LoadDoclistCtx (line 43) | typedef struct LoadDoclistCtx LoadDoclistCtx;
  type LoadDoclistCtx (line 44) | struct LoadDoclistCtx {
  type SnippetIter (line 54) | typedef struct SnippetIter SnippetIter;
  type SnippetPhrase (line 55) | typedef struct SnippetPhrase SnippetPhrase;
  type SnippetFragment (line 56) | typedef struct SnippetFragment SnippetFragment;
  type SnippetIter (line 58) | struct SnippetIter {
  type SnippetPhrase (line 67) | struct SnippetPhrase {
  type SnippetFragment (line 76) | struct SnippetFragment {
  type MatchInfo (line 87) | typedef struct MatchInfo MatchInfo;
  type MatchInfo (line 88) | struct MatchInfo {
  type MatchinfoBuffer (line 102) | struct MatchinfoBuffer {
  type StrBuffer (line 116) | typedef struct StrBuffer StrBuffer;
  type StrBuffer (line 117) | struct StrBuffer {
  function MatchinfoBuffer (line 131) | static MatchinfoBuffer *fts3MIBufferNew(int nElem, const char *zMatchinfo){
  function fts3MIBufferFree (line 150) | static void fts3MIBufferFree(void *p){
  function fts3MIBufferSetGlobal (line 192) | static void fts3MIBufferSetGlobal(MatchinfoBuffer *p){
  function sqlite3Fts3MIBufferFree (line 200) | void sqlite3Fts3MIBufferFree(MatchinfoBuffer *p){
  function fts3GetDeltaPosition (line 235) | static void fts3GetDeltaPosition(char **pp, int *piPos){
  function fts3ExprIterate2 (line 244) | static int fts3ExprIterate2(
  function fts3ExprIterate (line 276) | static int fts3ExprIterate(
  function fts3ExprLoadDoclistsCb (line 291) | static int fts3ExprLoadDoclistsCb(Fts3Expr *pExpr, int iPhrase, void *ctx){
  function fts3ExprLoadDoclists (line 314) | static int fts3ExprLoadDoclists(
  function fts3ExprPhraseCountCb (line 328) | static int fts3ExprPhraseCountCb(Fts3Expr *pExpr, int iPhrase, void *ctx){
  function fts3ExprPhraseCount (line 333) | static int fts3ExprPhraseCount(Fts3Expr *pExpr){
  function fts3SnippetAdvance (line 344) | static void fts3SnippetAdvance(char **ppIter, int *piIter, int iNext){
  function fts3SnippetNextCandidate (line 366) | static int fts3SnippetNextCandidate(SnippetIter *pIter){
  function fts3SnippetDetails (line 412) | static void fts3SnippetDetails(
  function fts3SnippetFindPositions (line 465) | static int fts3SnippetFindPositions(Fts3Expr *pExpr, int iPhrase, void *...
  function fts3BestSnippet (line 507) | static int fts3BestSnippet(
  function fts3StringAppend (line 593) | static int fts3StringAppend(
  function fts3SnippetShift (line 645) | static int fts3SnippetShift(
  function fts3SnippetText (line 709) | static int fts3SnippetText(
  function fts3ColumnlistCount (line 837) | static int fts3ColumnlistCount(char **ppCollist){
  function fts3ExprLHits (line 855) | static void fts3ExprLHits(
  function fts3ExprLHitGather (line 891) | static void fts3ExprLHitGather(
  function fts3ExprGlobalHitsCb (line 933) | static int fts3ExprGlobalHitsCb(
  function fts3ExprLocalHitsCb (line 949) | static int fts3ExprLocalHitsCb(
  function fts3MatchinfoCheck (line 972) | static int fts3MatchinfoCheck(
  function fts3MatchinfoSize (line 993) | static int fts3MatchinfoSize(MatchInfo *pInfo, char cArg){
  function fts3MatchinfoSelectDoctotal (line 1026) | static int fts3MatchinfoSelectDoctotal(
  type LcsIterator (line 1058) | typedef struct LcsIterator LcsIterator;
  type LcsIterator (line 1059) | struct LcsIterator {
  function fts3MatchinfoLcsCb (line 1072) | static int fts3MatchinfoLcsCb(
  function fts3LcsIteratorAdvance (line 1087) | static int fts3LcsIteratorAdvance(LcsIterator *pIter){
  function fts3MatchinfoLcs (line 1115) | static int fts3MatchinfoLcs(Fts3Cursor *pCsr, MatchInfo *pInfo){
  function fts3MatchinfoValues (line 1199) | static int fts3MatchinfoValues(
  function fts3GetMatchinfo (line 1311) | static void fts3GetMatchinfo(
  function sqlite3Fts3Snippet (line 1396) | void sqlite3Fts3Snippet(
  type TermOffset (line 1495) | typedef struct TermOffset TermOffset;
  type TermOffsetCtx (line 1496) | typedef struct TermOffsetCtx TermOffsetCtx;
  type TermOffset (line 1498) | struct TermOffset {
  type TermOffsetCtx (line 1504) | struct TermOffsetCtx {
  function fts3ExprTermOffsetInit (line 1515) | static int fts3ExprTermOffsetInit(Fts3Expr *pExpr, int iPhrase, void *ctx){
  function sqlite3Fts3Offsets (line 1544) | void sqlite3Fts3Offsets(
  function sqlite3Fts3Matchinfo (line 1682) | void sqlite3Fts3Matchinfo(

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/fts3/fts3_tokenize_vtab.c
  type Fts3tokTable (line 47) | typedef struct Fts3tokTable Fts3tokTable;
  type Fts3tokCursor (line 48) | typedef struct Fts3tokCursor Fts3tokCursor;
  type Fts3tokTable (line 53) | struct Fts3tokTable {
  type Fts3tokCursor (line 62) | struct Fts3tokCursor {
  function fts3tokQueryTokenizer (line 77) | static int fts3tokQueryTokenizer(
  function fts3tokDequoteArray (line 108) | static int fts3tokDequoteArray(
  function fts3tokConnectMethod (line 158) | static int fts3tokConnectMethod(
  function fts3tokDisconnectMethod (line 222) | static int fts3tokDisconnectMethod(sqlite3_vtab *pVtab){
  function fts3tokBestIndexMethod (line 233) | static int fts3tokBestIndexMethod(
  function fts3tokOpenMethod (line 262) | static int fts3tokOpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **...
  function fts3tokResetCursor (line 280) | static void fts3tokResetCursor(Fts3tokCursor *pCsr){
  function fts3tokCloseMethod (line 299) | static int fts3tokCloseMethod(sqlite3_vtab_cursor *pCursor){
  function fts3tokNextMethod (line 310) | static int fts3tokNextMethod(sqlite3_vtab_cursor *pCursor){
  function fts3tokFilterMethod (line 332) | static int fts3tokFilterMethod(
  function fts3tokEofMethod (line 369) | static int fts3tokEofMethod(sqlite3_vtab_cursor *pCursor){
  function fts3tokColumnMethod (line 377) | static int fts3tokColumnMethod(
  function fts3tokRowidMethod (line 409) | static int fts3tokRowidMethod(
  function sqlite3Fts3InitTok (line 422) | int sqlite3Fts3InitTok(sqlite3 *db, Fts3Hash *pHash){

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/fts3/fts3_tokenizer.c
  function fts3TokenizerEnabled (line 37) | static int fts3TokenizerEnabled(sqlite3_context *context){
  function fts3TokenizerFunc (line 64) | static void fts3TokenizerFunc(
  function sqlite3Fts3IsIdChar (line 112) | int sqlite3Fts3IsIdChar(char c){
  function sqlite3Fts3InitTokenizer (line 163) | int sqlite3Fts3InitTokenizer(
  function testFunc (line 259) | static void testFunc(
  function registerTokenizer (line 350) | static
  function queryTokenizer (line 373) | static
  function intTestFunc (line 419) | static void intTestFunc(
  function sqlite3Fts3InitHashTable (line 473) | int sqlite3Fts3InitHashTable(

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/fts3/fts3_tokenizer.h
  type sqlite3_tokenizer_module (line 48) | typedef struct sqlite3_tokenizer_module sqlite3_tokenizer_module;
  type sqlite3_tokenizer (line 49) | typedef struct sqlite3_tokenizer sqlite3_tokenizer;
  type sqlite3_tokenizer_cursor (line 50) | typedef struct sqlite3_tokenizer_cursor sqlite3_tokenizer_cursor;
  type sqlite3_tokenizer_module (line 52) | struct sqlite3_tokenizer_module {
  type sqlite3_tokenizer (line 147) | struct sqlite3_tokenizer {
  type sqlite3_tokenizer_cursor (line 152) | struct sqlite3_tokenizer_cursor {

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/fts3/fts3_tokenizer1.c
  type simple_tokenizer (line 35) | typedef struct simple_tokenizer {
  type simple_tokenizer_cursor (line 40) | typedef struct simple_tokenizer_cursor {
  function simpleDelim (line 51) | static int simpleDelim(simple_tokenizer *t, unsigned char c){
  function fts3_isalnum (line 54) | static int fts3_isalnum(int x){
  function simpleCreate (line 61) | static int simpleCreate(
  function simpleDestroy (line 102) | static int simpleDestroy(sqlite3_tokenizer *pTokenizer){
  function simpleOpen (line 113) | static int simpleOpen(
  function simpleClose (line 146) | static int simpleClose(sqlite3_tokenizer_cursor *pCursor){
  function simpleNext (line 157) | static int simpleNext(
  function sqlite3Fts3SimpleTokenizerModule (line 228) | void sqlite3Fts3SimpleTokenizerModule(

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/fts3/fts3_unicode.c
  type unicode_tokenizer (line 80) | typedef struct unicode_tokenizer unicode_tokenizer;
  type unicode_cursor (line 81) | typedef struct unicode_cursor unicode_cursor;
  type unicode_tokenizer (line 83) | struct unicode_tokenizer {
  type unicode_cursor (line 90) | struct unicode_cursor {
  function unicodeDestroy (line 104) | static int unicodeDestroy(sqlite3_tokenizer *pTokenizer){
  function unicodeAddExceptions (line 131) | static int unicodeAddExceptions(
  function unicodeIsException (line 185) | static int unicodeIsException(unicode_tokenizer *p, int iCode){
  function unicodeIsAlnum (line 210) | static int unicodeIsAlnum(unicode_tokenizer *p, int iCode){
  function unicodeCreate (line 218) | static int unicodeCreate(
  function unicodeOpen (line 268) | static int unicodeOpen(
  function unicodeClose (line 300) | static int unicodeClose(sqlite3_tokenizer_cursor *pCursor){
  function unicodeNext (line 311) | static int unicodeNext(
  function sqlite3Fts3UnicodeTokenizer (line 379) | void sqlite3Fts3UnicodeTokenizer(sqlite3_tokenizer_module const **ppModu...

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/fts3/fts3_unicode2.c
  function sqlite3FtsUnicodeIsalnum (line 30) | int sqlite3FtsUnicodeIsalnum(int c){
  function remove_diacritic (line 162) | static int remove_diacritic(int c){
  function sqlite3FtsUnicodeIsdiacritic (line 212) | int sqlite3FtsUnicodeIsdiacritic(int c){
  function sqlite3FtsUnicodeFold (line 231) | int sqlite3FtsUnicodeFold(int c, int bRemoveDiacritic){

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/fts3/fts3_write.c
  function fts3LogMerge (line 84) | static void fts3LogMerge(int nMerge, sqlite3_int64 iAbsLevel){
  type PendingList (line 92) | typedef struct PendingList PendingList;
  type SegmentNode (line 93) | typedef struct SegmentNode SegmentNode;
  type SegmentWriter (line 94) | typedef struct SegmentWriter SegmentWriter;
  type PendingList (line 100) | struct PendingList {
  type Fts3DeferredToken (line 113) | struct Fts3DeferredToken {
  type Fts3SegReader (line 137) | struct Fts3SegReader {
  type SegmentWriter (line 185) | struct SegmentWriter {
  type SegmentNode (line 217) | struct SegmentNode {
  function fts3SqlStmt (line 287) | static int fts3SqlStmt(
  function fts3SelectDocsize (line 428) | static int fts3SelectDocsize(
  function sqlite3Fts3SelectDoctotal (line 453) | int sqlite3Fts3SelectDoctotal(
  function sqlite3Fts3SelectDocsize (line 474) | int sqlite3Fts3SelectDocsize(
  function fts3SqlExec (line 490) | static void fts3SqlExec(
  function fts3Writelock (line 522) | static int fts3Writelock(Fts3Table *p){
  function sqlite3_int64 (line 561) | static sqlite3_int64 getAbsoluteLevel(
  function sqlite3Fts3AllSegdirs (line 593) | int sqlite3Fts3AllSegdirs(
  function fts3PendingListAppendVarint (line 640) | static int fts3PendingListAppendVarint(
  function fts3PendingListAppend (line 684) | static int fts3PendingListAppend(
  function fts3PendingListDelete (line 739) | static void fts3PendingListDelete(PendingList *pList){
  function fts3PendingTermsAddOne (line 746) | static int fts3PendingTermsAddOne(
  function fts3PendingTermsAdd (line 784) | static int fts3PendingTermsAdd(
  function fts3PendingTermsDocid (line 862) | static int fts3PendingTermsDocid(
  function sqlite3Fts3PendingTermsClear (line 894) | void sqlite3Fts3PendingTermsClear(Fts3Table *p){
  function fts3InsertTerms (line 916) | static int fts3InsertTerms(
  function fts3InsertData (line 951) | static int fts3InsertData(
  function fts3DeleteAll (line 1025) | static int fts3DeleteAll(Fts3Table *p, int bContent){
  function langidFromSelect (line 1049) | static int langidFromSelect(Fts3Table *p, sqlite3_stmt *pSelect){
  function fts3DeleteTerms (line 1060) | static void fts3DeleteTerms(
  function fts3AllocateSegdirIdx (line 1122) | static int fts3AllocateSegdirIdx(
  function sqlite3Fts3ReadBlock (line 1193) | int sqlite3Fts3ReadBlock(
  function sqlite3Fts3SegmentsClose (line 1247) | void sqlite3Fts3SegmentsClose(Fts3Table *p){
  function fts3SegReaderIncrRead (line 1252) | static int fts3SegReaderIncrRead(Fts3SegReader *pReader){
  function fts3SegReaderRequire (line 1276) | static int fts3SegReaderRequire(Fts3SegReader *pReader, char *pFrom, int...
  function fts3SegReaderSetEof (line 1292) | static void fts3SegReaderSetEof(Fts3SegReader *pSeg){
  function fts3SegReaderNext (line 1306) | static int fts3SegReaderNext(
  function fts3SegReaderFirstDocid (line 1418) | static int fts3SegReaderFirstDocid(Fts3Table *pTab, Fts3SegReader *pRead...
  function fts3SegReaderNextDocid (line 1450) | static int fts3SegReaderNextDocid(
  function sqlite3Fts3MsrOvfl (line 1539) | int sqlite3Fts3MsrOvfl(
  function sqlite3Fts3SegReaderFree (line 1577) | void sqlite3Fts3SegReaderFree(Fts3SegReader *pReader){
  function sqlite3Fts3SegReaderNew (line 1593) | int sqlite3Fts3SegReaderNew(
  function fts3CompareElemByTerm (line 1641) | static int SQLITE_CDECL fts3CompareElemByTerm(
  function sqlite3Fts3SegReaderPending (line 1677) | int sqlite3Fts3SegReaderPending(
  function fts3SegReaderCmp (line 1773) | static int fts3SegReaderCmp(Fts3SegReader *pLhs, Fts3SegReader *pRhs){
  function fts3SegReaderDoclistCmp (line 1806) | static int fts3SegReaderDoclistCmp(Fts3SegReader *pLhs, Fts3SegReader *p...
  function fts3SegReaderDoclistCmpRev (line 1818) | static int fts3SegReaderDoclistCmpRev(Fts3SegReader *pLhs, Fts3SegReader...
  function fts3SegReaderTermCmp (line 1839) | static int fts3SegReaderTermCmp(
  function fts3SegReaderSort (line 1864) | static void fts3SegReaderSort(
  function fts3WriteSegment (line 1897) | static int fts3WriteSegment(
  function sqlite3Fts3MaxLevel (line 1919) | int sqlite3Fts3MaxLevel(Fts3Table *p, int *pnMax){
  function fts3WriteSegdir (line 1938) | static int fts3WriteSegdir(
  function fts3PrefixCompress (line 1978) | static int fts3PrefixCompress(
  function fts3NodeAddTerm (line 1994) | static int fts3NodeAddTerm(
  function fts3TreeFinishNode (line 2105) | static int fts3TreeFinishNode(
  function fts3NodeWrite (line 2131) | static int fts3NodeWrite(
  function fts3NodeFree (line 2175) | static void fts3NodeFree(SegmentNode *pTree){
  function fts3SegWriterAdd (line 2200) | static int fts3SegWriterAdd(
  function fts3SegWriterFlush (line 2342) | static int fts3SegWriterFlush(
  function fts3SegWriterFree (line 2378) | static void fts3SegWriterFree(SegmentWriter *pWriter){
  function fts3IsEmpty (line 2397) | static int fts3IsEmpty(Fts3Table *p, sqlite3_value *pRowid, int *pisEmpty){
  function fts3SegmentMaxLevel (line 2424) | static int fts3SegmentMaxLevel(
  function fts3SegmentIsMaxLevel (line 2460) | static int fts3SegmentIsMaxLevel(Fts3Table *p, i64 iAbsLevel, int *pbMax){
  function fts3DeleteSegment (line 2488) | static int fts3DeleteSegment(
  function fts3DeleteSegdir (line 2520) | static int fts3DeleteSegdir(
  function fts3ColumnFilter (line 2577) | static void fts3ColumnFilter(
  function fts3MsrBufferData (line 2622) | static int fts3MsrBufferData(
  function sqlite3Fts3MsrIncrNext (line 2639) | int sqlite3Fts3MsrIncrNext(
  function fts3SegReaderStart (line 2707) | static int fts3SegReaderStart(
  function sqlite3Fts3SegReaderStart (line 2739) | int sqlite3Fts3SegReaderStart(
  function sqlite3Fts3MsrIncrStart (line 2748) | int sqlite3Fts3MsrIncrStart(
  function sqlite3Fts3MsrIncrRestart (line 2803) | int sqlite3Fts3MsrIncrRestart(Fts3MultiSegReader *pCsr){
  function sqlite3Fts3SegReaderStep (line 2823) | int sqlite3Fts3SegReaderStep(
  function sqlite3Fts3SegReaderFinish (line 3001) | void sqlite3Fts3SegReaderFinish(
  function fts3ReadEndBlockField (line 3028) | static void fts3ReadEndBlockField(
  function fts3PromoteSegments (line 3061) | static int fts3PromoteSegments(
  function fts3SegmentMerge (line 3163) | static int fts3SegmentMerge(
  function sqlite3Fts3PendingTermsFlush (line 3260) | int sqlite3Fts3PendingTermsFlush(Fts3Table *p){
  function fts3EncodeIntArray (line 3296) | static void fts3EncodeIntArray(
  function fts3DecodeIntArray (line 3312) | static void fts3DecodeIntArray(
  function fts3InsertDocsize (line 3333) | static void fts3InsertDocsize(
  function fts3UpdateDocTotals (line 3377) | static void fts3UpdateDocTotals(
  function fts3DoOptimize (line 3452) | static int fts3DoOptimize(Fts3Table *p, int bReturnDone){
  function fts3DoRebuild (line 3493) | static int fts3DoRebuild(Fts3Table *p){
  function fts3IncrmergeCsr (line 3573) | static int fts3IncrmergeCsr(
  type IncrmergeWriter (line 3617) | typedef struct IncrmergeWriter IncrmergeWriter;
  type NodeWriter (line 3618) | typedef struct NodeWriter NodeWriter;
  type Blob (line 3619) | typedef struct Blob Blob;
  type NodeReader (line 3620) | typedef struct NodeReader NodeReader;
  type Blob (line 3628) | struct Blob {
  type NodeWriter (line 3638) | struct NodeWriter {
  type IncrmergeWriter (line 3648) | struct IncrmergeWriter {
  type NodeReader (line 3668) | struct NodeReader {
  function blobGrowBuffer (line 3689) | static void blobGrowBuffer(Blob *pBlob, int nMin, int *pRc){
  function nodeReaderNext (line 3712) | static int nodeReaderNext(NodeReader *p){
  function nodeReaderRelease (line 3750) | static void nodeReaderRelease(NodeReader *p){
  function nodeReaderInit (line 3761) | static int nodeReaderInit(NodeReader *p, const char *aNode, int nNode){
  function fts3IncrmergePush (line 3787) | static int fts3IncrmergePush(
  function fts3AppendToNode (line 3888) | static int fts3AppendToNode(
  function fts3IncrmergeAppend (line 3938) | static int fts3IncrmergeAppend(
  function fts3IncrmergeRelease (line 4023) | static void fts3IncrmergeRelease(
  function fts3TermCmp (line 4113) | static int fts3TermCmp(
  function fts3IsAppendable (line 4139) | static int fts3IsAppendable(Fts3Table *p, sqlite3_int64 iEnd, int *pbRes){
  function fts3IncrmergeLoad (line 4170) | static int fts3IncrmergeLoad(
  function fts3IncrmergeOutputIdx (line 4302) | static int fts3IncrmergeOutputIdx(
  function fts3IncrmergeWriter (line 4347) | static int fts3IncrmergeWriter(
  function fts3RemoveSegdirEntry (line 4412) | static int fts3RemoveSegdirEntry(
  function fts3RepackSegdirLevel (line 4436) | static int fts3RepackSegdirLevel(
  function fts3StartNode (line 4492) | static void fts3StartNode(Blob *pNode, int iHeight, sqlite3_int64 iChild){
  function fts3TruncateNode (line 4511) | static int fts3TruncateNode(
  function fts3TruncateSegment (line 4566) | static int fts3TruncateSegment(
  function fts3IncrmergeChomp (line 4651) | static int fts3IncrmergeChomp(
  function fts3IncrmergeHintStore (line 4702) | static int fts3IncrmergeHintStore(Fts3Table *p, Blob *pHint){
  function fts3IncrmergeHintLoad (line 4725) | static int fts3IncrmergeHintLoad(Fts3Table *p, Blob *pHint){
  function fts3IncrmergeHintPush (line 4761) | static void fts3IncrmergeHintPush(
  function fts3IncrmergeHintPop (line 4782) | static int fts3IncrmergeHintPop(Blob *pHint, i64 *piAbsLevel, int *pnInp...
  function sqlite3Fts3Incrmerge (line 4808) | int sqlite3Fts3Incrmerge(Fts3Table *p, int nMerge, int nMin){
  function fts3Getint (line 4960) | static int fts3Getint(const char **pz){
  function fts3DoIncrmerge (line 4977) | static int fts3DoIncrmerge(
  function fts3DoAutoincrmerge (line 5020) | static int fts3DoAutoincrmerge(
  function u64 (line 5048) | static u64 fts3ChecksumEntry(
  function u64 (line 5078) | static u64 fts3ChecksumIndex(
  function fts3IntegrityCheck (line 5152) | static int fts3IntegrityCheck(Fts3Table *p, int *pbOk){
  function fts3DoIntegrityCheck (line 5266) | static int fts3DoIntegrityCheck(
  function fts3SpecialInsert (line 5284) | static int fts3SpecialInsert(Fts3Table *p, sqlite3_value *pVal){
  function sqlite3Fts3FreeDeferredDoclists (line 5324) | void sqlite3Fts3FreeDeferredDoclists(Fts3Cursor *pCsr){
  function sqlite3Fts3FreeDeferredTokens (line 5336) | void sqlite3Fts3FreeDeferredTokens(Fts3Cursor *pCsr){
  function sqlite3Fts3CacheDeferredDoclists (line 5355) | int sqlite3Fts3CacheDeferredDoclists(Fts3Cursor *pCsr){
  function sqlite3Fts3DeferredTokenList (line 5408) | int sqlite3Fts3DeferredTokenList(
  function sqlite3Fts3DeferToken (line 5438) | int sqlite3Fts3DeferToken(
  function fts3DeleteByRowid (line 5466) | static int fts3DeleteByRowid(
  function sqlite3Fts3UpdateMethod (line 5515) | int sqlite3Fts3UpdateMethod(
  function sqlite3Fts3Optimize (line 5661) | int sqlite3Fts3Optimize(Fts3Table *p){

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/icu/icu.c
  function xFree (line 59) | static void xFree(void *p){
  function icuLikeCompare (line 100) | static int icuLikeCompare(
  function icuLikeFunc (line 188) | static void icuLikeFunc(
  function icuFunctionError (line 234) | static void icuFunctionError(
  function icuRegexpDelete (line 249) | static void icuRegexpDelete(void *p){
  function icuRegexpFunc (line 273) | static void icuRegexpFunc(sqlite3_context *p, int nArg, sqlite3_value **...
  function icuCaseFunc16 (line 356) | static void icuCaseFunc16(sqlite3_context *p, int nArg, sqlite3_value **...
  function icuCollationDel (line 414) | static void icuCollationDel(void *pCtx){
  function icuCollationColl (line 423) | static int icuCollationColl(
  function icuLoadCollation (line 455) | static void icuLoadCollation(
  function sqlite3IcuInit (line 495) | int sqlite3IcuInit(sqlite3 *db){
  function sqlite3_icu_init (line 536) | __declspec(dllexport)

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/rbu/sqlite3rbu.c
  type RbuFrame (line 170) | typedef struct RbuFrame RbuFrame;
  type RbuObjIter (line 171) | typedef struct RbuObjIter RbuObjIter;
  type RbuState (line 172) | typedef struct RbuState RbuState;
  type rbu_vfs (line 173) | typedef struct rbu_vfs rbu_vfs;
  type rbu_file (line 174) | typedef struct rbu_file rbu_file;
  type RbuUpdateStmt (line 175) | typedef struct RbuUpdateStmt RbuUpdateStmt;
  type u32 (line 178) | typedef unsigned int u32;
  type u16 (line 179) | typedef unsigned short u16;
  type u8 (line 180) | typedef unsigned char u8;
  type sqlite3_int64 (line 181) | typedef sqlite3_int64 i64;
  type RbuState (line 198) | struct RbuState {
  type RbuUpdateStmt (line 210) | struct RbuUpdateStmt {
  type RbuObjIter (line 232) | struct RbuObjIter {
  type RbuFrame (line 299) | struct RbuFrame {
  type sqlite3rbu (line 344) | struct sqlite3rbu {
  type rbu_vfs (line 382) | struct rbu_vfs {
  type rbu_file (line 393) | struct rbu_file {
  function rbuDeltaGetInt (line 436) | static unsigned int rbuDeltaGetInt(const char **pz, int *pLen){
  function rbuDeltaChecksum (line 463) | static unsigned int rbuDeltaChecksum(const char *zIn, size_t N){
  function rbuDeltaApply (line 515) | static int rbuDeltaApply(
  function rbuDeltaOutputSize (line 601) | static int rbuDeltaOutputSize(const char *zDelta, int lenDelta){
  function rbuFossilDeltaFunc (line 623) | static void rbuFossilDeltaFunc(
  function prepareAndCollectError (line 675) | static int prepareAndCollectError(
  function resetAndCollectError (line 697) | static int resetAndCollectError(sqlite3_stmt *pStmt, char **pzErrmsg){
  function prepareFreeAndCollectError (line 720) | static int prepareFreeAndCollectError(
  function rbuObjIterFreeCols (line 742) | static void rbuObjIterFreeCols(RbuObjIter *pIter){
  function rbuObjIterClearStatements (line 762) | static void rbuObjIterClearStatements(RbuObjIter *pIter){
  function rbuObjIterFinalize (line 789) | static void rbuObjIterFinalize(RbuObjIter *pIter){
  function rbuObjIterNext (line 805) | static int rbuObjIterNext(sqlite3rbu *p, RbuObjIter *pIter){
  function rbuTargetNameFunc (line 885) | static void rbuTargetNameFunc(
  function rbuObjIterFirst (line 920) | static int rbuObjIterFirst(sqlite3rbu *p, RbuObjIter *pIter){
  function rbuMPrintfExec (line 980) | static int rbuMPrintfExec(sqlite3rbu *p, sqlite3 *db, const char *zFmt, ...
  function rbuAllocateIterArrays (line 1027) | static void rbuAllocateIterArrays(sqlite3rbu *p, RbuObjIter *pIter, int ...
  function rbuFinalize (line 1076) | static void rbuFinalize(sqlite3rbu *p, sqlite3_stmt *pStmt){
  function rbuTableType (line 1124) | static void rbuTableType(
  function rbuObjIterCacheIndexedCols (line 1208) | static void rbuObjIterCacheIndexedCols(sqlite3rbu *p, RbuObjIter *pIter){
  function rbuObjIterCacheTableInfo (line 1255) | static int rbuObjIterCacheTableInfo(sqlite3rbu *p, RbuObjIter *pIter){
  function rbuBadControlError (line 1589) | static void rbuBadControlError(sqlite3rbu *p){
  function rbuCreateImposterTable2 (line 1752) | static void rbuCreateImposterTable2(sqlite3rbu *p, RbuObjIter *pIter){
  function rbuCreateImposterTable (line 1826) | static void rbuCreateImposterTable(sqlite3rbu *p, RbuObjIter *pIter){
  function rbuObjIterPrepareTmpInsert (line 1882) | static void rbuObjIterPrepareTmpInsert(
  function rbuTmpInsertFunc (line 1900) | static void rbuTmpInsertFunc(
  function rbuObjIterPrepareAll (line 1935) | static int rbuObjIterPrepareAll(
  function rbuGetUpdateStmt (line 2157) | static int rbuGetUpdateStmt(
  function sqlite3 (line 2225) | static sqlite3 *rbuOpenDbhandle(
  function rbuFreeState (line 2246) | static void rbuFreeState(RbuState *p){
  function RbuState (line 2263) | static RbuState *rbuLoadState(sqlite3rbu *p){
  function rbuOpenDatabase (line 2336) | static void rbuOpenDatabase(sqlite3rbu *p){
  function rbuFileSuffix3 (line 2506) | static void rbuFileSuffix3(const char *zBase, char *z){
  function i64 (line 2527) | static i64 rbuShmChecksum(sqlite3rbu *p){
  function rbuSetupCheckpoint (line 2556) | static void rbuSetupCheckpoint(sqlite3rbu *p, RbuState *pState){
  function rbuCaptureWalRead (line 2621) | static int rbuCaptureWalRead(sqlite3rbu *pRbu, i64 iOff, int iAmt){
  function rbuCaptureDbWrite (line 2653) | static int rbuCaptureDbWrite(sqlite3rbu *pRbu, i64 iOff){
  function rbuCheckpointFrame (line 2663) | static void rbuCheckpointFrame(sqlite3rbu *p, RbuFrame *pFrame){
  function rbuLockDatabase (line 2681) | static void rbuLockDatabase(sqlite3rbu *p){
  function LPWSTR (line 2691) | static LPWSTR rbuWinUtf8ToUnicode(const char *zFilename){
  function rbuMoveOalFile (line 2721) | static void rbuMoveOalFile(sqlite3rbu *p){
  function rbuStepType (line 2812) | static int rbuStepType(sqlite3rbu *p, const char **pzMask){
  function assertColumnName (line 2855) | static void assertColumnName(sqlite3_stmt *pStmt, int iCol, const char *...
  function rbuStepOneOp (line 2868) | static void rbuStepOneOp(sqlite3rbu *p, int eType){
  function rbuStep (line 2951) | static int rbuStep(sqlite3rbu *p){
  function rbuIncrSchemaCookie (line 3016) | static void rbuIncrSchemaCookie(sqlite3rbu *p){
  function rbuSaveState (line 3047) | static void rbuSaveState(sqlite3rbu *p, int eStage){
  function rbuCopyPragma (line 3106) | static void rbuCopyPragma(sqlite3rbu *p, const char *zPragma){
  function rbuCreateTargetSchema (line 3126) | static void rbuCreateTargetSchema(sqlite3rbu *p){
  function sqlite3rbu_step (line 3178) | int sqlite3rbu_step(sqlite3rbu *p){
  function rbuStrCompare (line 3290) | static int rbuStrCompare(const char *z1, const char *z2){
  function rbuSetupOal (line 3306) | static void rbuSetupOal(sqlite3rbu *p, RbuState *pState){
  function rbuDeleteOalFile (line 3338) | static void rbuDeleteOalFile(sqlite3rbu *p){
  function rbuCreateVfs (line 3354) | static void rbuCreateVfs(sqlite3rbu *p){
  function rbuDeleteVfs (line 3373) | static void rbuDeleteVfs(sqlite3rbu *p){
  function rbuIndexCntFunc (line 3385) | static void rbuIndexCntFunc(
  function rbuInitPhaseOneSteps (line 3434) | static void rbuInitPhaseOneSteps(sqlite3rbu *p){
  function sqlite3rbu (line 3475) | static sqlite3rbu *openRbuHandle(
  function sqlite3rbu (line 3619) | static sqlite3rbu *rbuMisuseError(void){
  function sqlite3rbu (line 3632) | sqlite3rbu *sqlite3rbu_open(
  function sqlite3rbu (line 3645) | sqlite3rbu *sqlite3rbu_vacuum(
  function sqlite3 (line 3657) | sqlite3 *sqlite3rbu_db(sqlite3rbu *pRbu, int bRbu){
  function rbuEditErrmsg (line 3671) | static void rbuEditErrmsg(sqlite3rbu *p){
  function sqlite3rbu_close (line 3689) | int sqlite3rbu_close(sqlite3rbu *p, char **pzErrmsg){
  function sqlite3_int64 (line 3741) | sqlite3_int64 sqlite3rbu_progress(sqlite3rbu *pRbu){
  function sqlite3rbu_bp_progress (line 3749) | void sqlite3rbu_bp_progress(sqlite3rbu *p, int *pnOne, int *pnTwo){
  function sqlite3rbu_state (line 3784) | int sqlite3rbu_state(sqlite3rbu *p){
  function sqlite3rbu_savestate (line 3812) | int sqlite3rbu_savestate(sqlite3rbu *p){
  function rbuUnlockShm (line 3896) | static void rbuUnlockShm(rbu_file *p){
  function rbuVfsClose (line 3912) | static int rbuVfsClose(sqlite3_file *pFile){
  function u32 (line 3945) | static u32 rbuGetU32(u8 *aBuf){
  function rbuPutU32 (line 3956) | static void rbuPutU32(u8 *aBuf, u32 iVal){
  function rbuPutU16 (line 3963) | static void rbuPutU16(u8 *aBuf, u16 iVal){
  function rbuVfsRead (line 3971) | static int rbuVfsRead(
  function rbuVfsWrite (line 4037) | static int rbuVfsWrite(
  function rbuVfsTruncate (line 4072) | static int rbuVfsTruncate(sqlite3_file *pFile, sqlite_int64 size){
  function rbuVfsSync (line 4080) | static int rbuVfsSync(sqlite3_file *pFile, int flags){
  function rbuVfsFileSize (line 4094) | static int rbuVfsFileSize(sqlite3_file *pFile, sqlite_int64 *pSize){
  function rbuVfsLock (line 4115) | static int rbuVfsLock(sqlite3_file *pFile, int eLock){
  function rbuVfsUnlock (line 4137) | static int rbuVfsUnlock(sqlite3_file *pFile, int eLock){
  function rbuVfsCheckReservedLock (line 4145) | static int rbuVfsCheckReservedLock(sqlite3_file *pFile, int *pResOut){
  function rbuVfsFileControl (line 4153) | static int rbuVfsFileControl(sqlite3_file *pFile, int op, void *pArg){
  function rbuVfsSectorSize (line 4208) | static int rbuVfsSectorSize(sqlite3_file *pFile){
  function rbuVfsDeviceCharacteristics (line 4216) | static int rbuVfsDeviceCharacteristics(sqlite3_file *pFile){
  function rbuVfsShmLock (line 4224) | static int rbuVfsShmLock(sqlite3_file *pFile, int ofst, int n, int flags){
  function rbuVfsShmMap (line 4263) | static int rbuVfsShmMap(
  function rbuVfsShmBarrier (line 4317) | static void rbuVfsShmBarrier(sqlite3_file *pFile){
  function rbuVfsShmUnmap (line 4325) | static int rbuVfsShmUnmap(sqlite3_file *pFile, int delFlag){
  function rbu_file (line 4347) | static rbu_file *rbuFindMaindb(rbu_vfs *pRbuVfs, const char *zWal){
  function rbuVfsOpen (line 4385) | static int rbuVfsOpen(
  function rbuVfsDelete (line 4498) | static int rbuVfsDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){
  function rbuVfsAccess (line 4507) | static int rbuVfsAccess(
  function rbuVfsFullPathname (line 4552) | static int rbuVfsFullPathname(
  function rbuVfsDlError (line 4576) | static void rbuVfsDlError(sqlite3_vfs *pVfs, int nByte, char *zErrMsg){
  function rbuVfsDlClose (line 4596) | static void rbuVfsDlClose(sqlite3_vfs *pVfs, void *pHandle){
  function rbuVfsRandomness (line 4606) | static int rbuVfsRandomness(sqlite3_vfs *pVfs, int nByte, char *zBufOut){
  function rbuVfsSleep (line 4615) | static int rbuVfsSleep(sqlite3_vfs *pVfs, int nMicro){
  function rbuVfsCurrentTime (line 4623) | static int rbuVfsCurrentTime(sqlite3_vfs *pVfs, double *pTimeOut){
  function rbuVfsGetLastError (line 4631) | static int rbuVfsGetLastError(sqlite3_vfs *pVfs, int a, char *b){
  function sqlite3rbu_destroy_vfs (line 4639) | void sqlite3rbu_destroy_vfs(const char *zName){
  function sqlite3rbu_create_vfs (line 4653) | int sqlite3rbu_create_vfs(const char *zName, const char *zParent){

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/rbu/sqlite3rbu.h
  type sqlite3rbu (line 276) | typedef struct sqlite3rbu sqlite3rbu;

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/rtree/rtree.c
  type sqlite3_int64 (line 70) | typedef sqlite3_int64 i64;
  type u8 (line 71) | typedef unsigned char u8;
  type u16 (line 72) | typedef unsigned short u16;
  type u32 (line 73) | typedef unsigned int u32;
  type Rtree (line 82) | typedef struct Rtree Rtree;
  type RtreeCursor (line 83) | typedef struct RtreeCursor RtreeCursor;
  type RtreeNode (line 84) | typedef struct RtreeNode RtreeNode;
  type RtreeCell (line 85) | typedef struct RtreeCell RtreeCell;
  type RtreeConstraint (line 86) | typedef struct RtreeConstraint RtreeConstraint;
  type RtreeMatchArg (line 87) | typedef struct RtreeMatchArg RtreeMatchArg;
  type RtreeGeomCallback (line 88) | typedef struct RtreeGeomCallback RtreeGeomCallback;
  type RtreeCoord (line 89) | typedef union RtreeCoord RtreeCoord;
  type RtreeSearchPoint (line 90) | typedef struct RtreeSearchPoint RtreeSearchPoint;
  type Rtree (line 114) | struct Rtree {
  type sqlite3_int64 (line 163) | typedef sqlite3_int64 RtreeDValue;
  type RtreeValue (line 164) | typedef int RtreeValue;
  type RtreeDValue (line 167) | typedef double RtreeDValue;
  type RtreeValue (line 168) | typedef float RtreeValue;
  type RtreeSearchPoint (line 181) | struct RtreeSearchPoint {
  type RtreeCursor (line 222) | struct RtreeCursor {
  type RtreeConstraint (line 270) | struct RtreeConstraint {
  type RtreeNode (line 294) | struct RtreeNode {
  type RtreeCell (line 309) | struct RtreeCell {
  type RtreeGeomCallback (line 329) | struct RtreeGeomCallback {
  type RtreeMatchArg (line 350) | struct RtreeMatchArg {
  function readInt16 (line 369) | static int readInt16(u8 *p){
  function readCoord (line 372) | static void readCoord(u8 *p, RtreeCoord *pCoord){
  function i64 (line 380) | static i64 readInt64(u8 *p){
  function writeInt16 (line 398) | static int writeInt16(u8 *p, int i){
  function writeCoord (line 403) | static int writeCoord(u8 *p, RtreeCoord *pCoord){
  function writeInt64 (line 414) | static int writeInt64(u8 *p, i64 i){
  function nodeReference (line 429) | static void nodeReference(RtreeNode *p){
  function nodeZero (line 438) | static void nodeZero(Rtree *pRtree, RtreeNode *p){
  function nodeHash (line 447) | static int nodeHash(i64 iNode){
  function RtreeNode (line 455) | static RtreeNode *nodeHashLookup(Rtree *pRtree, i64 iNode){
  function nodeHashInsert (line 464) | static void nodeHashInsert(Rtree *pRtree, RtreeNode *pNode){
  function nodeHashDelete (line 475) | static void nodeHashDelete(Rtree *pRtree, RtreeNode *pNode){
  function RtreeNode (line 491) | static RtreeNode *nodeNew(Rtree *pRtree, RtreeNode *pParent){
  function nodeAcquire (line 508) | static int nodeAcquire(
  function nodeOverwriteCell (line 596) | static void nodeOverwriteCell(
  function nodeDeleteCell (line 614) | static void nodeDeleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell){
  function nodeInsertCell (line 629) | static int nodeInsertCell(
  function nodeWrite (line 653) | static int nodeWrite(Rtree *pRtree, RtreeNode *pNode){
  function nodeRelease (line 678) | static int nodeRelease(Rtree *pRtree, RtreeNode *pNode){
  function i64 (line 705) | static i64 nodeGetRowid(
  function nodeGetCoord (line 717) | static void nodeGetCoord(
  function nodeGetCell (line 731) | static void nodeGetCell(
  function rtreeCreate (line 759) | static int rtreeCreate(
  function rtreeConnect (line 772) | static int rtreeConnect(
  function rtreeReference (line 785) | static void rtreeReference(Rtree *pRtree){
  function rtreeRelease (line 793) | static void rtreeRelease(Rtree *pRtree){
  function rtreeDisconnect (line 812) | static int rtreeDisconnect(sqlite3_vtab *pVtab){
  function rtreeDestroy (line 820) | static int rtreeDestroy(sqlite3_vtab *pVtab){
  function rtreeOpen (line 847) | static int rtreeOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){
  function freeCursorConstraints (line 866) | static void freeCursorConstraints(RtreeCursor *pCsr){
  function rtreeClose (line 884) | static int rtreeClose(sqlite3_vtab_cursor *cur){
  function rtreeEof (line 901) | static int rtreeEof(sqlite3_vtab_cursor *cur){
  function rtreeCallbackConstraint (line 949) | static int rtreeCallbackConstraint(
  function rtreeNonleafConstraint (line 997) | static void rtreeNonleafConstraint(
  function rtreeLeafConstraint (line 1041) | static void rtreeLeafConstraint(
  function nodeRowidIndex (line 1067) | static int nodeRowidIndex(
  function nodeParentIndex (line 1089) | static int nodeParentIndex(Rtree *pRtree, RtreeNode *pNode, int *piIndex){
  function rtreeSearchPointCompare (line 1108) | static int rtreeSearchPointCompare(
  function rtreeSearchPointSwap (line 1122) | static void rtreeSearchPointSwap(RtreeCursor *p, int i, int j){
  function RtreeSearchPoint (line 1143) | static RtreeSearchPoint *rtreeSearchPointFirst(RtreeCursor *pCur){
  function RtreeNode (line 1150) | static RtreeNode *rtreeNodeOfFirstSearchPoint(RtreeCursor *pCur, int *pRC){
  function RtreeSearchPoint (line 1166) | static RtreeSearchPoint *rtreeEnqueue(
  function RtreeSearchPoint (line 1201) | static RtreeSearchPoint *rtreeSearchPointNew(
  function tracePoint (line 1238) | static void tracePoint(RtreeSearchPoint *p, int idx, RtreeCursor *pCur){
  function traceQueue (line 1250) | static void traceQueue(RtreeCursor *pCur, const char *zPrefix){
  function rtreeSearchPointPop (line 1268) | static void rtreeSearchPointPop(RtreeCursor *p){
  function rtreeStepToLeaf (line 1316) | static int rtreeStepToLeaf(RtreeCursor *pCur){
  function rtreeNext (line 1386) | static int rtreeNext(sqlite3_vtab_cursor *pVtabCursor){
  function rtreeRowid (line 1400) | static int rtreeRowid(sqlite3_vtab_cursor *pVtabCursor, sqlite_int64 *pR...
  function rtreeColumn (line 1414) | static int rtreeColumn(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, i...
  function findLeafNode (line 1449) | static int findLeafNode(
  function deserializeGeometry (line 1475) | static int deserializeGeometry(sqlite3_value *pValue, RtreeConstraint *p...
  function rtreeFilter (line 1521) | static int rtreeFilter(
  function setEstimatedRows (line 1627) | static void setEstimatedRows(sqlite3_index_info *pIdxInfo, i64 nRow){
  function rtreeBestIndex (line 1669) | static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){
  function RtreeDValue (line 1754) | static RtreeDValue cellArea(Rtree *pRtree, RtreeCell *p){
  function RtreeDValue (line 1767) | static RtreeDValue cellMargin(Rtree *pRtree, RtreeCell *p){
  function cellUnion (line 1779) | static void cellUnion(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){
  function cellContains (line 1798) | static int cellContains(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){
  function RtreeDValue (line 1816) | static RtreeDValue cellGrowth(Rtree *pRtree, RtreeCell *p, RtreeCell *pC...
  function RtreeDValue (line 1825) | static RtreeDValue cellOverlap(
  function ChooseLeaf (line 1857) | static int ChooseLeaf(
  function AdjustTree (line 1917) | static int AdjustTree(
  function rowidWrite (line 1946) | static int rowidWrite(Rtree *pRtree, sqlite3_int64 iRowid, sqlite3_int64...
  function parentWrite (line 1956) | static int parentWrite(Rtree *pRtree, sqlite3_int64 iNode, sqlite3_int64...
  function SortByDistance (line 1983) | static void SortByDistance(
  function SortByDimension (line 2049) | static void SortByDimension(
  function splitNodeStartree (line 2108) | static int splitNodeStartree(
  function updateMapping (line 2206) | static int updateMapping(
  function SplitNode (line 2225) | static int SplitNode(
  function fixLeafParent (line 2372) | static int fixLeafParent(Rtree *pRtree, RtreeNode *pLeaf){
  function removeNode (line 2404) | static int removeNode(Rtree *pRtree, RtreeNode *pNode, int iHeight){
  function fixBoundingBox (line 2453) | static int fixBoundingBox(Rtree *pRtree, RtreeNode *pNode){
  function deleteCell (line 2480) | static int deleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell, int iH...
  function Reinsert (line 2511) | static int Reinsert(
  function rtreeInsertCell (line 2616) | static int rtreeInsertCell(
  function reinsertNodeContent (line 2651) | static int reinsertNodeContent(Rtree *pRtree, RtreeNode *pNode){
  function newRowid (line 2680) | static int newRowid(Rtree *pRtree, i64 *piRowid){
  function rtreeDeleteRowid (line 2693) | static int rtreeDeleteRowid(Rtree *pRtree, sqlite3_int64 iDelete){
  function RtreeValue (line 2785) | static RtreeValue rtreeValueDown(sqlite3_value *v){
  function RtreeValue (line 2793) | static RtreeValue rtreeValueUp(sqlite3_value *v){
  function rtreeConstraintError (line 2816) | static int rtreeConstraintError(Rtree *pRtree, int iCol){
  function rtreeUpdate (line 2854) | static int rtreeUpdate(
  function rtreeRename (line 2985) | static int rtreeRename(sqlite3_vtab *pVtab, const char *zNewName){
  function rtreeQueryStat1 (line 3008) | static int rtreeQueryStat1(sqlite3 *db, Rtree *pRtree){
  function rtreeSqlInit (line 3073) | static int rtreeSqlInit(
  function getIntFromStmt (line 3154) | static int getIntFromStmt(sqlite3 *db, const char *zSql, int *piVal){
  function getNodeSize (line 3184) | static int getNodeSize(
  function rtreeInit (line 3228) | static int rtreeInit(
  function rtreenode (line 3335) | static void rtreenode(sqlite3_context *ctx, int nArg, sqlite3_value **ap...
  function rtreedepth (line 3389) | static void rtreedepth(sqlite3_context *ctx, int nArg, sqlite3_value **a...
  function sqlite3RtreeInit (line 3406) | int sqlite3RtreeInit(sqlite3 *db){
  function rtreeFreeCallback (line 3437) | static void rtreeFreeCallback(void *p){
  function rtreeMatchArgFree (line 3446) | static void rtreeMatchArgFree(void *pArg){
  function geomCallback (line 3469) | static void geomCallback(sqlite3_context *ctx, int nArg, sqlite3_value *...
  function sqlite3_rtree_geometry_callback (line 3507) | int sqlite3_rtree_geometry_callback(
  function sqlite3_rtree_query_callback (line 3531) | int sqlite3_rtree_query_callback(
  function sqlite3_rtree_init (line 3554) | __declspec(dllexport)

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/ext/rtree/sqlite3rtree.h
  type sqlite3_rtree_geometry (line 23) | typedef struct sqlite3_rtree_geometry sqlite3_rtree_geometry;
  type sqlite3_rtree_query_info (line 24) | typedef struct sqlite3_rtree_query_info sqlite3_rtree_query_info;
  type sqlite3_int64 (line 30) | typedef sqlite3_int64 sqlite3_rtree_dbl;
  type sqlite3_rtree_dbl (line 32) | typedef double sqlite3_rtree_dbl;
  type sqlite3_rtree_geometry (line 53) | struct sqlite3_rtree_geometry {
  type sqlite3_rtree_query_info (line 85) | struct sqlite3_rtree_query_info {

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/fts5.c
  type Fts5ExtensionApi (line 49) | typedef struct Fts5ExtensionApi Fts5ExtensionApi;
  type Fts5Context (line 50) | typedef struct Fts5Context Fts5Context;
  type Fts5PhraseIter (line 51) | typedef struct Fts5PhraseIter Fts5PhraseIter;
  type Fts5PhraseIter (line 61) | struct Fts5PhraseIter {
  type Fts5ExtensionApi (line 281) | struct Fts5ExtensionApi {
  type Fts5Tokenizer (line 515) | typedef struct Fts5Tokenizer Fts5Tokenizer;
  type fts5_tokenizer (line 516) | typedef struct fts5_tokenizer fts5_tokenizer;
  type fts5_tokenizer (line 517) | struct fts5_tokenizer {
  type fts5_api (line 552) | typedef struct fts5_api fts5_api;
  type fts5_api (line 553) | struct fts5_api {
  type u8 (line 619) | typedef unsigned char  u8;
  type u32 (line 620) | typedef unsigned int   u32;
  type u16 (line 621) | typedef unsigned short u16;
  type i16 (line 622) | typedef short i16;
  type sqlite3_int64 (line 623) | typedef sqlite3_int64 i64;
  type sqlite3_uint64 (line 624) | typedef sqlite3_uint64 u64;
  type Fts5Global (line 691) | typedef struct Fts5Global Fts5Global;
  type Fts5Colset (line 692) | typedef struct Fts5Colset Fts5Colset;
  type Fts5Colset (line 700) | struct Fts5Colset {
  type Fts5Config (line 712) | typedef struct Fts5Config Fts5Config;
  type Fts5Config (line 749) | struct Fts5Config {
  type Fts5Buffer (line 834) | typedef struct Fts5Buffer Fts5Buffer;
  type Fts5Buffer (line 835) | struct Fts5Buffer {
  type Fts5PoslistReader (line 870) | typedef struct Fts5PoslistReader Fts5PoslistReader;
  type Fts5PoslistReader (line 871) | struct Fts5PoslistReader {
  type Fts5PoslistWriter (line 889) | typedef struct Fts5PoslistWriter Fts5PoslistWriter;
  type Fts5PoslistWriter (line 890) | struct Fts5PoslistWriter {
  type Fts5Termset (line 911) | typedef struct Fts5Termset Fts5Termset;
  type Fts5Index (line 925) | typedef struct Fts5Index Fts5Index;
  type Fts5IndexIter (line 926) | typedef struct Fts5IndexIter Fts5IndexIter;
  type Fts5IndexIter (line 928) | struct Fts5IndexIter {
  type Fts5Hash (line 1135) | typedef struct Fts5Hash Fts5Hash;
  type Fts5Storage (line 1190) | typedef struct Fts5Storage Fts5Storage;
  type Fts5Expr (line 1233) | typedef struct Fts5Expr Fts5Expr;
  type Fts5ExprNode (line 1234) | typedef struct Fts5ExprNode Fts5ExprNode;
  type Fts5Parse (line 1235) | typedef struct Fts5Parse Fts5Parse;
  type Fts5Token (line 1236) | typedef struct Fts5Token Fts5Token;
  type Fts5ExprPhrase (line 1237) | typedef struct Fts5ExprPhrase Fts5ExprPhrase;
  type Fts5ExprNearset (line 1238) | typedef struct Fts5ExprNearset Fts5ExprNearset;
  type Fts5Token (line 1240) | struct Fts5Token {
  type Fts5PoslistPopulator (line 1276) | typedef struct Fts5PoslistPopulator Fts5PoslistPopulator;
  type fts5YYMINORTYPE (line 1518) | typedef union {
  type fts5yyStackEntry (line 1697) | struct fts5yyStackEntry {
  type fts5yyStackEntry (line 1704) | typedef struct fts5yyStackEntry fts5yyStackEntry;
  type fts5yyParser (line 1708) | struct fts5yyParser {
  type fts5yyParser (line 1725) | typedef struct fts5yyParser fts5yyParser;
  function sqlite3Fts5ParserTrace (line 1751) | static void sqlite3Fts5ParserTrace(FILE *TraceFILE, char *zTracePrompt){
  function fts5yyGrowStack (line 1812) | static int fts5yyGrowStack(fts5yyParser *p){
  function fts5yy_destructor (line 1894) | static void fts5yy_destructor(
  function fts5yy_pop_parser_stack (line 1962) | static void fts5yy_pop_parser_stack(fts5yyParser *pParser){
  function sqlite3Fts5ParserFree (line 1985) | static void sqlite3Fts5ParserFree(
  function sqlite3Fts5ParserStackPeak (line 2004) | static int sqlite3Fts5ParserStackPeak(void *p){
  function fts5yy_find_shift_action (line 2014) | static unsigned int fts5yy_find_shift_action(
  function fts5yy_find_reduce_action (line 2077) | static int fts5yy_find_reduce_action(
  function fts5yyStackOverflow (line 2107) | static void fts5yyStackOverflow(fts5yyParser *fts5yypParser){
  function fts5yyTraceShift (line 2131) | static void fts5yyTraceShift(fts5yyParser *fts5yypParser, int fts5yyNewS...
  function fts5yy_shift (line 2150) | static void fts5yy_shift(
  function fts5yy_reduce (line 2228) | static void fts5yy_reduce(
  function fts5yy_parse_failed (line 2488) | static void fts5yy_parse_failed(
  function fts5yy_syntax_error (line 2509) | static void fts5yy_syntax_error(
  function fts5yy_accept (line 2531) | static void fts5yy_accept(
  function sqlite3Fts5Parser (line 2570) | static void sqlite3Fts5Parser(
  type CInstIter (line 2764) | typedef struct CInstIter CInstIter;
  type CInstIter (line 2765) | struct CInstIter {
  function fts5CInstIterNext (line 2781) | static int fts5CInstIterNext(CInstIter *pIter){
  function fts5CInstIterInit (line 2812) | static int fts5CInstIterInit(
  type HighlightContext (line 2838) | typedef struct HighlightContext HighlightContext;
  type HighlightContext (line 2839) | struct HighlightContext {
  function fts5HighlightAppend (line 2861) | static void fts5HighlightAppend(
  function fts5HighlightCb (line 2876) | static int fts5HighlightCb(
  function fts5HighlightFunction (line 2930) | static void fts5HighlightFunction(
  type Fts5SFinder (line 2979) | typedef struct Fts5SFinder Fts5SFinder;
  type Fts5SFinder (line 2980) | struct Fts5SFinder {
  function fts5SentenceFinderAdd (line 2993) | static int fts5SentenceFinderAdd(Fts5SFinder *p, int iAdd){
  function fts5SentenceFinderCb (line 3012) | static int fts5SentenceFinderCb(
  function fts5SnippetScore (line 3045) | static int fts5SnippetScore(
  function fts5SnippetFunction (line 3091) | static void fts5SnippetFunction(
  type Fts5Bm25Data (line 3247) | typedef struct Fts5Bm25Data Fts5Bm25Data;
  type Fts5Bm25Data (line 3248) | struct Fts5Bm25Data {
  function fts5CountCb (line 3259) | static int fts5CountCb(
  function fts5Bm25GetData (line 3275) | static int fts5Bm25GetData(
  function fts5Bm25Function (line 3347) | static void fts5Bm25Function(
  function sqlite3Fts5AuxInit (line 3405) | static int sqlite3Fts5AuxInit(fts5_api *pApi){
  function sqlite3Fts5BufferSize (line 3451) | static int sqlite3Fts5BufferSize(int *pRc, Fts5Buffer *pBuf, u32 nByte){
  function sqlite3Fts5BufferAppendVarint (line 3475) | static void sqlite3Fts5BufferAppendVarint(int *pRc, Fts5Buffer *pBuf, i6...
  function sqlite3Fts5Put32 (line 3480) | static void sqlite3Fts5Put32(u8 *aBuf, int iVal){
  function sqlite3Fts5Get32 (line 3487) | static int sqlite3Fts5Get32(const u8 *aBuf){
  function sqlite3Fts5BufferAppendBlob (line 3496) | static void sqlite3Fts5BufferAppendBlob(
  function sqlite3Fts5BufferAppendString (line 3513) | static void sqlite3Fts5BufferAppendString(
  function sqlite3Fts5BufferAppendPrintf (line 3531) | static void sqlite3Fts5BufferAppendPrintf(
  function sqlite3Fts5BufferFree (line 3570) | static void sqlite3Fts5BufferFree(Fts5Buffer *pBuf){
  function sqlite3Fts5BufferZero (line 3579) | static void sqlite3Fts5BufferZero(Fts5Buffer *pBuf){
  function sqlite3Fts5BufferSet (line 3588) | static void sqlite3Fts5BufferSet(
  function sqlite3Fts5PoslistNext64 (line 3598) | static int sqlite3Fts5PoslistNext64(
  function sqlite3Fts5PoslistReaderNext (line 3628) | static int sqlite3Fts5PoslistReaderNext(Fts5PoslistReader *pIter){
  function sqlite3Fts5PoslistReaderInit (line 3635) | static int sqlite3Fts5PoslistReaderInit(
  function sqlite3Fts5PoslistSafeAppend (line 3652) | static void sqlite3Fts5PoslistSafeAppend(
  function sqlite3Fts5PoslistWriterAppend (line 3667) | static int sqlite3Fts5PoslistWriterAppend(
  function sqlite3Fts5IsBareword (line 3727) | static int sqlite3Fts5IsBareword(char t){
  type Fts5TermsetEntry (line 3745) | typedef struct Fts5TermsetEntry Fts5TermsetEntry;
  type Fts5TermsetEntry (line 3746) | struct Fts5TermsetEntry {
  type Fts5Termset (line 3753) | struct Fts5Termset {
  function sqlite3Fts5TermsetNew (line 3757) | static int sqlite3Fts5TermsetNew(Fts5Termset **pp){
  function sqlite3Fts5TermsetAdd (line 3763) | static int sqlite3Fts5TermsetAdd(
  function sqlite3Fts5TermsetFree (line 3812) | static void sqlite3Fts5TermsetFree(Fts5Termset *p){
  function fts5_iswhitespace (line 3855) | static int fts5_iswhitespace(char x){
  function fts5_isopenquote (line 3859) | static int fts5_isopenquote(char x){
  function fts5_isdigit (line 3888) | static int fts5_isdigit(char a){
  function fts5Dequote (line 3970) | static int fts5Dequote(char *z){
  function sqlite3Fts5Dequote (line 4015) | static void sqlite3Fts5Dequote(char *z){
  type Fts5Enum (line 4026) | struct Fts5Enum {
  type Fts5Enum (line 4030) | typedef struct Fts5Enum Fts5Enum;
  function fts5ConfigSetEnum (line 4032) | static int fts5ConfigSetEnum(
  function fts5ConfigParseSpecial (line 4061) | static int fts5ConfigParseSpecial(
  function fts5ConfigDefaultTokenizer (line 4225) | static int fts5ConfigDefaultTokenizer(Fts5Global *pGlobal, Fts5Config *p...
  function fts5ConfigParseColumn (line 4287) | static int fts5ConfigParseColumn(
  function fts5ConfigMakeExprlist (line 4315) | static int fts5ConfigMakeExprlist(Fts5Config *p){
  function sqlite3Fts5ConfigParse (line 4348) | static int sqlite3Fts5ConfigParse(
  function sqlite3Fts5ConfigFree (line 4467) | static void sqlite3Fts5ConfigFree(Fts5Config *pConfig){
  function sqlite3Fts5ConfigDeclareVtab (line 4494) | static int sqlite3Fts5ConfigDeclareVtab(Fts5Config *pConfig){
  function sqlite3Fts5Tokenize (line 4540) | static int sqlite3Fts5Tokenize(
  function sqlite3Fts5ConfigParseRank (line 4586) | static int sqlite3Fts5ConfigParseRank(
  function sqlite3Fts5ConfigSetValue (line 4645) | static int sqlite3Fts5ConfigSetValue(
  function sqlite3Fts5ConfigLoad (line 4738) | static int sqlite3Fts5ConfigLoad(Fts5Config *pConfig, int iCookie){
  type Fts5ExprTerm (line 4817) | typedef struct Fts5ExprTerm Fts5ExprTerm;
  type Fts5Expr (line 4831) | struct Fts5Expr {
  type Fts5ExprNode (line 4850) | struct Fts5ExprNode {
  type Fts5ExprTerm (line 4879) | struct Fts5ExprTerm {
  type Fts5ExprPhrase (line 4890) | struct Fts5ExprPhrase {
  type Fts5ExprNearset (line 4901) | struct Fts5ExprNearset {
  type Fts5Parse (line 4912) | struct Fts5Parse {
  function sqlite3Fts5ParseError (line 4921) | static void sqlite3Fts5ParseError(Fts5Parse *pParse, const char *zFmt, ....
  function fts5ExprIsspace (line 4931) | static int fts5ExprIsspace(char t){
  function fts5ExprGetToken (line 4938) | static int fts5ExprGetToken(
  function fts5ParseFree (line 5002) | static void fts5ParseFree(void *p){ sqlite3_free(p); }
  function sqlite3Fts5ExprNew (line 5004) | static int sqlite3Fts5ExprNew(
  function sqlite3Fts5ParseNodeFree (line 5064) | static void sqlite3Fts5ParseNodeFree(Fts5ExprNode *p){
  function sqlite3Fts5ExprFree (line 5078) | static void sqlite3Fts5ExprFree(Fts5Expr *p){
  function i64 (line 5090) | static i64 fts5ExprSynonymRowid(Fts5ExprTerm *pTerm, int bDesc, int *pbE...
  function fts5ExprSynonymList (line 5114) | static int fts5ExprSynonymList(
  function fts5ExprPhraseIsMatch (line 5197) | static int fts5ExprPhraseIsMatch(
  type Fts5LookaheadReader (line 5278) | typedef struct Fts5LookaheadReader Fts5LookaheadReader;
  type Fts5LookaheadReader (line 5279) | struct Fts5LookaheadReader {
  function fts5LookaheadReaderNext (line 5289) | static int fts5LookaheadReaderNext(Fts5LookaheadReader *p){
  function fts5LookaheadReaderInit (line 5297) | static int fts5LookaheadReaderInit(
  type Fts5NearTrimmer (line 5308) | typedef struct Fts5NearTrimmer Fts5NearTrimmer;
  type Fts5NearTrimmer (line 5309) | struct Fts5NearTrimmer {
  function fts5ExprNearIsMatch (line 5332) | static int fts5ExprNearIsMatch(int *pRc, Fts5ExprNearset *pNear){
  function fts5ExprAdvanceto (line 5431) | static int fts5ExprAdvanceto(
  function fts5ExprSynonymAdvanceto (line 5457) | static int fts5ExprSynonymAdvanceto(
  function fts5ExprNearTest (line 5487) | static int fts5ExprNearTest(
  function fts5ExprNearInitAll (line 5540) | static int fts5ExprNearInitAll(
  function fts5RowidCmp (line 5593) | static int fts5RowidCmp(
  function fts5ExprSetEof (line 5608) | static void fts5ExprSetEof(Fts5ExprNode *pNode){
  function fts5ExprNodeZeroPoslist (line 5617) | static void fts5ExprNodeZeroPoslist(Fts5ExprNode *pNode){
  function fts5NodeCompare (line 5647) | static int fts5NodeCompare(
  function fts5ExprNodeTest_STRING (line 5668) | static int fts5ExprNodeTest_STRING(
  function fts5ExprNodeNext_STRING (line 5737) | static int fts5ExprNodeNext_STRING(
  function fts5ExprNodeTest_TERM (line 5802) | static int fts5ExprNodeTest_TERM(
  function fts5ExprNodeNext_TERM (line 5830) | static int fts5ExprNodeNext_TERM(
  function fts5ExprNodeTest_OR (line 5854) | static void fts5ExprNodeTest_OR(
  function fts5ExprNodeNext_OR (line 5873) | static int fts5ExprNodeNext_OR(
  function fts5ExprNodeTest_AND (line 5902) | static int fts5ExprNodeTest_AND(
  function fts5ExprNodeNext_AND (line 5951) | static int fts5ExprNodeNext_AND(
  function fts5ExprNodeTest_NOT (line 5964) | static int fts5ExprNodeTest_NOT(
  function fts5ExprNodeNext_NOT (line 5992) | static int fts5ExprNodeNext_NOT(
  function fts5ExprNodeTest (line 6010) | static int fts5ExprNodeTest(
  function fts5ExprNodeFirst (line 6055) | static int fts5ExprNodeFirst(Fts5Expr *pExpr, Fts5ExprNode *pNode){
  function sqlite3Fts5ExprFirst (line 6114) | static int sqlite3Fts5ExprFirst(Fts5Expr *p, Fts5Index *pIdx, i64 iFirst...
  function sqlite3Fts5ExprNext (line 6142) | static int sqlite3Fts5ExprNext(Fts5Expr *p, i64 iLast){
  function sqlite3Fts5ExprEof (line 6156) | static int sqlite3Fts5ExprEof(Fts5Expr *p){
  function i64 (line 6160) | static i64 sqlite3Fts5ExprRowid(Fts5Expr *p){
  function fts5ParseStringFromToken (line 6164) | static int fts5ParseStringFromToken(Fts5Token *pToken, char **pz){
  function fts5ExprPhraseFree (line 6173) | static void fts5ExprPhraseFree(Fts5ExprPhrase *pPhrase){
  function Fts5ExprNearset (line 6202) | static Fts5ExprNearset *sqlite3Fts5ParseNearset(
  type TokenCtx (line 6260) | typedef struct TokenCtx TokenCtx;
  type TokenCtx (line 6261) | struct TokenCtx {
  function fts5ParseTokenize (line 6269) | static int fts5ParseTokenize(
  function sqlite3Fts5ParsePhraseFree (line 6334) | static void sqlite3Fts5ParsePhraseFree(Fts5ExprPhrase *pPhrase){
  function sqlite3Fts5ParseNearsetFree (line 6341) | static void sqlite3Fts5ParseNearsetFree(Fts5ExprNearset *pNear){
  function sqlite3Fts5ParseFinished (line 6352) | static void sqlite3Fts5ParseFinished(Fts5Parse *pParse, Fts5ExprNode *p){
  function Fts5ExprPhrase (line 6362) | static Fts5ExprPhrase *sqlite3Fts5ParseTerm(
  function sqlite3Fts5ExprClonePhrase (line 6423) | static int sqlite3Fts5ExprClonePhrase(
  function sqlite3Fts5ParseNear (line 6513) | static void sqlite3Fts5ParseNear(Fts5Parse *pParse, Fts5Token *pTok){
  function sqlite3Fts5ParseSetDistance (line 6521) | static void sqlite3Fts5ParseSetDistance(
  function Fts5Colset (line 6556) | static Fts5Colset *fts5ParseColset(
  function Fts5Colset (line 6597) | static Fts5Colset *sqlite3Fts5ParseColsetInvert(Fts5Parse *pParse, Fts5C...
  function Fts5Colset (line 6620) | static Fts5Colset *sqlite3Fts5ParseColset(
  function sqlite3Fts5ParseSetColset (line 6652) | static void sqlite3Fts5ParseSetColset(
  function fts5ExprAssignXNext (line 6673) | static void fts5ExprAssignXNext(Fts5ExprNode *pNode){
  function fts5ExprAddChildren (line 6705) | static void fts5ExprAddChildren(Fts5ExprNode *p, Fts5ExprNode *pSub){
  function Fts5ExprNode (line 6720) | static Fts5ExprNode *sqlite3Fts5ParseNode(
  function Fts5ExprNode (line 6795) | static Fts5ExprNode *sqlite3Fts5ParseImplicitAnd(
  function fts5ExprFunction (line 7073) | static void fts5ExprFunction(
  function fts5ExprFunctionHr (line 7156) | static void fts5ExprFunctionHr(
  function fts5ExprFunctionTcl (line 7163) | static void fts5ExprFunctionTcl(
  function fts5ExprIsAlnum (line 7176) | static void fts5ExprIsAlnum(
  function fts5ExprFold (line 7192) | static void fts5ExprFold(
  function sqlite3Fts5ExprInit (line 7214) | static int sqlite3Fts5ExprInit(Fts5Global *pGlobal, sqlite3 *db){
  function sqlite3Fts5ExprPhraseCount (line 7244) | static int sqlite3Fts5ExprPhraseCount(Fts5Expr *pExpr){
  function sqlite3Fts5ExprPhraseSize (line 7251) | static int sqlite3Fts5ExprPhraseSize(Fts5Expr *pExpr, int iPhrase){
  function sqlite3Fts5ExprPoslist (line 7260) | static int sqlite3Fts5ExprPoslist(Fts5Expr *pExpr, int iPhrase, const u8...
  type Fts5PoslistPopulator (line 7274) | struct Fts5PoslistPopulator {
  function Fts5PoslistPopulator (line 7280) | static Fts5PoslistPopulator *sqlite3Fts5ExprClearPoslists(Fts5Expr *pExp...
  type Fts5ExprCtx (line 7302) | struct Fts5ExprCtx {
  type Fts5ExprCtx (line 7307) | typedef struct Fts5ExprCtx Fts5ExprCtx;
  function fts5ExprColsetTest (line 7312) | static int fts5ExprColsetTest(Fts5Colset *pColset, int iCol){
  function fts5ExprPopulatePoslistsCb (line 7320) | static int fts5ExprPopulatePoslistsCb(
  function sqlite3Fts5ExprPopulatePoslists (line 7355) | static int sqlite3Fts5ExprPopulatePoslists(
  function fts5ExprClearPoslists (line 7385) | static void fts5ExprClearPoslists(Fts5ExprNode *pNode){
  function fts5ExprCheckPoslists (line 7396) | static int fts5ExprCheckPoslists(Fts5ExprNode *pNode, i64 iRowid){
  function sqlite3Fts5ExprCheckPoslists (line 7440) | static void sqlite3Fts5ExprCheckPoslists(Fts5Expr *pExpr, i64 iRowid){
  function sqlite3Fts5ExprPhraseCollist (line 7447) | static int sqlite3Fts5ExprPhraseCollist(
  type Fts5HashEntry (line 7502) | typedef struct Fts5HashEntry Fts5HashEntry;
  type Fts5Hash (line 7511) | struct Fts5Hash {
  type Fts5HashEntry (line 7541) | struct Fts5HashEntry {
  function sqlite3Fts5HashNew (line 7567) | static int sqlite3Fts5HashNew(Fts5Config *pConfig, Fts5Hash **ppNew, int...
  function sqlite3Fts5HashFree (line 7597) | static void sqlite3Fts5HashFree(Fts5Hash *pHash){
  function sqlite3Fts5HashClear (line 7608) | static void sqlite3Fts5HashClear(Fts5Hash *pHash){
  function fts5HashKey (line 7622) | static unsigned int fts5HashKey(int nSlot, const u8 *p, int n){
  function fts5HashKey2 (line 7631) | static unsigned int fts5HashKey2(int nSlot, u8 b, const u8 *p, int n){
  function fts5HashResize (line 7644) | static int fts5HashResize(Fts5Hash *pHash){
  function fts5HashAddPoslistSize (line 7671) | static void fts5HashAddPoslistSize(Fts5Hash *pHash, Fts5HashEntry *p){
  function sqlite3Fts5HashWrite (line 7711) | static int sqlite3Fts5HashWrite(
  function Fts5HashEntry (line 7861) | static Fts5HashEntry *fts5HashEntryMerge(
  function fts5HashEntrySort (line 7905) | static int fts5HashEntrySort(
  function sqlite3Fts5HashQuery (line 7950) | static int sqlite3Fts5HashQuery(
  function sqlite3Fts5HashScanInit (line 7975) | static int sqlite3Fts5HashScanInit(
  function sqlite3Fts5HashScanNext (line 7982) | static void sqlite3Fts5HashScanNext(Fts5Hash *p){
  function sqlite3Fts5HashScanEof (line 7987) | static int sqlite3Fts5HashScanEof(Fts5Hash *p){
  function sqlite3Fts5HashScanEntry (line 7991) | static void sqlite3Fts5HashScanEntry(
  function sqlite3Fts5Corrupt (line 8260) | static int sqlite3Fts5Corrupt() { return SQLITE_CORRUPT_VTAB; }
  type Fts5Data (line 8272) | typedef struct Fts5Data Fts5Data;
  type Fts5DlidxIter (line 8273) | typedef struct Fts5DlidxIter Fts5DlidxIter;
  type Fts5DlidxLvl (line 8274) | typedef struct Fts5DlidxLvl Fts5DlidxLvl;
  type Fts5DlidxWriter (line 8275) | typedef struct Fts5DlidxWriter Fts5DlidxWriter;
  type Fts5Iter (line 8276) | typedef struct Fts5Iter Fts5Iter;
  type Fts5PageWriter (line 8277) | typedef struct Fts5PageWriter Fts5PageWriter;
  type Fts5SegIter (line 8278) | typedef struct Fts5SegIter Fts5SegIter;
  type Fts5DoclistIter (line 8279) | typedef struct Fts5DoclistIter Fts5DoclistIter;
  type Fts5SegWriter (line 8280) | typedef struct Fts5SegWriter Fts5SegWriter;
  type Fts5Structure (line 8281) | typedef struct Fts5Structure Fts5Structure;
  type Fts5StructureLevel (line 8282) | typedef struct Fts5StructureLevel Fts5StructureLevel;
  type Fts5StructureSegment (line 8283) | typedef struct Fts5StructureSegment Fts5StructureSegment;
  type Fts5Data (line 8285) | struct Fts5Data {
  type Fts5Index (line 8294) | struct Fts5Index {
  type Fts5DoclistIter (line 8325) | struct Fts5DoclistIter {
  type Fts5StructureSegment (line 8340) | struct Fts5StructureSegment {
  type Fts5StructureLevel (line 8345) | struct Fts5StructureLevel {
  type Fts5Structure (line 8350) | struct Fts5Structure {
  type Fts5PageWriter (line 8361) | struct Fts5PageWriter {
  type Fts5DlidxWriter (line 8368) | struct Fts5DlidxWriter {
  type Fts5SegWriter (line 8374) | struct Fts5SegWriter {
  type Fts5CResult (line 8393) | typedef struct Fts5CResult Fts5CResult;
  type Fts5CResult (line 8394) | struct Fts5CResult {
  type Fts5SegIter (line 8445) | struct Fts5SegIter {
  type Fts5Iter (line 8523) | struct Fts5Iter {
  type Fts5DlidxLvl (line 8557) | struct Fts5DlidxLvl {
  type Fts5DlidxIter (line 8567) | struct Fts5DlidxIter {
  function fts5PutU16 (line 8573) | static void fts5PutU16(u8 *aOut, u16 iVal){
  function u16 (line 8578) | static u16 fts5GetU16(const u8 *aIn){
  function fts5BufferCompareBlob (line 8601) | static int fts5BufferCompareBlob(
  function fts5BufferCompare (line 8620) | static int fts5BufferCompare(Fts5Buffer *pLeft, Fts5Buffer *pRight){
  function fts5LeafFirstTermOff (line 8626) | static int fts5LeafFirstTermOff(Fts5Data *pLeaf){
  function fts5CloseReader (line 8635) | static void fts5CloseReader(Fts5Index *p){
  function Fts5Data (line 8650) | static Fts5Data *fts5DataRead(Fts5Index *p, i64 iRowid){
  function fts5DataRelease (line 8721) | static void fts5DataRelease(Fts5Data *pData){
  function Fts5Data (line 8725) | static Fts5Data *fts5LeafRead(Fts5Index *p, i64 iRowid){
  function fts5IndexPrepareStmt (line 8737) | static int fts5IndexPrepareStmt(
  function fts5DataWrite (line 8757) | static void fts5DataWrite(Fts5Index *p, i64 iRowid, const u8 *pData, int...
  function fts5DataDelete (line 8780) | static void fts5DataDelete(Fts5Index *p, i64 iFirst, i64 iLast){
  function fts5DataRemoveSegment (line 8811) | static void fts5DataRemoveSegment(Fts5Index *p, int iSegid){
  function fts5StructureRelease (line 8833) | static void fts5StructureRelease(Fts5Structure *pStruct){
  function fts5StructureRef (line 8844) | static void fts5StructureRef(Fts5Structure *pStruct){
  function fts5StructureDecode (line 8860) | static int fts5StructureDecode(
  function fts5StructureAddLevel (line 8936) | static void fts5StructureAddLevel(int *pRc, Fts5Structure **ppStruct){
  function fts5StructureExtendLevel (line 8960) | static void fts5StructureExtendLevel(
  function Fts5Structure (line 8989) | static Fts5Structure *fts5StructureReadUncached(Fts5Index *p){
  function i64 (line 9013) | static i64 fts5IndexDataVersion(Fts5Index *p){
  function Fts5Structure (line 9044) | static Fts5Structure *fts5StructureRead(Fts5Index *p){
  function fts5StructureInvalidate (line 9083) | static void fts5StructureInvalidate(Fts5Index *p){
  function fts5StructureCountSegments (line 9095) | static int fts5StructureCountSegments(Fts5Structure *pStruct){
  function fts5StructureWrite (line 9126) | static void fts5StructureWrite(Fts5Index *p, Fts5Structure *pStruct){
  function fts5PrintStructure (line 9168) | static void fts5PrintStructure(const char *zCaption, Fts5Structure *pStr...
  function fts5SegmentSize (line 9181) | static int fts5SegmentSize(Fts5StructureSegment *pSeg){
  function fts5StructurePromoteTo (line 9190) | static void fts5StructurePromoteTo(
  function fts5StructurePromote (line 9233) | static void fts5StructurePromote(
  function fts5DlidxLvlNext (line 9284) | static int fts5DlidxLvlNext(Fts5DlidxLvl *pLvl){
  function fts5DlidxIterNextR (line 9316) | static int fts5DlidxIterNextR(Fts5Index *p, Fts5DlidxIter *pIter, int iL...
  function fts5DlidxIterNext (line 9336) | static int fts5DlidxIterNext(Fts5Index *p, Fts5DlidxIter *pIter){
  function fts5DlidxIterFirst (line 9351) | static int fts5DlidxIterFirst(Fts5DlidxIter *pIter){
  function fts5DlidxIterEof (line 9360) | static int fts5DlidxIterEof(Fts5Index *p, Fts5DlidxIter *pIter){
  function fts5DlidxIterLast (line 9364) | static void fts5DlidxIterLast(Fts5Index *p, Fts5DlidxIter *pIter){
  function fts5DlidxLvlPrev (line 9387) | static int fts5DlidxLvlPrev(Fts5DlidxLvl *pLvl){
  function fts5DlidxIterPrevR (line 9436) | static int fts5DlidxIterPrevR(Fts5Index *p, Fts5DlidxIter *pIter, int iL...
  function fts5DlidxIterPrev (line 9459) | static int fts5DlidxIterPrev(Fts5Index *p, Fts5DlidxIter *pIter){
  function fts5DlidxIterFree (line 9466) | static void fts5DlidxIterFree(Fts5DlidxIter *pIter){
  function Fts5DlidxIter (line 9476) | static Fts5DlidxIter *fts5DlidxIterInit(
  function i64 (line 9523) | static i64 fts5DlidxIterRowid(Fts5DlidxIter *pIter){
  function fts5DlidxIterPgno (line 9526) | static int fts5DlidxIterPgno(Fts5DlidxIter *pIter){
  function fts5SegIterNextPage (line 9533) | static void fts5SegIterNextPage(
  function fts5GetPoslistSize (line 9571) | static int fts5GetPoslistSize(const u8 *p, int *pnSz, int *pbDel){
  function fts5SegIterLoadNPos (line 9592) | static void fts5SegIterLoadNPos(Fts5Index *p, Fts5SegIter *pIter){
  function fts5SegIterLoadRowid (line 9621) | static void fts5SegIterLoadRowid(Fts5Index *p, Fts5SegIter *pIter){
  function fts5SegIterLoadTerm (line 9654) | static void fts5SegIterLoadTerm(Fts5Index *p, Fts5SegIter *pIter, int nK...
  function fts5SegIterSetNext (line 9686) | static void fts5SegIterSetNext(Fts5Index *p, Fts5SegIter *pIter){
  function fts5SegIterInit (line 9704) | static void fts5SegIterInit(
  function fts5SegIterReverseInitPage (line 9752) | static void fts5SegIterReverseInitPage(Fts5Index *p, Fts5SegIter *pIter){
  function fts5SegIterReverseNewPage (line 9805) | static void fts5SegIterReverseNewPage(Fts5Index *p, Fts5SegIter *pIter){
  function fts5MultiIterIsEmpty (line 9857) | static int fts5MultiIterIsEmpty(Fts5Index *p, Fts5Iter *pIter){
  function fts5SegIterNext_Reverse (line 9867) | static void fts5SegIterNext_Reverse(
  function fts5SegIterNext_None (line 9901) | static void fts5SegIterNext_None(
  function fts5SegIterNext (line 9973) | static void fts5SegIterNext(
  function fts5SegIterReverse (line 10108) | static void fts5SegIterReverse(Fts5Index *p, Fts5SegIter *pIter){
  function fts5SegIterLoadDlidx (line 10194) | static void fts5SegIterLoadDlidx(Fts5Index *p, Fts5SegIter *pIter){
  function fts5LeafSeek (line 10228) | static void fts5LeafSeek(
  function sqlite3_stmt (line 10351) | static sqlite3_stmt *fts5IdxSelectStmt(Fts5Index *p){
  function fts5SegIterSeekInit (line 10370) | static void fts5SegIterSeekInit(
  function fts5SegIterHashInit (line 10452) | static void fts5SegIterHashInit(
  function fts5SegIterClear (line 10502) | static void fts5SegIterClear(Fts5SegIter *pIter){
  function fts5AssertComparisonResult (line 10519) | static void fts5AssertComparisonResult(
  function fts5AssertMultiIterSetup (line 10561) | static void fts5AssertMultiIterSetup(Fts5Index *p, Fts5Iter *pIter){
  function fts5MultiIterDoCompare (line 10606) | static int fts5MultiIterDoCompare(Fts5Iter *pIter, int iOut){
  function fts5SegIterGotoPage (line 10660) | static void fts5SegIterGotoPage(
  function fts5SegIterNextFrom (line 10698) | static void fts5SegIterNextFrom(
  function fts5MultiIterFree (line 10752) | static void fts5MultiIterFree(Fts5Iter *pIter){
  function fts5MultiIterAdvanced (line 10764) | static void fts5MultiIterAdvanced(
  function fts5MultiIterAdvanceRowid (line 10792) | static int fts5MultiIterAdvanceRowid(
  function fts5MultiIterSetEof (line 10835) | static void fts5MultiIterSetEof(Fts5Iter *pIter){
  function fts5MultiIterNext (line 10848) | static void fts5MultiIterNext(
  function fts5MultiIterNext2 (line 10886) | static void fts5MultiIterNext2(
  function fts5IterSetOutputs_Noop (line 10915) | static void fts5IterSetOutputs_Noop(Fts5Iter *pUnused1, Fts5SegIter *pUn...
  function Fts5Iter (line 10919) | static Fts5Iter *fts5MultiIterAlloc(
  function fts5PoslistCallback (line 10941) | static void fts5PoslistCallback(
  type PoslistCallbackCtx (line 10953) | typedef struct PoslistCallbackCtx PoslistCallbackCtx;
  type PoslistCallbackCtx (line 10954) | struct PoslistCallbackCtx {
  type PoslistOffsetsCtx (line 10960) | typedef struct PoslistOffsetsCtx PoslistOffsetsCtx;
  type PoslistOffsetsCtx (line 10961) | struct PoslistOffsetsCtx {
  function fts5IndexColsetTest (line 10971) | static int fts5IndexColsetTest(Fts5Colset *pColset, int iCol){
  function fts5PoslistOffsetsCallback (line 10979) | static void fts5PoslistOffsetsCallback(
  function fts5PoslistFilterCallback (line 11002) | static void fts5PoslistFilterCallback(
  function fts5ChunkIterate (line 11054) | static void fts5ChunkIterate(
  function fts5SegiterPoslist (line 11101) | static void fts5SegiterPoslist(
  function fts5IndexExtractCol (line 11136) | static int fts5IndexExtractCol(
  function fts5IndexExtractColset (line 11173) | static int fts5IndexExtractColset (
  function fts5IterSetOutputs_None (line 11195) | static void fts5IterSetOutputs_None(Fts5Iter *pIter, Fts5SegIter *pSeg){
  function fts5IterSetOutputs_Nocolset (line 11205) | static void fts5IterSetOutputs_Nocolset(Fts5Iter *pIter, Fts5SegIter *pS...
  function fts5IterSetOutputs_ZeroColset (line 11230) | static void fts5IterSetOutputs_ZeroColset(Fts5Iter *pIter, Fts5SegIter *...
  function fts5IterSetOutputs_Col (line 11240) | static void fts5IterSetOutputs_Col(Fts5Iter *pIter, Fts5SegIter *pSeg){
  function fts5IterSetOutputs_Col100 (line 11258) | static void fts5IterSetOutputs_Col100(Fts5Iter *pIter, Fts5SegIter *pSeg){
  function fts5IterSetOutputs_Full (line 11298) | static void fts5IterSetOutputs_Full(Fts5Iter *pIter, Fts5SegIter *pSeg){
  function fts5IterSetOutputCb (line 11329) | static void fts5IterSetOutputCb(int *pRc, Fts5Iter *pIter){
  function fts5MultiIterNew (line 11372) | static void fts5MultiIterNew(
  function fts5MultiIterNew2 (line 11473) | static void fts5MultiIterNew2(
  function fts5MultiIterEof (line 11513) | static int fts5MultiIterEof(Fts5Index *p, Fts5Iter *pIter){
  function i64 (line 11525) | static i64 fts5MultiIterRowid(Fts5Iter *pIter){
  function fts5MultiIterNextFrom (line 11533) | static void fts5MultiIterNextFrom(
  function u8 (line 11552) | static const u8 *fts5MultiIterTerm(Fts5Iter *pIter, int *pn){
  function fts5AllocateSegid (line 11567) | static int fts5AllocateSegid(Fts5Index *p, Fts5Structure *pStruct){
  function fts5IndexDiscardData (line 11623) | static void fts5IndexDiscardData(Fts5Index *p){
  function fts5PrefixCompress (line 11638) | static int fts5PrefixCompress(int nOld, const u8 *pOld, const u8 *pNew){
  function fts5WriteDlidxClear (line 11646) | static void fts5WriteDlidxClear(
  function fts5WriteDlidxGrow (line 11672) | static int fts5WriteDlidxGrow(
  function fts5WriteFlushDlidx (line 11698) | static int fts5WriteFlushDlidx(Fts5Index *p, Fts5SegWriter *pWriter){
  function fts5WriteFlushBtree (line 11722) | static void fts5WriteFlushBtree(Fts5Index *p, Fts5SegWriter *pWriter){
  function fts5WriteBtreeTerm (line 11750) | static void fts5WriteBtreeTerm(
  function fts5WriteBtreeNoTerm (line 11764) | static void fts5WriteBtreeNoTerm(
  function i64 (line 11780) | static i64 fts5DlidxExtractFirstRowid(Fts5Buffer *pBuf){
  function fts5WriteDlidxAppend (line 11794) | static void fts5WriteDlidxAppend(
  function fts5WriteFlushLeaf (line 11854) | static void fts5WriteFlushLeaf(Fts5Index *p, Fts5SegWriter *pWriter){
  function fts5WriteAppendTerm (line 11903) | static void fts5WriteAppendTerm(
  function fts5WriteAppendRowid (line 11981) | static void fts5WriteAppendRowid(
  function fts5WriteAppendPoslistData (line 12014) | static void fts5WriteAppendPoslistData(
  function fts5WriteFinish (line 12048) | static void fts5WriteFinish(
  function fts5WriteInit (line 12076) | static void fts5WriteInit(
  function fts5TrimSegments (line 12123) | static void fts5TrimSegments(Fts5Index *p, Fts5Iter *pIter){
  function fts5MergeChunkCallback (line 12180) | static void fts5MergeChunkCallback(
  function fts5IndexMergeLevel (line 12192) | static void fts5IndexMergeLevel(
  function fts5IndexMerge (line 12336) | static int fts5IndexMerge(
  function fts5IndexAutomerge (line 12395) | static void fts5IndexAutomerge(
  function fts5IndexCrisismerge (line 12416) | static void fts5IndexCrisismerge(
  function fts5IndexReturn (line 12434) | static int fts5IndexReturn(Fts5Index *p){
  type Fts5FlushCtx (line 12440) | typedef struct Fts5FlushCtx Fts5FlushCtx;
  type Fts5FlushCtx (line 12441) | struct Fts5FlushCtx {
  function fts5PoslistPrefix (line 12451) | static int fts5PoslistPrefix(const u8 *aBuf, int nMax){
  function fts5FlushOneHash (line 12472) | static void fts5FlushOneHash(Fts5Index *p){
  function fts5IndexFlush (line 12624) | static void fts5IndexFlush(Fts5Index *p){
  function Fts5Structure (line 12633) | static Fts5Structure *fts5IndexOptimizeStruct(
  function sqlite3Fts5IndexOptimize (line 12695) | static int sqlite3Fts5IndexOptimize(Fts5Index *p){
  function sqlite3Fts5IndexMerge (line 12729) | static int sqlite3Fts5IndexMerge(Fts5Index *p, int nMerge){
  function fts5AppendRowid (line 12751) | static void fts5AppendRowid(
  function fts5AppendPoslist (line 12761) | static void fts5AppendPoslist(
  function fts5DoclistIterNext (line 12777) | static void fts5DoclistIterNext(Fts5DoclistIter *pIter){
  function fts5DoclistIterInit (line 12803) | static void fts5DoclistIterInit(
  function fts5MergeAppendDocid (line 12820) | static void fts5MergeAppendDocid(
  function fts5BufferSwap (line 12840) | static void fts5BufferSwap(Fts5Buffer *p1, Fts5Buffer *p2){
  function fts5NextRowid (line 12846) | static void fts5NextRowid(Fts5Buffer *pBuf, int *piOff, i64 *piRowid){
  function fts5MergeRowidLists (line 12861) | static void fts5MergeRowidLists(
  function fts5MergePrefixLists (line 12908) | static void fts5MergePrefixLists(
  function fts5SetupPrefixIter (line 13021) | static void fts5SetupPrefixIter(
  function sqlite3Fts5IndexBeginWrite (line 13121) | static int sqlite3Fts5IndexBeginWrite(Fts5Index *p, int bDelete, i64 iRo...
  function sqlite3Fts5IndexSync (line 13145) | static int sqlite3Fts5IndexSync(Fts5Index *p, int bCommit){
  function sqlite3Fts5IndexRollback (line 13158) | static int sqlite3Fts5IndexRollback(Fts5Index *p){
  function sqlite3Fts5IndexReinit (line 13171) | static int sqlite3Fts5IndexReinit(Fts5Index *p){
  function sqlite3Fts5IndexOpen (line 13187) | static int sqlite3Fts5IndexOpen(
  function sqlite3Fts5IndexClose (line 13228) | static int sqlite3Fts5IndexClose(Fts5Index *p){
  function sqlite3Fts5IndexCharlenToBytelen (line 13251) | static int sqlite3Fts5IndexCharlenToBytelen(
  function fts5IndexCharlen (line 13271) | static int fts5IndexCharlen(const char *pIn, int nIn){
  function sqlite3Fts5IndexWrite (line 13293) | static int sqlite3Fts5IndexWrite(
  function sqlite3Fts5IndexQuery (line 13329) | static int sqlite3Fts5IndexQuery(
  function sqlite3Fts5IterNext (line 13411) | static int sqlite3Fts5IterNext(Fts5IndexIter *pIndexIter){
  function sqlite3Fts5IterNextScan (line 13421) | static int sqlite3Fts5IterNextScan(Fts5IndexIter *pIndexIter){
  function sqlite3Fts5IterNextFrom (line 13445) | static int sqlite3Fts5IterNextFrom(Fts5IndexIter *pIndexIter, i64 iMatch){
  function sqlite3Fts5IterClose (line 13464) | static void sqlite3Fts5IterClose(Fts5IndexIter *pIndexIter){
  function sqlite3Fts5IndexGetAverages (line 13479) | static int sqlite3Fts5IndexGetAverages(Fts5Index *p, i64 *pnRow, i64 *an...
  function sqlite3Fts5IndexSetAverages (line 13503) | static int sqlite3Fts5IndexSetAverages(Fts5Index *p, const u8 *pData, in...
  function sqlite3Fts5IndexReads (line 13513) | static int sqlite3Fts5IndexReads(Fts5Index *p){
  function sqlite3Fts5IndexSetCookie (line 13524) | static int sqlite3Fts5IndexSetCookie(Fts5Index *p, int iNew){
  function sqlite3Fts5IndexLoadConfig (line 13544) | static int sqlite3Fts5IndexLoadConfig(Fts5Index *p){
  function u64 (line 13561) | static u64 sqlite3Fts5IndexEntryCksum(
  function fts5TestDlidxReverse (line 13587) | static void fts5TestDlidxReverse(
  function fts5QueryCksum (line 13623) | static int fts5QueryCksum(
  function fts5TestTerm (line 13667) | static void fts5TestTerm(
  function fts5IndexIntegrityCheckEmpty (line 13742) | static void fts5IndexIntegrityCheckEmpty(
  function fts5IntegrityCheckPgidx (line 13763) | static void fts5IntegrityCheckPgidx(Fts5Index *p, Fts5Data *pLeaf){
  function fts5IndexIntegrityCheckSegment (line 13813) | static void fts5IndexIntegrityCheckSegment(
  function sqlite3Fts5IndexIntegrityCheck (line 13957) | static int sqlite3Fts5IndexIntegrityCheck(Fts5Index *p, u64 cksum){
  function fts5DecodeRowid (line 14048) | static void fts5DecodeRowid(
  function fts5DebugRowid (line 14067) | static void fts5DebugRowid(int *pRc, Fts5Buffer *pBuf, i64 iKey){
  function fts5DebugStructure (line 14085) | static void fts5DebugStructure(
  function fts5DecodeStructure (line 14114) | static void fts5DecodeStructure(
  function fts5DecodeAverages (line 14139) | static void fts5DecodeAverages(
  function fts5DecodePoslist (line 14162) | static int fts5DecodePoslist(int *pRc, Fts5Buffer *pBuf, const u8 *a, in...
  function fts5DecodeDoclist (line 14180) | static int fts5DecodeDoclist(int *pRc, Fts5Buffer *pBuf, const u8 *a, in...
  function fts5DecodeRowidList (line 14218) | static void fts5DecodeRowidList(
  function fts5DecodeFunction (line 14249) | static void fts5DecodeFunction(
  function fts5RowidFunction (line 14436) | static void fts5RowidFunction(
  function sqlite3Fts5IndexInit (line 14475) | static int sqlite3Fts5IndexInit(sqlite3 *db){
  function sqlite3Fts5IndexReset (line 14496) | static int sqlite3Fts5IndexReset(Fts5Index *p){
  type Fts5Auxdata (line 14532) | typedef struct Fts5Auxdata Fts5Auxdata;
  type Fts5Auxiliary (line 14533) | typedef struct Fts5Auxiliary Fts5Auxiliary;
  type Fts5Cursor (line 14534) | typedef struct Fts5Cursor Fts5Cursor;
  type Fts5Sorter (line 14535) | typedef struct Fts5Sorter Fts5Sorter;
  type Fts5Table (line 14536) | typedef struct Fts5Table Fts5Table;
  type Fts5TokenizerModule (line 14537) | typedef struct Fts5TokenizerModule Fts5TokenizerModule;
  type Fts5TransactionState (line 14570) | struct Fts5TransactionState {
  type Fts5Global (line 14580) | struct Fts5Global {
  type Fts5Auxiliary (line 14595) | struct Fts5Auxiliary {
  type Fts5TokenizerModule (line 14609) | struct Fts5TokenizerModule {
  type Fts5Table (line 14620) | struct Fts5Table {
  type Fts5MatchPhrase (line 14632) | struct Fts5MatchPhrase {
  type Fts5Sorter (line 14646) | struct Fts5Sorter {
  type Fts5Cursor (line 14674) | struct Fts5Cursor {
  type Fts5Auxdata (line 14746) | struct Fts5Auxdata {
  function fts5CheckTransactionState (line 14761) | static void fts5CheckTransactionState(Fts5Table *p, int op, int iSavepoi...
  function fts5IsContentless (line 14813) | static int fts5IsContentless(Fts5Table *pTab){
  function fts5FreeVtab (line 14820) | static void fts5FreeVtab(Fts5Table *pTab){
  function fts5DisconnectMethod (line 14832) | static int fts5DisconnectMethod(sqlite3_vtab *pVtab){
  function fts5DestroyMethod (line 14840) | static int fts5DestroyMethod(sqlite3_vtab *pVtab){
  function fts5InitVtab (line 14860) | static int fts5InitVtab(
  function fts5ConnectMethod (line 14926) | static int fts5ConnectMethod(
  function fts5CreateMethod (line 14936) | static int fts5CreateMethod(
  function fts5SetUniqueFlag (line 14962) | static void fts5SetUniqueFlag(sqlite3_index_info *pIdxInfo){
  function fts5BestIndexMethod (line 15010) | static int fts5BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *...
  function fts5NewTransaction (line 15104) | static int fts5NewTransaction(Fts5Table *pTab){
  function fts5OpenMethod (line 15115) | static int fts5OpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppC...
  function fts5StmtType (line 15141) | static int fts5StmtType(Fts5Cursor *pCsr){
  function fts5CsrNewrow (line 15153) | static void fts5CsrNewrow(Fts5Cursor *pCsr){
  function fts5FreeCursorComponents (line 15162) | static void fts5FreeCursorComponents(Fts5Cursor *pCsr){
  function fts5CloseMethod (line 15205) | static int fts5CloseMethod(sqlite3_vtab_cursor *pCursor){
  function fts5SorterNext (line 15221) | static int fts5SorterNext(Fts5Cursor *pCsr){
  function fts5TripCursors (line 15264) | static void fts5TripCursors(Fts5Table *pTab){
  function fts5CursorReseek (line 15287) | static int fts5CursorReseek(Fts5Cursor *pCsr, int *pbSkip){
  function fts5NextMethod (line 15319) | static int fts5NextMethod(sqlite3_vtab_cursor *pCursor){
  function fts5PrepareStatement (line 15363) | static int fts5PrepareStatement(
  function fts5CursorFirstSorted (line 15391) | static int fts5CursorFirstSorted(Fts5Table *pTab, Fts5Cursor *pCsr, int ...
  function fts5CursorFirst (line 15439) | static int fts5CursorFirst(Fts5Table *pTab, Fts5Cursor *pCsr, int bDesc){
  function fts5SpecialMatch (line 15456) | static int fts5SpecialMatch(
  function Fts5Auxiliary (line 15491) | static Fts5Auxiliary *fts5FindAuxiliary(Fts5Table *pTab, const char *zNa...
  function fts5FindRankFunction (line 15503) | static int fts5FindRankFunction(Fts5Cursor *pCsr){
  function fts5CursorParseRank (line 15553) | static int fts5CursorParseRank(
  function i64 (line 15590) | static i64 fts5GetRowidLimit(sqlite3_value *pVal, i64 iDefault){
  function fts5FilterMethod (line 15611) | static int fts5FilterMethod(
  function fts5EofMethod (line 15749) | static int fts5EofMethod(sqlite3_vtab_cursor *pCursor){
  function i64 (line 15757) | static i64 fts5CursorRowid(Fts5Cursor *pCsr){
  function fts5RowidMethod (line 15775) | static int fts5RowidMethod(sqlite3_vtab_cursor *pCursor, sqlite_int64 *p...
  function fts5SeekCursor (line 15806) | static int fts5SeekCursor(Fts5Cursor *pCsr, int bErrormsg){
  function fts5SetVtabError (line 15838) | static void fts5SetVtabError(Fts5Table *p, const char *zFormat, ...){
  function fts5SpecialInsert (line 15861) | static int fts5SpecialInsert(
  function fts5SpecialDelete (line 15916) | static int fts5SpecialDelete(
  function fts5StorageInsert (line 15929) | static void fts5StorageInsert(
  function fts5UpdateMethod (line 15959) | static int fts5UpdateMethod(
  function fts5SyncMethod (line 16080) | static int fts5SyncMethod(sqlite3_vtab *pVtab){
  function fts5BeginMethod (line 16094) | static int fts5BeginMethod(sqlite3_vtab *pVtab){
  function fts5CommitMethod (line 16105) | static int fts5CommitMethod(sqlite3_vtab *pVtab){
  function fts5RollbackMethod (line 16115) | static int fts5RollbackMethod(sqlite3_vtab *pVtab){
  function fts5ApiColumnCount (line 16130) | static int fts5ApiColumnCount(Fts5Context *pCtx){
  function fts5ApiColumnTotalSize (line 16135) | static int fts5ApiColumnTotalSize(
  function fts5ApiRowCount (line 16145) | static int fts5ApiRowCount(Fts5Context *pCtx, i64 *pnRow){
  function fts5ApiTokenize (line 16151) | static int fts5ApiTokenize(
  function fts5ApiPhraseCount (line 16164) | static int fts5ApiPhraseCount(Fts5Context *pCtx){
  function fts5ApiPhraseSize (line 16169) | static int fts5ApiPhraseSize(Fts5Context *pCtx, int iPhrase){
  function fts5ApiColumnText (line 16174) | static int fts5ApiColumnText(
  function fts5CsrPoslist (line 16195) | static int fts5CsrPoslist(
  function fts5CacheInstArray (line 16247) | static int fts5CacheInstArray(Fts5Cursor *pCsr){
  function fts5ApiInstCount (line 16314) | static int fts5ApiInstCount(Fts5Context *pCtx, int *pnInst){
  function fts5ApiInst (line 16324) | static int fts5ApiInst(
  function sqlite3_int64 (line 16353) | static sqlite3_int64 fts5ApiRowid(Fts5Context *pCtx){
  function fts5ColumnSizeCb (line 16357) | static int fts5ColumnSizeCb(
  function fts5ApiColumnSize (line 16374) | static int fts5ApiColumnSize(Fts5Context *pCtx, int iCol, int *pnToken){
  function fts5ApiSetAuxdata (line 16427) | static int fts5ApiSetAuxdata(
  function fts5ApiPhraseNext (line 16482) | static void fts5ApiPhraseNext(
  function fts5ApiPhraseFirst (line 16504) | static int fts5ApiPhraseFirst(
  function fts5ApiPhraseNextColumn (line 16522) | static void fts5ApiPhraseNextColumn(
  function fts5ApiPhraseFirstColumn (line 16552) | static int fts5ApiPhraseFirstColumn(
  function fts5ApiQueryPhrase (line 16626) | static int fts5ApiQueryPhrase(
  function fts5ApiInvoke (line 16663) | static void fts5ApiInvoke(
  function Fts5Cursor (line 16676) | static Fts5Cursor *fts5CursorFromCsrid(Fts5Global *pGlobal, i64 iCsrId){
  function fts5ApiCallback (line 16684) | static void fts5ApiCallback(
  function Fts5Index (line 16716) | static Fts5Index *sqlite3Fts5IndexFromCsrid(
  function fts5PoslistBlob (line 16746) | static int fts5PoslistBlob(sqlite3_context *pCtx, Fts5Cursor *pCsr){
  function fts5ColumnMethod (line 16803) | static int fts5ColumnMethod(
  function fts5FindFunctionMethod (line 16854) | static int fts5FindFunctionMethod(
  function fts5RenameMethod (line 16879) | static int fts5RenameMethod(
  function fts5SavepointMethod (line 16892) | static int fts5SavepointMethod(sqlite3_vtab *pVtab, int iSavepoint){
  function fts5ReleaseMethod (line 16905) | static int fts5ReleaseMethod(sqlite3_vtab *pVtab, int iSavepoint){
  function fts5RollbackToMethod (line 16918) | static int fts5RollbackToMethod(sqlite3_vtab *pVtab, int iSavepoint){
  function fts5CreateAux (line 16929) | static int fts5CreateAux(
  function fts5CreateTokenizer (line 16968) | static int fts5CreateTokenizer(
  function Fts5TokenizerModule (line 17003) | static Fts5TokenizerModule *fts5LocateTokenizer(
  function fts5FindTokenizer (line 17024) | static int fts5FindTokenizer(
  function sqlite3Fts5GetTokenizer (line 17045) | static int sqlite3Fts5GetTokenizer(
  function fts5ModuleDestroy (line 17077) | static void fts5ModuleDestroy(void *pCtx){
  function fts5Fts5Func (line 17097) | static void fts5Fts5Func(
  function fts5SourceIdFunc (line 17114) | static void fts5SourceIdFunc(
  function fts5Init (line 17124) | static int fts5Init(sqlite3 *db){
  function sqlite3_fts_init (line 17207) | __declspec(dllexport)
  function sqlite3_fts5_init (line 17220) | __declspec(dllexport)
  function sqlite3Fts5Init (line 17232) | int sqlite3Fts5Init(sqlite3 *db){
  type Fts5Storage (line 17256) | struct Fts5Storage {
  function fts5StorageGetStmt (line 17291) | static int fts5StorageGetStmt(
  function fts5ExecPrintf (line 17390) | static int fts5ExecPrintf(
  function sqlite3Fts5DropAll (line 17418) | static int sqlite3Fts5DropAll(Fts5Config *pConfig){
  function fts5StorageRenameOne (line 17442) | static void fts5StorageRenameOne(
  function sqlite3Fts5StorageRename (line 17456) | static int sqlite3Fts5StorageRename(Fts5Storage *pStorage, const char *z...
  function sqlite3Fts5CreateTable (line 17476) | static int sqlite3Fts5CreateTable(
  function sqlite3Fts5StorageOpen (line 17511) | static int sqlite3Fts5StorageOpen(
  function sqlite3Fts5StorageClose (line 17577) | static int sqlite3Fts5StorageClose(Fts5Storage *p){
  type Fts5InsertCtx (line 17592) | typedef struct Fts5InsertCtx Fts5InsertCtx;
  type Fts5InsertCtx (line 17593) | struct Fts5InsertCtx {
  function fts5StorageInsertCallback (line 17602) | static int fts5StorageInsertCallback(
  function fts5StorageDeleteFromIndex (line 17625) | static int fts5StorageDeleteFromIndex(
  function fts5StorageInsertDocsize (line 17683) | static int fts5StorageInsertDocsize(
  function fts5StorageLoadTotals (line 17712) | static int fts5StorageLoadTotals(Fts5Storage *p, int bCache){
  function fts5StorageSaveTotals (line 17728) | static int fts5StorageSaveTotals(Fts5Storage *p){
  function sqlite3Fts5StorageDelete (line 17750) | static int sqlite3Fts5StorageDelete(Fts5Storage *p, i64 iDel, sqlite3_va...
  function sqlite3Fts5StorageDeleteAll (line 17796) | static int sqlite3Fts5StorageDeleteAll(Fts5Storage *p){
  function sqlite3Fts5StorageRebuild (line 17825) | static int sqlite3Fts5StorageRebuild(Fts5Storage *p){
  function sqlite3Fts5StorageOptimize (line 17877) | static int sqlite3Fts5StorageOptimize(Fts5Storage *p){
  function sqlite3Fts5StorageMerge (line 17881) | static int sqlite3Fts5StorageMerge(Fts5Storage *p, int nMerge){
  function sqlite3Fts5StorageReset (line 17885) | static int sqlite3Fts5StorageReset(Fts5Storage *p){
  function fts5StorageNewRowid (line 17898) | static int fts5StorageNewRowid(Fts5Storage *p, i64 *piRowid){
  function sqlite3Fts5StorageContentInsert (line 17919) | static int sqlite3Fts5StorageContentInsert(
  function sqlite3Fts5StorageIndexInsert (line 17954) | static int sqlite3Fts5StorageIndexInsert(
  function fts5StorageCount (line 18001) | static int fts5StorageCount(Fts5Storage *p, const char *zSuffix, i64 *pn...
  type Fts5IntegrityCtx (line 18029) | typedef struct Fts5IntegrityCtx Fts5IntegrityCtx;
  type Fts5IntegrityCtx (line 18030) | struct Fts5IntegrityCtx {
  function fts5StorageIntegrityCallback (line 18043) | static int fts5StorageIntegrityCallback(
  function sqlite3Fts5StorageIntegrity (line 18113) | static int sqlite3Fts5StorageIntegrity(Fts5Storage *p){
  function sqlite3Fts5StorageStmt (line 18214) | static int sqlite3Fts5StorageStmt(
  function sqlite3Fts5StorageStmtRelease (line 18238) | static void sqlite3Fts5StorageStmtRelease(
  function fts5StorageDecodeSizeArray (line 18255) | static int fts5StorageDecodeSizeArray(
  function sqlite3Fts5StorageDocsize (line 18276) | static int sqlite3Fts5StorageDocsize(Fts5Storage *p, i64 iRowid, int *aC...
  function sqlite3Fts5StorageSize (line 18302) | static int sqlite3Fts5StorageSize(Fts5Storage *p, int iCol, i64 *pnToken){
  function sqlite3Fts5StorageRowCount (line 18320) | static int sqlite3Fts5StorageRowCount(Fts5Storage *p, i64 *pnRow){
  function sqlite3Fts5StorageSync (line 18331) | static int sqlite3Fts5StorageSync(Fts5Storage *p, int bCommit){
  function sqlite3Fts5StorageRollback (line 18340) | static int sqlite3Fts5StorageRollback(Fts5Storage *p){
  function sqlite3Fts5StorageConfigValue (line 18345) | static int sqlite3Fts5StorageConfigValue(
  type AsciiTokenizer (line 18409) | typedef struct AsciiTokenizer AsciiTokenizer;
  type AsciiTokenizer (line 18410) | struct AsciiTokenizer {
  function fts5AsciiAddExceptions (line 18414) | static void fts5AsciiAddExceptions(
  function fts5AsciiDelete (line 18430) | static void fts5AsciiDelete(Fts5Tokenizer *p){
  function fts5AsciiCreate (line 18437) | static int fts5AsciiCreate(
  function asciiFold (line 18478) | static void asciiFold(char *aOut, const char *aIn, int nByte){
  function fts5AsciiTokenize (line 18490) | static int fts5AsciiTokenize(
  type Unicode61Tokenizer (line 18605) | typedef struct Unicode61Tokenizer Unicode61Tokenizer;
  type Unicode61Tokenizer (line 18606) | struct Unicode61Tokenizer {
  function fts5UnicodeAddExceptions (line 18615) | static int fts5UnicodeAddExceptions(
  function fts5UnicodeIsException (line 18664) | static int fts5UnicodeIsException(Unicode61Tokenizer *p, int iCode){
  function fts5UnicodeDelete (line 18688) | static void fts5UnicodeDelete(Fts5Tokenizer *pTok){
  function fts5UnicodeCreate (line 18701) | static int fts5UnicodeCreate(
  function fts5UnicodeIsAlnum (line 18759) | static int fts5UnicodeIsAlnum(Unicode61Tokenizer *p, int iCode){
  function fts5UnicodeTokenize (line 18764) | static int fts5UnicodeTokenize(
  type PorterTokenizer (line 18876) | typedef struct PorterTokenizer PorterTokenizer;
  type PorterTokenizer (line 18877) | struct PorterTokenizer {
  function fts5PorterDelete (line 18886) | static void fts5PorterDelete(Fts5Tokenizer *pTok){
  function fts5PorterCreate (line 18899) | static int fts5PorterCreate(
  type PorterContext (line 18935) | typedef struct PorterContext PorterContext;
  type PorterContext (line 18936) | struct PorterContext {
  type PorterRule (line 18942) | typedef struct PorterRule PorterRule;
  type PorterRule (line 18943) | struct PorterRule {
  function fts5PorterApply (line 18952) | static int fts5PorterApply(char *aBuf, int *pnBuf, PorterRule *aRule){
  function fts5PorterIsVowel (line 18977) | static int fts5PorterIsVowel(char c, int bYIsVowel){
  function fts5PorterGobbleVC (line 18983) | static int fts5PorterGobbleVC(char *zStem, int nStem, int bPrevCons){
  function fts5Porter_MGt0 (line 19000) | static int fts5Porter_MGt0(char *zStem, int nStem){
  function fts5Porter_MGt1 (line 19005) | static int fts5Porter_MGt1(char *zStem, int nStem){
  function fts5Porter_MEq1 (line 19015) | static int fts5Porter_MEq1(char *zStem, int nStem){
  function fts5Porter_Ostar (line 19025) | static int fts5Porter_Ostar(char *zStem, int nStem){
  function fts5Porter_MGt1_and_S_or_T (line 19042) | static int fts5Porter_MGt1_and_S_or_T(char *zStem, int nStem){
  function fts5Porter_Vowel (line 19049) | static int fts5Porter_Vowel(char *zStem, int nStem){
  function fts5PorterStep4 (line 19065) | static int fts5PorterStep4(char *aBuf, int *pnBuf){
  function fts5PorterStep1B2 (line 19199) | static int fts5PorterStep1B2(char *aBuf, int *pnBuf){
  function fts5PorterStep2 (line 19233) | static int fts5PorterStep2(char *aBuf, int *pnBuf){
  function fts5PorterStep3 (line 19380) | static int fts5PorterStep3(char *aBuf, int *pnBuf){
  function fts5PorterStep1B (line 19446) | static int fts5PorterStep1B(char *aBuf, int *pnBuf){
  function fts5PorterStep1A (line 19483) | static void fts5PorterStep1A(char *aBuf, int *pnBuf){
  function fts5PorterCb (line 19501) | static int fts5PorterCb(
  function fts5PorterTokenize (line 19570) | static int fts5PorterTokenize(
  function sqlite3Fts5TokenizerInit (line 19590) | static int sqlite3Fts5TokenizerInit(fts5_api *pApi){
  function sqlite3Fts5UnicodeIsalnum (line 19645) | static int sqlite3Fts5UnicodeIsalnum(int c){
  function fts5_remove_diacritic (line 19777) | static int fts5_remove_diacritic(int c){
  function sqlite3Fts5UnicodeIsdiacritic (line 19827) | static int sqlite3Fts5UnicodeIsdiacritic(int c){
  function sqlite3Fts5UnicodeFold (line 19846) | static int sqlite3Fts5UnicodeFold(int c, int bRemoveDiacritic){
  function sqlite3Fts5GetVarint32 (line 20003) | static int sqlite3Fts5GetVarint32(const unsigned char *p, u32 *v){
  function u8 (line 20081) | static u8 sqlite3Fts5GetVarint(const unsigned char *p, u64 *v){
  function fts5PutVarint64 (line 20275) | static int FTS5_NOINLINE fts5PutVarint64(unsigned char *p, u64 v){
  function sqlite3Fts5PutVarint (line 20300) | static int sqlite3Fts5PutVarint(unsigned char *p, u64 v){
  function sqlite3Fts5GetVarintLen (line 20314) | static int sqlite3Fts5GetVarintLen(u32 iVal){
  type Fts5VocabTable (line 20364) | typedef struct Fts5VocabTable Fts5VocabTable;
  type Fts5VocabCursor (line 20365) | typedef struct Fts5VocabCursor Fts5VocabCursor;
  type Fts5VocabTable (line 20367) | struct Fts5VocabTable {
  type Fts5VocabCursor (line 20376) | struct Fts5VocabCursor {
  function fts5VocabTableType (line 20418) | static int fts5VocabTableType(const char *zType, char **pzErr, int *peTy...
  function fts5VocabDisconnectMethod (line 20444) | static int fts5VocabDisconnectMethod(sqlite3_vtab *pVtab){
  function fts5VocabDestroyMethod (line 20453) | static int fts5VocabDestroyMethod(sqlite3_vtab *pVtab){
  function fts5VocabInitVtab (line 20480) | static int fts5VocabInitVtab(
  function fts5VocabConnectMethod (line 20541) | static int fts5VocabConnectMethod(
  function fts5VocabCreateMethod (line 20551) | static int fts5VocabCreateMethod(
  function fts5VocabBestIndexMethod (line 20565) | static int fts5VocabBestIndexMethod(
  function fts5VocabOpenMethod (line 20627) | static int fts5VocabOpenMethod(
  function fts5VocabResetCursor (line 20685) | static void fts5VocabResetCursor(Fts5VocabCursor *pCsr){
  function fts5VocabCloseMethod (line 20698) | static int fts5VocabCloseMethod(sqlite3_vtab_cursor *pCursor){
  function fts5VocabNextMethod (line 20711) | static int fts5VocabNextMethod(sqlite3_vtab_cursor *pCursor){
  function fts5VocabFilterMethod (line 20827) | static int fts5VocabFilterMethod(
  function fts5VocabEofMethod (line 20889) | static int fts5VocabEofMethod(sqlite3_vtab_cursor *pCursor){
  function fts5VocabColumnMethod (line 20894) | static int fts5VocabColumnMethod(
  function fts5VocabRowidMethod (line 20938) | static int fts5VocabRowidMethod(
  function sqlite3Fts5VocabInit (line 20947) | static int sqlite3Fts5VocabInit(Fts5Global *pGlobal, sqlite3 *db){

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/fts5.h
  type Fts5ExtensionApi (line 37) | typedef struct Fts5ExtensionApi Fts5ExtensionApi;
  type Fts5Context (line 38) | typedef struct Fts5Context Fts5Context;
  type Fts5PhraseIter (line 39) | typedef struct Fts5PhraseIter Fts5PhraseIter;
  type Fts5PhraseIter (line 49) | struct Fts5PhraseIter {
  type Fts5ExtensionApi (line 269) | struct Fts5ExtensionApi {
  type Fts5Tokenizer (line 503) | typedef struct Fts5Tokenizer Fts5Tokenizer;
  type fts5_tokenizer (line 504) | typedef struct fts5_tokenizer fts5_tokenizer;
  type fts5_tokenizer (line 505) | struct fts5_tokenizer {
  type fts5_api (line 540) | typedef struct fts5_api fts5_api;
  type fts5_api (line 541) | struct fts5_api {

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/keywordhash.h
  function keywordCode (line 15) | static int keywordCode(const char *z, int n, int *pType){
  function sqlite3KeywordCode (line 280) | int sqlite3KeywordCode(const unsigned char *z, int n){

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/parse.c
  type LimitVal (line 58) | struct LimitVal {
  type TrigEvent (line 72) | struct TrigEvent { int a; IdList * b; }
  function disableLookaside (line 78) | static void disableLookaside(Parse *pParse){
  function parserDoubleLinkSelect (line 90) | static void parserDoubleLinkSelect(Parse *pParse, Select *p){
  function spanSet (line 112) | static void spanSet(ExprSpan *pOut, Token *pStart, Token *pEnd){
  function spanExpr (line 121) | static void spanExpr(ExprSpan *pOut, Parse *pParse, int op, Token t){
  function spanBinaryExpr (line 148) | static void spanBinaryExpr(
  function exprNot (line 161) | static void exprNot(Parse *pParse, int doNot, ExprSpan *pSpan){
  function spanUnaryPostfix (line 170) | static void spanUnaryPostfix(
  function binaryToUnaryIfNull (line 183) | static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){
  function spanUnaryPrefix (line 195) | static void spanUnaryPrefix(
  function ExprList (line 213) | static ExprList *parserAddExprIdListTerm(
  type YYMINORTYPE (line 294) | typedef union {
  type yyStackEntry (line 990) | struct yyStackEntry {
  type yyStackEntry (line 997) | typedef struct yyStackEntry yyStackEntry;
  type yyParser (line 1001) | struct yyParser {
  type yyParser (line 1018) | typedef struct yyParser yyParser;
  function sqlite3ParserTrace (line 1044) | void sqlite3ParserTrace(FILE *TraceFILE, char *zTracePrompt){
  function yyGrowStack (line 1467) | static int yyGrowStack(yyParser *p){
  function yy_destructor (line 1549) | static void yy_destructor(
  function yy_pop_parser_stack (line 1669) | static void yy_pop_parser_stack(yyParser *pParser){
  function sqlite3ParserFree (line 1692) | void sqlite3ParserFree(
  function sqlite3ParserStackPeak (line 1711) | int sqlite3ParserStackPeak(void *p){
  function yy_find_shift_action (line 1721) | static unsigned int yy_find_shift_action(
  function yy_find_reduce_action (line 1784) | static int yy_find_reduce_action(
  function yyStackOverflow (line 1814) | static void yyStackOverflow(yyParser *yypParser){
  function yyTraceShift (line 1838) | static void yyTraceShift(yyParser *yypParser, int yyNewState){
  function yy_shift (line 1857) | static void yy_shift(
  function yy_reduce (line 2241) | static void yy_reduce(
  function yy_parse_failed (line 3979) | static void yy_parse_failed(
  function yy_syntax_error (line 4000) | static void yy_syntax_error(
  function yy_accept (line 4021) | static void yy_accept(
  function sqlite3Parser (line 4060) | void sqlite3Parser(

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/sqlite3.h
  type sqlite3 (line 242) | typedef struct sqlite3 sqlite3;
  type SQLITE_INT64_TYPE (line 261) | typedef SQLITE_INT64_TYPE sqlite_int64;
  type sqlite_uint64 (line 262) | typedef unsigned SQLITE_INT64_TYPE sqlite_uint64;
  type __int64 (line 264) | typedef __int64 sqlite_int64;
  type sqlite_uint64 (line 265) | typedef unsigned __int64 sqlite_uint64;
  type sqlite_int64 (line 267) | typedef long long int sqlite_int64;
  type sqlite_uint64 (line 268) | typedef unsigned long long int sqlite_uint64;
  type sqlite_int64 (line 270) | typedef sqlite_int64 sqlite3_int64;
  type sqlite_uint64 (line 271) | typedef sqlite_uint64 sqlite3_uint64;
  type sqlite3_file (line 649) | typedef struct sqlite3_file sqlite3_file;
  type sqlite3_file (line 650) | struct sqlite3_file {
  type sqlite3_io_methods (line 744) | typedef struct sqlite3_io_methods sqlite3_io_methods;
  type sqlite3_io_methods (line 745) | struct sqlite3_io_methods {
  type sqlite3_mutex (line 1055) | typedef struct sqlite3_mutex sqlite3_mutex;
  type sqlite3_api_routines (line 1065) | typedef struct sqlite3_api_routines sqlite3_api_routines;
  type sqlite3_vfs (line 1224) | typedef struct sqlite3_vfs sqlite3_vfs;
  type sqlite3_vfs (line 1226) | struct sqlite3_vfs {
  type sqlite3_mem_methods (line 1522) | typedef struct sqlite3_mem_methods sqlite3_mem_methods;
  type sqlite3_mem_methods (line 1523) | struct sqlite3_mem_methods {
  type sqlite3_stmt (line 3313) | typedef struct sqlite3_stmt sqlite3_stmt;
  type sqlite3_value (line 3662) | typedef struct Mem sqlite3_value;
  type sqlite3_context (line 3676) | typedef struct sqlite3_context sqlite3_context;
  type sqlite3_vtab (line 5777) | typedef struct sqlite3_vtab sqlite3_vtab;
  type sqlite3_index_info (line 5778) | typedef struct sqlite3_index_info sqlite3_index_info;
  type sqlite3_vtab_cursor (line 5779) | typedef struct sqlite3_vtab_cursor sqlite3_vtab_cursor;
  type sqlite3_module (line 5780) | typedef struct sqlite3_module sqlite3_module;
  type sqlite3_module (line 5798) | struct sqlite3_module {
  type sqlite3_index_info (line 5929) | struct sqlite3_index_info {
  type sqlite3_vtab (line 6042) | struct sqlite3_vtab {
  type sqlite3_vtab_cursor (line 6066) | struct sqlite3_vtab_cursor {
  type sqlite3_blob (line 6122) | typedef struct sqlite3_blob sqlite3_blob;
  type sqlite3_mutex_methods (line 6560) | typedef struct sqlite3_mutex_methods sqlite3_mutex_methods;
  type sqlite3_mutex_methods (line 6561) | struct sqlite3_mutex_methods {
  type sqlite3_pcache (line 7086) | typedef struct sqlite3_pcache sqlite3_pcache;
  type sqlite3_pcache_page (line 7098) | typedef struct sqlite3_pcache_page sqlite3_pcache_page;
  type sqlite3_pcache_page (line 7099) | struct sqlite3_pcache_page {
  type sqlite3_pcache_methods2 (line 7263) | typedef struct sqlite3_pcache_methods2 sqlite3_pcache_methods2;
  type sqlite3_pcache_methods2 (line 7264) | struct sqlite3_pcache_methods2 {
  type sqlite3_pcache_methods (line 7286) | typedef struct sqlite3_pcache_methods sqlite3_pcache_methods;
  type sqlite3_pcache_methods (line 7287) | struct sqlite3_pcache_methods {
  type sqlite3_backup (line 7312) | typedef struct sqlite3_backup sqlite3_backup;
  type sqlite3_snapshot (line 8281) | typedef struct sqlite3_snapshot sqlite3_snapshot;
  type sqlite3_rtree_geometry (line 8422) | typedef struct sqlite3_rtree_geometry sqlite3_rtree_geometry;
  type sqlite3_rtree_query_info (line 8423) | typedef struct sqlite3_rtree_query_info sqlite3_rtree_query_info;
  type sqlite3_int64 (line 8429) | typedef sqlite3_int64 sqlite3_rtree_dbl;
  type sqlite3_rtree_dbl (line 8431) | typedef double sqlite3_rtree_dbl;
  type sqlite3_rtree_geometry (line 8452) | struct sqlite3_rtree_geometry {
  type sqlite3_rtree_query_info (line 8484) | struct sqlite3_rtree_query_info {
  type sqlite3_session (line 8535) | typedef struct sqlite3_session sqlite3_session;
  type sqlite3_changeset_iter (line 8540) | typedef struct sqlite3_changeset_iter sqlite3_changeset_iter;
  type sqlite3_changegroup (line 9250) | typedef struct sqlite3_changegroup sqlite3_changegroup;
  type Fts5ExtensionApi (line 9838) | typedef struct Fts5ExtensionApi Fts5ExtensionApi;
  type Fts5Context (line 9839) | typedef struct Fts5Context Fts5Context;
  type Fts5PhraseIter (line 9840) | typedef struct Fts5PhraseIter Fts5PhraseIter;
  type Fts5PhraseIter (line 9850) | struct Fts5PhraseIter {
  type Fts5ExtensionApi (line 10070) | struct Fts5ExtensionApi {
  type Fts5Tokenizer (line 10304) | typedef struct Fts5Tokenizer Fts5Tokenizer;
  type fts5_tokenizer (line 10305) | typedef struct fts5_tokenizer fts5_tokenizer;
  type fts5_tokenizer (line 10306) | struct fts5_tokenizer {
  type fts5_api (line 10341) | typedef struct fts5_api fts5_api;
  type fts5_api (line 10342) | struct fts5_api {

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/src/alter.c
  function renameTableFunc (line 37) | static void renameTableFunc(
  function renameParentFunc (line 102) | static void renameParentFunc(
  function renameTriggerFunc (line 159) | static void renameTriggerFunc(
  function sqlite3AlterFunctions (line 231) | void sqlite3AlterFunctions(void){
  function reloadTableSchema (line 328) | static void reloadTableSchema(Parse *pParse, Table *pTab, const char *zN...
  function isSystemTable (line 377) | static int isSystemTable(Parse *pParse, const char *zName){
  function sqlite3AlterRenameTable (line 389) | void sqlite3AlterRenameTable(
  function sqlite3AlterFinishAddColumn (line 593) | void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
  function sqlite3AlterBeginAddColumn (line 731) | void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/src/analyze.c
  function openStatTable (line 172) | static void openStatTable(
  type Stat4Accum (line 265) | typedef struct Stat4Accum Stat4Accum;
  type Stat4Sample (line 266) | typedef struct Stat4Sample Stat4Sample;
  type Stat4Sample (line 267) | struct Stat4Sample {
  type Stat4Accum (line 282) | struct Stat4Accum {
  function sampleClear (line 301) | static void sampleClear(sqlite3 *db, Stat4Sample *p){
  function sampleSetRowid (line 313) | static void sampleSetRowid(sqlite3 *db, Stat4Sample *p, int n, const u8 ...
  function sampleSetRowidInt64 (line 329) | static void sampleSetRowidInt64(sqlite3 *db, Stat4Sample *p, i64 iRowid){
  function sampleCopy (line 342) | static void sampleCopy(Stat4Accum *p, Stat4Sample *pTo, Stat4Sample *pFr...
  function stat4Destructor (line 360) | static void stat4Destructor(void *pOld){
  type Stat4Sample (line 454) | struct Stat4Sample
  function sampleIsBetterPost (line 499) | static int sampleIsBetterPost(
  function sampleIsBetter (line 523) | static int sampleIsBetter(
  function sampleInsert (line 550) | static void sampleInsert(Stat4Accum *p, Stat4Sample *pNew, int nEqZero){
  function samplePushPrevious (line 640) | static void samplePushPrevious(Stat4Accum *p, int iChng){
  function statPush (line 706) | static void statPush(
  function statGet (line 805) | static void statGet(
  function callStatGet (line 931) | static void callStatGet(Vdbe *v, int regStat4, int iParam, int regOut){
  function analyzeOneTable (line 949) | static void analyzeOneTable(
  function loadAnalysis (line 1275) | static void loadAnalysis(Parse *pParse, int iDb){
  function analyzeDatabase (line 1285) | static void analyzeDatabase(Parse *pParse, int iDb){
  function analyzeTable (line 1312) | static void analyzeTable(Parse *pParse, Table *pTab, Index *pOnlyIdx){
  function sqlite3Analyze (line 1343) | void sqlite3Analyze(Parse *pParse, Token *pName1, Token *pName2){
  type analysisInfo (line 1407) | typedef struct analysisInfo analysisInfo;
  type analysisInfo (line 1408) | struct analysisInfo {
  function analysisLoader (line 1489) | static int analysisLoader(void *pData, int argc, char **argv, char **Not...
  function sqlite3DeleteIndexSamples (line 1547) | void sqlite3DeleteIndexSamples(sqlite3 *db, Index *pIdx){
  function initAvgEq (line 1572) | static void initAvgEq(Index *pIdx){
  function Index (line 1631) | static Index *findIndexOrPrimaryKey(
  function loadStatTbl (line 1657) | static int loadStatTbl(
  function loadStat4 (line 1781) | static int loadStat4(sqlite3 *db, const char *zDb){
  function sqlite3AnalysisLoad (line 1825) | int sqlite3AnalysisLoad(sqlite3 *db, int iDb){

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/src/attach.c
  function resolveAttachExpr (line 35) | static int resolveAttachExpr(NameContext *pName, Expr *pExpr)
  function attachFunc (line 59) | static void attachFunc(
  function detachFunc (line 261) | static void detachFunc(
  function codeAttach (line 313) | static void codeAttach(
  function sqlite3Detach (line 387) | void sqlite3Detach(Parse *pParse, Expr *pDbname){
  function sqlite3Attach (line 406) | void sqlite3Attach(Parse *pParse, Expr *p, Expr *pDbname, Expr *pKey){
  function sqlite3FixInit (line 425) | void sqlite3FixInit(
  function sqlite3FixSrcList (line 458) | int sqlite3FixSrcList(
  function sqlite3FixSelect (line 488) | int sqlite3FixSelect(
  function sqlite3FixExpr (line 521) | int sqlite3FixExpr(
  function sqlite3FixExprList (line 547) | int sqlite3FixExprList(
  function sqlite3FixTriggerStep (line 564) | int sqlite3FixTriggerStep(

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/src/auth.c
  function sqlite3_set_authorizer (line 70) | int sqlite3_set_authorizer(
  function sqliteAuthBadReturnCode (line 90) | static void sqliteAuthBadReturnCode(Parse *pParse){
  function sqlite3AuthReadCol (line 104) | int sqlite3AuthReadCol(
  function sqlite3AuthRead (line 142) | void sqlite3AuthRead(
  function sqlite3AuthCheck (line 199) | int sqlite3AuthCheck(
  function sqlite3AuthContextPush (line 239) | void sqlite3AuthContextPush(
  function sqlite3AuthContextPop (line 254) | void sqlite3AuthContextPop(AuthContext *pContext){

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/src/backup.c
  type sqlite3_backup (line 21) | struct sqlite3_backup {
  function Btree (line 82) | static Btree *findBtree(sqlite3 *pErrorDb, sqlite3 *pDb, const char *zDb){
  function setDestPgsz (line 113) | static int setDestPgsz(sqlite3_backup *p){
  function checkReadTransaction (line 125) | static int checkReadTransaction(sqlite3 *db, Btree *p){
  function sqlite3_backup (line 141) | sqlite3_backup *sqlite3_backup_init(
  function isFatalError (line 218) | static int isFatalError(int rc){
  function backupOnePage (line 227) | static int backupOnePage(
  function backupTruncateFile (line 326) | static int backupTruncateFile(sqlite3_file *pFile, i64 iSize){
  function attachBackupObject (line 339) | static void attachBackupObject(sqlite3_backup *p){
  function sqlite3_backup_step (line 351) | int sqlite3_backup_step(sqlite3_backup *p, int nPage){
  function sqlite3_backup_finish (line 605) | int sqlite3_backup_finish(sqlite3_backup *p){
  function sqlite3_backup_remaining (line 657) | int sqlite3_backup_remaining(sqlite3_backup *p){
  function sqlite3_backup_pagecount (line 671) | int sqlite3_backup_pagecount(sqlite3_backup *p){
  function SQLITE_NOINLINE (line 693) | static SQLITE_NOINLINE void backupUpdate(
  function sqlite3BackupUpdate (line 718) | void sqlite3BackupUpdate(sqlite3_backup *pBackup, Pgno iPage, const u8 *...
  function sqlite3BackupRestart (line 733) | void sqlite3BackupRestart(sqlite3_backup *pBackup){
  function sqlite3BtreeCopyFile (line 750) | int sqlite3BtreeCopyFile(Btree *pTo, Btree *pFrom){

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/src/bitvec.c
  type Bitvec (line 94) | struct Bitvec {
  function Bitvec (line 115) | Bitvec *sqlite3BitvecCreate(u32 iSize){
  function sqlite3BitvecTestNotNull (line 130) | int sqlite3BitvecTestNotNull(Bitvec *p, u32 i){
  function sqlite3BitvecTest (line 153) | int sqlite3BitvecTest(Bitvec *p, u32 i){
  function sqlite3BitvecSet (line 169) | int sqlite3BitvecSet(Bitvec *p, u32 i){
  function sqlite3BitvecClear (line 240) | void sqlite3BitvecClear(Bitvec *p, u32 i, void *pBuf){
  function sqlite3BitvecDestroy (line 277) | void sqlite3BitvecDestroy(Bitvec *p){
  function u32 (line 292) | u32 sqlite3BitvecSize(Bitvec *p){
  function sqlite3BitvecBuiltinTest (line 337) | int sqlite3BitvecBuiltinTest(int sz, int *aOp){

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/src/btmutex.c
  function lockBtreeMutex (line 27) | static void lockBtreeMutex(Btree *p){
  function unlockBtreeMutex (line 41) | static void SQLITE_NOINLINE unlockBtreeMutex(Btree *p){
  function sqlite3BtreeEnter (line 71) | void sqlite3BtreeEnter(Btree *p){
  function btreeLockCarefully (line 105) | static void SQLITE_NOINLINE btreeLockCarefully(Btree *p){
  function sqlite3BtreeLeave (line 143) | void sqlite3BtreeLeave(Btree *p){
  function sqlite3BtreeHoldsMutex (line 161) | int sqlite3BtreeHoldsMutex(Btree *p){
  function sqlite3BtreeEnterAll (line 186) | void sqlite3BtreeEnterAll(sqlite3 *db){
  function sqlite3BtreeLeaveAll (line 195) | void sqlite3BtreeLeaveAll(sqlite3 *db){
  function sqlite3BtreeHoldsAllMutexes (line 212) | int sqlite3BtreeHoldsAllMutexes(sqlite3 *db){
  function sqlite3SchemaMutexHeld (line 241) | int sqlite3SchemaMutexHeld(sqlite3 *db, int iDb, Schema *pSchema){
  function sqlite3BtreeEnter (line 265) | void sqlite3BtreeEnter(Btree *p){
  function sqlite3BtreeEnterAll (line 268) | void sqlite3BtreeEnterAll(sqlite3 *db){
  function sqlite3BtreeEnterCursor (line 287) | void sqlite3BtreeEnterCursor(BtCursor *pCur){
  function sqlite3BtreeLeaveCursor (line 291) | void sqlite3BtreeLeaveCursor(BtCursor *pCur){

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/src/btree.c
  function sqlite3_enable_shared_cache (line 89) | int sqlite3_enable_shared_cache(int enable){
  function hasSharedCacheTableLock (line 140) | static int hasSharedCacheTableLock(
  function hasReadConflicts (line 227) | static int hasReadConflicts(Btree *pBtree, Pgno iRoot){
  function querySharedCacheTableLock (line 247) | static int querySharedCacheTableLock(Btree *p, Pgno iTab, u8 eLock){
  function setSharedCacheTableLock (line 319) | static int setSharedCacheTableLock(Btree *p, Pgno iTable, u8 eLock){
  function clearAllSharedCacheTableLocks (line 383) | static void clearAllSharedCacheTableLocks(Btree *p){
  function downgradeAllSharedCacheTableLocks (line 427) | static void downgradeAllSharedCacheTableLocks(Btree *p){
  function cursorHoldsMutex (line 450) | static int cursorHoldsMutex(BtCursor *p){
  function cursorOwnsBtShared (line 462) | static int cursorOwnsBtShared(BtCursor *p){
  function invalidateAllOverflowCache (line 478) | static void invalidateAllOverflowCache(BtShared *pBt){
  function invalidateIncrblobCursors (line 500) | static void invalidateIncrblobCursors(
  function btreeSetHasContent (line 559) | static int btreeSetHasContent(BtShared *pBt, Pgno pgno){
  function btreeGetHasContent (line 581) | static int btreeGetHasContent(BtShared *pBt, Pgno pgno){
  function btreeClearHasContent (line 590) | static void btreeClearHasContent(BtShared *pBt){
  function btreeReleaseAllCursorPages (line 598) | static void btreeReleaseAllCursorPages(BtCursor *pCur){
  function saveCursorKey (line 620) | static int saveCursorKey(BtCursor *pCur){
  function saveCursorPosition (line 656) | static int saveCursorPosition(BtCursor *pCur){
  function saveAllCursors (line 703) | static int saveAllCursors(BtShared *pBt, Pgno iRoot, BtCursor *pExcept){
  function saveCursorsOnList (line 720) | static int SQLITE_NOINLINE saveCursorsOnList(
  function sqlite3BtreeClearCursor (line 745) | void sqlite3BtreeClearCursor(BtCursor *pCur){
  function btreeMoveto (line 757) | static int btreeMoveto(
  function btreeRestoreCursorPosition (line 797) | static int btreeRestoreCursorPosition(BtCursor *pCur){
  function sqlite3BtreeCursorHasMoved (line 836) | int sqlite3BtreeCursorHasMoved(BtCursor *pCur){
  function sqlite3BtreeCursorRestore (line 853) | int sqlite3BtreeCursorRestore(BtCursor *pCur, int *pDifferentRow){
  function sqlite3BtreeCursorHint (line 878) | void sqlite3BtreeCursorHint(BtCursor *pCur, int eHintType, ...){
  function sqlite3BtreeCursorHintFlags (line 886) | void sqlite3BtreeCursorHintFlags(BtCursor *pCur, unsigned x){
  function Pgno (line 902) | static Pgno ptrmapPageno(BtShared *pBt, Pgno pgno){
  function ptrmapPut (line 926) | static void ptrmapPut(BtShared *pBt, Pgno key, u8 eType, Pgno parent, in...
  function ptrmapGet (line 978) | static int ptrmapGet(BtShared *pBt, Pgno key, u8 *pEType, Pgno *pPgno){
  function SQLITE_NOINLINE (line 1037) | static SQLITE_NOINLINE void btreeParseCellAdjustSizeForOverflow(
  function btreeParseCellPtrNoPayload (line 1082) | static void btreeParseCellPtrNoPayload(
  function btreeParseCellPtr (line 1099) | static void btreeParseCellPtr(
  function btreeParseCellPtrIndex (line 1167) | static void btreeParseCellPtrIndex(
  function btreeParseCell (line 1204) | static void btreeParseCell(
  function u16 (line 1224) | static u16 cellSizePtr(MemPage *pPage, u8 *pCell){
  function u16 (line 1272) | static u16 cellSizePtrNoPayload(MemPage *pPage, u8 *pCell){
  function u16 (line 1298) | static u16 cellSize(MemPage *pPage, int iCell){
  function ptrmapPutOvflPtr (line 1309) | static void ptrmapPutOvflPtr(MemPage *pPage, u8 *pCell, int *pRC){
  function defragmentPage (line 1333) | static int defragmentPage(MemPage *pPage){
  function u8 (line 1423) | static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){
  function allocateSpace (line 1486) | static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
  function freeSpace (line 1576) | static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){
  function decodeFlags (line 1678) | static int decodeFlags(MemPage *pPage, int flagByte){
  function btreeInitPage (line 1736) | static int btreeInitPage(MemPage *pPage){
  function zeroPage (line 1867) | static void zeroPage(MemPage *pPage, int flags){
  function MemPage (line 1904) | static MemPage *btreePageFromDbPage(DbPage *pDbPage, Pgno pgno, BtShared...
  function btreeGetPage (line 1928) | static int btreeGetPage(
  function MemPage (line 1950) | static MemPage *btreePageLookup(BtShared *pBt, Pgno pgno){
  function Pgno (line 1964) | static Pgno btreePagecount(BtShared *pBt){
  function u32 (line 1967) | u32 sqlite3BtreeLastPage(Btree *p){
  function getAndInitPage (line 1986) | static int getAndInitPage(
  function releasePageNotNull (line 2040) | static void releasePageNotNull(MemPage *pPage){
  function releasePage (line 2049) | static void releasePage(MemPage *pPage){
  function btreeGetUnusedPage (line 2062) | static int btreeGetUnusedPage(
  function pageReinit (line 2091) | static void pageReinit(DbPage *pData){
  function btreeInvokeBusyHandler (line 2113) | static int btreeInvokeBusyHandler(void *pArg){
  function sqlite3BtreeOpen (line 2141) | int sqlite3BtreeOpen(
  function removeFromSharingList (line 2426) | static int removeFromSharingList(BtShared *pBt){
  function allocateTempSpace (line 2465) | static void allocateTempSpace(BtShared *pBt){
  function freeTempSpace (line 2494) | static void freeTempSpace(BtShared *pBt){
  function sqlite3BtreeClose (line 2505) | int sqlite3BtreeClose(Btree *p){
  function sqlite3BtreeSetCacheSize (line 2567) | int sqlite3BtreeSetCacheSize(Btree *p, int mxPage){
  function sqlite3BtreeSetSpillSize (line 2586) | int sqlite3BtreeSetSpillSize(Btree *p, int mxPage){
  function sqlite3BtreeSetMmapLimit (line 2601) | int sqlite3BtreeSetMmapLimit(Btree *p, sqlite3_int64 szMmap){
  function sqlite3BtreeSetPagerFlags (line 2620) | int sqlite3BtreeSetPagerFlags(
  function sqlite3BtreeSetPageSize (line 2653) | int sqlite3BtreeSetPageSize(Btree *p, int pageSize, int nReserve, int iF...
  function sqlite3BtreeGetPageSize (line 2686) | int sqlite3BtreeGetPageSize(Btree *p){
  function sqlite3BtreeGetReserveNoMutex (line 2701) | int sqlite3BtreeGetReserveNoMutex(Btree *p){
  function sqlite3BtreeGetOptimalReserve (line 2717) | int sqlite3BtreeGetOptimalReserve(Btree *p){
  function sqlite3BtreeMaxPageCount (line 2734) | int sqlite3BtreeMaxPageCount(Btree *p, int mxPage){
  function sqlite3BtreeSecureDelete (line 2747) | int sqlite3BtreeSecureDelete(Btree *p, int newFlag){
  function sqlite3BtreeSetAutoVacuum (line 2766) | int sqlite3BtreeSetAutoVacuum(Btree *p, int autoVacuum){
  function sqlite3BtreeGetAutoVacuum (line 2790) | int sqlite3BtreeGetAutoVacuum(Btree *p){
  function lockBtree (line 2816) | static int lockBtree(BtShared *pBt){
  function countValidCursors (line 3011) | static int countValidCursors(BtShared *pBt, int wrOnly){
  function unlockBtreeIfUnused (line 3030) | static void unlockBtreeIfUnused(BtShared *pBt){
  function newDatabase (line 3047) | static int newDatabase(BtShared *pBt){
  function sqlite3BtreeNewDb (line 3091) | int sqlite3BtreeNewDb(Btree *p){
  function sqlite3BtreeBeginTrans (line 3135) | int sqlite3BtreeBeginTrans(Btree *p, int wrflag){
  function setChildPtrmaps (line 3289) | static int setChildPtrmaps(MemPage *pPage){
  function modifyPagePointer (line 3339) | static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eT...
  function relocatePage (line 3401) | static int relocatePage(
  function incrVacuumStep (line 3494) | static int incrVacuumStep(BtShared *pBt, Pgno nFin, Pgno iLastPg, int bC...
  function Pgno (line 3590) | static Pgno finalDbSize(BtShared *pBt, Pgno nOrig, Pgno nFree){
  function sqlite3BtreeIncrVacuum (line 3616) | int sqlite3BtreeIncrVacuum(Btree *p){
  function autoVacuumCommit (line 3658) | static int autoVacuumCommit(BtShared *pBt){
  function sqlite3BtreeCommitPhaseOne (line 3737) | int sqlite3BtreeCommitPhaseOne(Btree *p, const char *zMaster){
  function btreeEndTransaction (line 3764) | static void btreeEndTransaction(Btree *p){
  function sqlite3BtreeCommitPhaseTwo (line 3826) | int sqlite3BtreeCommitPhaseTwo(Btree *p, int bCleanup){
  function sqlite3BtreeCommit (line 3858) | int sqlite3BtreeCommit(Btree *p){
  function sqlite3BtreeTripAllCursors (line 3895) | int sqlite3BtreeTripAllCursors(Btree *pBtree, int errCode, int writeOnly){
  function sqlite3BtreeRollback (line 3938) | int sqlite3BtreeRollback(Btree *p, int tripCode, int writeOnly){
  function sqlite3BtreeBeginStmt (line 4007) | int sqlite3BtreeBeginStmt(Btree *p, int iStatement){
  function sqlite3BtreeSavepoint (line 4038) | int sqlite3BtreeSavepoint(Btree *p, int op, int iSavepoint){
  function btreeCursor (line 4105) | static int btreeCursor(
  function sqlite3BtreeCursor (line 4165) | int sqlite3BtreeCursor(
  function sqlite3BtreeCursorSize (line 4191) | int sqlite3BtreeCursorSize(void){
  function sqlite3BtreeCursorZero (line 4203) | void sqlite3BtreeCursorZero(BtCursor *p){
  function sqlite3BtreeCloseCursor (line 4211) | int sqlite3BtreeCloseCursor(BtCursor *pCur){
  function assertCellInfo (line 4251) | static void assertCellInfo(BtCursor *pCur){
  function SQLITE_NOINLINE (line 4261) | static SQLITE_NOINLINE void getCellInfo(BtCursor *pCur){
  function sqlite3BtreeCursorIsValid (line 4277) | int sqlite3BtreeCursorIsValid(BtCursor *pCur){
  function i64 (line 4288) | i64 sqlite3BtreeIntegerKey(BtCursor *pCur){
  function u32 (line 4305) | u32 sqlite3BtreePayloadSize(BtCursor *pCur){
  function getOverflowPage (line 4331) | static int getOverflowPage(
  function copyPayload (line 4399) | static int copyPayload(
  function accessPayload (line 4450) | static int accessPayload(
  function sqlite3BtreeKey (line 4661) | int sqlite3BtreeKey(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){
  function sqlite3BtreeData (line 4678) | int sqlite3BtreeData(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){
  function moveToChild (line 4765) | static int moveToChild(BtCursor *pCur, u32 newPgno){
  function assertParentIndex (line 4791) | static void assertParentIndex(MemPage *pParent, int iIdx, Pgno iChild){
  function moveToParent (line 4813) | static void moveToParent(BtCursor *pCur){
  function moveToRoot (line 4850) | static int moveToRoot(BtCursor *pCur){
  function moveToLeftmost (line 4928) | static int moveToLeftmost(BtCursor *pCur){
  function moveToRightmost (line 4953) | static int moveToRightmost(BtCursor *pCur){
  function sqlite3BtreeFirst (line 4976) | int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){
  function sqlite3BtreeLast (line 4999) | int sqlite3BtreeLast(BtCursor *pCur, int *pRes){
  function sqlite3BtreeMovetoUnpacked (line 5070) | int sqlite3BtreeMovetoUnpacked(
  function sqlite3BtreeEof (line 5295) | int sqlite3BtreeEof(BtCursor *pCur){
  function SQLITE_NOINLINE (line 5324) | static SQLITE_NOINLINE int btreeNext(BtCursor *pCur, int *pRes){
  function sqlite3BtreeNext (line 5391) | int sqlite3BtreeNext(BtCursor *pCur, int *pRes){
  function SQLITE_NOINLINE (line 5434) | static SQLITE_NOINLINE int btreePrevious(BtCursor *pCur, int *pRes){
  function sqlite3BtreePrevious (line 5493) | int sqlite3BtreePrevious(BtCursor *pCur, int *pRes){
  function allocateBtreePage (line 5533) | static int allocateBtreePage(
  function freePage2 (line 5855) | static int freePage2(BtShared *pBt, MemPage *pMemPage, Pgno iPage){
  function freePage (line 5983) | static void freePage(MemPage *pPage, int *pRC){
  function clearCell (line 5994) | static int clearCell(
  function fillInCell (line 6075) | static int fillInCell(
  function dropCell (line 6252) | static void dropCell(MemPage *pPage, int idx, int sz, int *pRC){
  function insertCell (line 6308) | static void insertCell(
  type CellArray (line 6398) | typedef struct CellArray CellArray;
  type CellArray (line 6399) | struct CellArray {
  function populateCellCache (line 6410) | static void populateCellCache(CellArray *p, int idx, int N){
  function SQLITE_NOINLINE (line 6428) | static SQLITE_NOINLINE u16 computeCellSize(CellArray *p, int N){
  function u16 (line 6434) | static u16 cachedCellSize(CellArray *p, int N){
  function rebuildPage (line 6453) | static int rebuildPage(
  function pageInsertArray (line 6522) | static int pageInsertArray(
  function pageFreeArray (line 6568) | static int pageFreeArray(
  function editPage (line 6625) | static int editPage(
  function balance_quick (line 6759) | static int balance_quick(MemPage *pParent, MemPage *pPage, u8 *pSpace){
  function ptrmapCheckPages (line 6850) | static int ptrmapCheckPages(MemPage **apPage, int nPage){
  function copyNodeContent (line 6903) | static void copyNodeContent(MemPage *pFrom, MemPage *pTo, int *pRC){
  function balance_nonroot (line 6984) | static int balance_nonroot(
  function balance_deeper (line 7748) | static int balance_deeper(MemPage *pRoot, MemPage **ppChild){
  function balance (line 7805) | static int balance(BtCursor *pCur){
  function sqlite3BtreeInsert (line 7950) | int sqlite3BtreeInsert(
  function sqlite3BtreeDelete (line 8117) | int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){
  function btreeCreateTable (line 8282) | static int btreeCreateTable(Btree *p, int *piTable, int createTabFlags){
  function sqlite3BtreeCreateTable (line 8425) | int sqlite3BtreeCreateTable(Btree *p, int *piTable, int flags){
  function clearDatabasePage (line 8437) | static int clearDatabasePage(
  function sqlite3BtreeClearTable (line 8504) | int sqlite3BtreeClearTable(Btree *p, int iTable, int *pnChange){
  function sqlite3BtreeClearTableOfCursor (line 8528) | int sqlite3BtreeClearTableOfCursor(BtCursor *pCur){
  function btreeDropTable (line 8552) | static int btreeDropTable(Btree *p, Pgno iTable, int *piMoved){
  function sqlite3BtreeDropTable (line 8654) | int sqlite3BtreeDropTable(Btree *p, int iTable, int *piMoved){
  function sqlite3BtreeGetMeta (line 8683) | void sqlite3BtreeGetMeta(Btree *p, int idx, u32 *pMeta){
  function sqlite3BtreeUpdateMeta (line 8713) | int sqlite3BtreeUpdateMeta(Btree *p, int idx, u32 iMeta){
  function sqlite3BtreeCount (line 8746) | int sqlite3BtreeCount(BtCursor *pCur, i64 *pnEntry){
  function Pager (line 8816) | Pager *sqlite3BtreePager(Btree *p){
  function checkAppendMsg (line 8824) | static void checkAppendMsg(
  function getPageReferenced (line 8854) | static int getPageReferenced(IntegrityCk *pCheck, Pgno iPg){
  function setPageReferenced (line 8862) | static void setPageReferenced(IntegrityCk *pCheck, Pgno iPg){
  function checkRef (line 8876) | static int checkRef(IntegrityCk *pCheck, Pgno iPage){
  function checkPtrmap (line 8896) | static void checkPtrmap(
  function checkList (line 8925) | static void checkList(
  function btreeHeapInsert (line 9017) | static void btreeHeapInsert(u32 *aHeap, u32 x){
  function btreeHeapPull (line 9027) | static int btreeHeapPull(u32 *aHeap, u32 *pOut){
  function checkTreePage (line 9061) | static int checkTreePage(
  function sqlite3BtreeIsInTrans (line 9465) | int sqlite3BtreeIsInTrans(Btree *p){
  function sqlite3BtreeCheckpoint (line 9479) | int sqlite3BtreeCheckpoint(Btree *p, int eMode, int *pnLog, int *pnCkpt){
  function sqlite3BtreeCheckpointHandler (line 9495) | int sqlite3BtreeCheckpointHandler(Btree* p,
  function sqlite3BtreeIsInReadTrans (line 9514) | int sqlite3BtreeIsInReadTrans(Btree *p){
  function sqlite3BtreeIsInBackup (line 9520) | int sqlite3BtreeIsInBackup(Btree *p){
  function sqlite3BtreeSchemaLocked (line 9562) | int sqlite3BtreeSchemaLocked(Btree *p){
  function sqlite3BtreeLockTable (line 9579) | int sqlite3BtreeLockTable(Btree *p, int iTab, u8 isWriteLock){
  function sqlite3BtreePutData (line 9609) | int sqlite3BtreePutData(BtCursor *pCsr, u32 offset, u32 amt, void *z){
  function sqlite3BtreeIncrblobCursor (line 9657) | void sqlite3BtreeIncrblobCursor(BtCursor *pCur){
  function sqlite3BtreeSetVersion (line 9668) | int sqlite3BtreeSetVersion(Btree *pBtree, int iVersion){
  function sqlite3BtreeCursorHasHint (line 9703) | int sqlite3BtreeCursorHasHint(BtCursor *pCsr, unsigned int mask){
  function sqlite3BtreeIsReadonly (line 9710) | int sqlite3BtreeIsReadonly(Btree *p){
  function sqlite3HeaderSizeBtree (line 9717) | int sqlite3HeaderSizeBtree(void){ return ROUND8(sizeof(MemPage)); }
  function sqlite3BtreeSharable (line 9723) | int sqlite3BtreeSharable(Btree *p){
  function sqlite3BtreeConnectionCount (line 9732) | int sqlite3BtreeConnectionCount(Btree *p){

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/src/btree.h
  type Btree (line 39) | typedef struct Btree Btree;
  type BtCursor (line 40) | typedef struct BtCursor BtCursor;
  type BtShared (line 41) | typedef struct BtShared BtShared;
  type BtreePayload (line 42) | typedef struct BtreePayload BtreePayload;
  type KeyInfo (line 230) | struct KeyInfo
  type BtreePayload (line 274) | struct BtreePayload {
  type Pager (line 296) | struct Pager

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/src/btreeInt.h
  type MemPage (line 232) | typedef struct MemPage MemPage;
  type BtLock (line 233) | typedef struct BtLock BtLock;
  type CellInfo (line 234) | typedef struct CellInfo CellInfo;
  type MemPage (line 274) | struct MemPage {
  type BtLock (line 318) | struct BtLock {
  type Btree (line 350) | struct Btree {
  type BtShared (line 413) | struct BtShared {
  type CellInfo (line 467) | struct CellInfo {
  type BtCursor (line 505) | struct BtCursor {
  type IntegrityCk (line 671) | typedef struct IntegrityCk IntegrityCk;
  type IntegrityCk (line 672) | struct IntegrityCk {

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/src/build.c
  type TableLock (line 32) | struct TableLock {
  function sqlite3TableLock (line 49) | void sqlite3TableLock(
  function codeTableLocks (line 89) | static void codeTableLocks(Parse *pParse){
  function sqlite3DbMaskAllZero (line 113) | int sqlite3DbMaskAllZero(yDbMask m){
  function sqlite3FinishCoding (line 130) | void sqlite3FinishCoding(Parse *pParse){
  function sqlite3NestedParse (line 249) | void sqlite3NestedParse(Parse *pParse, const char *zFormat, ...){
  function sqlite3UserAuthTable (line 279) | int sqlite3UserAuthTable(const char *zTable){
  function Table (line 296) | Table *sqlite3FindTable(sqlite3 *db, const char *zName, const char *zDat...
  function Table (line 330) | Table *sqlite3LocateTable(
  function Table (line 380) | Table *sqlite3LocateTableItem(
  function Index (line 408) | Index *sqlite3FindIndex(sqlite3 *db, const char *zName, const char *zDb){
  function freeIndex (line 428) | static void freeIndex(sqlite3 *db, Index *p){
  function sqlite3UnlinkAndDeleteIndex (line 448) | void sqlite3UnlinkAndDeleteIndex(sqlite3 *db, int iDb, const char *zIdxN...
  function sqlite3CollapseDatabaseArray (line 481) | void sqlite3CollapseDatabaseArray(sqlite3 *db){
  function sqlite3ResetOneSchema (line 507) | void sqlite3ResetOneSchema(sqlite3 *db, int iDb){
  function sqlite3ResetAllSchemasOfConnection (line 533) | void sqlite3ResetAllSchemasOfConnection(sqlite3 *db){
  function sqlite3CommitInternalChanges (line 551) | void sqlite3CommitInternalChanges(sqlite3 *db){
  function sqlite3DeleteColumnNames (line 559) | void sqlite3DeleteColumnNames(sqlite3 *db, Table *pTable){
  function deleteTable (line 588) | static void SQLITE_NOINLINE deleteTable(sqlite3 *db, Table *pTable){
  function sqlite3DeleteTable (line 632) | void sqlite3DeleteTable(sqlite3 *db, Table *pTable){
  function sqlite3UnlinkAndDeleteTable (line 644) | void sqlite3UnlinkAndDeleteTable(sqlite3 *db, int iDb, const char *zTabN...
  function sqlite3OpenMasterTable (line 687) | void sqlite3OpenMasterTable(Parse *p, int iDb){
  function sqlite3FindDbName (line 702) | int sqlite3FindDbName(sqlite3 *db, const char *zName){
  function sqlite3FindDb (line 719) | int sqlite3FindDb(sqlite3 *db, Token *pName){
  function sqlite3TwoPartName (line 744) | int sqlite3TwoPartName(
  function sqlite3CheckObjectName (line 780) | int sqlite3CheckObjectName(Parse *pParse, const char *zName){
  function Index (line 793) | Index *sqlite3PrimaryKeyIndex(Table *pTab){
  function i16 (line 803) | i16 sqlite3ColumnOfIndex(Index *pIdx, i16 iCol){
  function sqlite3StartTable (line 827) | void sqlite3StartTable(
  function sqlite3ColumnPropertiesFromName (line 1017) | void sqlite3ColumnPropertiesFromName(Table *pTab, Column *pCol){
  function sqlite3AddColumn (line 1035) | void sqlite3AddColumn(Parse *pParse, Token *pName, Token *pType){
  function sqlite3AddNotNull (line 1098) | void sqlite3AddNotNull(Parse *pParse, int onError){
  function sqlite3AffinityType (line 1130) | char sqlite3AffinityType(const char *zIn, u8 *pszEst){
  function sqlite3AddDefaultValue (line 1202) | void sqlite3AddDefaultValue(Parse *pParse, ExprSpan *pSpan){
  function sqlite3StringToId (line 1248) | static void sqlite3StringToId(Expr *p){
  function sqlite3AddPrimaryKey (line 1274) | void sqlite3AddPrimaryKey(
  function sqlite3AddCheckConstraint (line 1344) | void sqlite3AddCheckConstraint(
  function sqlite3AddCollateType (line 1369) | void sqlite3AddCollateType(Parse *pParse, Token *pToken){
  function CollSeq (line 1421) | CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char *zName){
  function sqlite3ChangeCookie (line 1455) | void sqlite3ChangeCookie(Parse *pParse, int iDb){
  function identLength (line 1471) | static int identLength(const char *z){
  function identPut (line 1492) | static void identPut(char *z, int *pIdx, char *zSignedIdent){
  function resizeIndexObject (line 1588) | static int resizeIndexObject(sqlite3 *db, Index *pIdx, int N){
  function estimateTableWidth (line 1612) | static void estimateTableWidth(Table *pTab){
  function estimateIndexWidth (line 1626) | static void estimateIndexWidth(Index *pIdx){
  function hasColumn (line 1640) | static int hasColumn(const i16 *aiCol, int nCol, int x){
  function convertToWithoutRowidTable (line 1670) | static void convertToWithoutRowidTable(Parse *pParse, Table *pTab){
  function sqlite3EndTable (line 1817) | void sqlite3EndTable(
  function sqlite3CreateView (line 2059) | void sqlite3CreateView(
  function sqlite3ViewGetColumnNames (line 2131) | int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
  function sqliteViewResetAll (line 2245) | static void sqliteViewResetAll(sqlite3 *db, int idx){
  function sqlite3RootPageMoved (line 2281) | void sqlite3RootPageMoved(sqlite3 *db, int iDb, int iFrom, int iTo){
  function destroyRootPage (line 2311) | static void destroyRootPage(Parse *pParse, int iTable, int iDb){
  function destroyTable (line 2340) | static void destroyTable(Parse *pParse, Table *pTab){
  function sqlite3ClearStatTables (line 2398) | static void sqlite3ClearStatTables(
  function sqlite3CodeDropTable (line 2421) | void sqlite3CodeDropTable(Parse *pParse, Table *pTab, int iDb, int isView){
  function sqlite3DropTable (line 2492) | void sqlite3DropTable(Parse *pParse, SrcList *pName, int isView, int noE...
  function sqlite3CreateForeignKey (line 2608) | void sqlite3CreateForeignKey(
  function sqlite3DeferForeignKey (line 2729) | void sqlite3DeferForeignKey(Parse *pParse, int isDeferred){
  function sqlite3RefillIndex (line 2750) | static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRoot...
  function Index (line 2837) | Index *sqlite3AllocateIndexObject(
  function sqlite3CreateIndex (line 2877) | void sqlite3CreateIndex(
  function sqlite3DefaultRowEst (line 3435) | void sqlite3DefaultRowEst(Index *pIdx){
  function sqlite3DropIndex (line 3464) | void sqlite3DropIndex(Parse *pParse, SrcList *pName, int ifExists){
  function IdList (line 3576) | IdList *sqlite3IdListAppend(sqlite3 *db, IdList *pList, Token *pToken){
  function sqlite3IdListDelete (line 3600) | void sqlite3IdListDelete(sqlite3 *db, IdList *pList){
  function sqlite3IdListIndex (line 3614) | int sqlite3IdListIndex(IdList *pList, const char *zName){
  function SrcList (line 3642) | SrcList *sqlite3SrcListEnlarge(
  function SrcList (line 3724) | SrcList *sqlite3SrcListAppend(
  function sqlite3SrcListAssignCursors (line 3761) | void sqlite3SrcListAssignCursors(Parse *pParse, SrcList *pList){
  function sqlite3SrcListDelete (line 3779) | void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){
  function SrcList (line 3813) | SrcList *sqlite3SrcListAppendFromTerm(
  function sqlite3SrcListIndexedBy (line 3857) | void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pIndexedBy){
  function sqlite3SrcListFuncArgs (line 3879) | void sqlite3SrcListFuncArgs(Parse *pParse, SrcList *p, ExprList *pList){
  function sqlite3SrcListShiftJoinType (line 3907) | void sqlite3SrcListShiftJoinType(SrcList *p){
  function sqlite3BeginTransaction (line 3920) | void sqlite3BeginTransaction(Parse *pParse, int type){
  function sqlite3CommitTransaction (line 3945) | void sqlite3CommitTransaction(Parse *pParse){
  function sqlite3RollbackTransaction (line 3962) | void sqlite3RollbackTransaction(Parse *pParse){
  function sqlite3Savepoint (line 3980) | void sqlite3Savepoint(Parse *pParse, int op, Token *pName){
  function sqlite3OpenTempDatabase (line 4000) | int sqlite3OpenTempDatabase(Parse *pParse){
  function sqlite3CodeVerifySchema (line 4035) | void sqlite3CodeVerifySchema(Parse *pParse, int iDb){
  function sqlite3CodeVerifyNamedSchema (line 4054) | void sqlite3CodeVerifyNamedSchema(Parse *pParse, const char *zDb){
  function sqlite3BeginWriteOperation (line 4078) | void sqlite3BeginWriteOperation(Parse *pParse, int setStatement, int iDb){
  function sqlite3MultiWrite (line 4092) | void sqlite3MultiWrite(Parse *pParse){
  function sqlite3MayAbort (line 4113) | void sqlite3MayAbort(Parse *pParse){
  function sqlite3HaltConstraint (line 4123) | void sqlite3HaltConstraint(
  function sqlite3UniqueConstraint (line 4143) | void sqlite3UniqueConstraint(
  function sqlite3RowidConstraint (line 4176) | void sqlite3RowidConstraint(
  function collationMatch (line 4200) | static int collationMatch(const char *zColl, Index *pIndex){
  function reindexTable (line 4219) | static void reindexTable(Parse *pParse, Table *pTab, char const *zColl){
  function reindexDatabases (line 4238) | static void reindexDatabases(Parse *pParse, char const *zColl){
  function sqlite3Reindex (line 4270) | void sqlite3Reindex(Parse *pParse, Token *pName1, Token *pName2){
  function KeyInfo (line 4330) | KeyInfo *sqlite3KeyInfoOfIndex(Parse *pParse, Index *pIdx){
  function With (line 4362) | With *sqlite3WithAdd(
  function sqlite3WithDelete (line 4412) | void sqlite3WithDelete(sqlite3 *db, With *pWith){

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/src/callback.c
  function callCollNeeded (line 23) | static void callCollNeeded(sqlite3 *db, int enc, const char *zName){
  function synthCollSeq (line 52) | static int synthCollSeq(sqlite3 *db, CollSeq *pColl){
  function CollSeq (line 82) | CollSeq *sqlite3GetCollSeq(
  function sqlite3CheckCollSeq (line 123) | int sqlite3CheckCollSeq(Parse *pParse, CollSeq *pColl){
  function CollSeq (line 151) | static CollSeq *findCollSeqEntry(
  function CollSeq (line 204) | CollSeq *sqlite3FindCollSeq(
  function matchQuality (line 251) | static int matchQuality(
  function FuncDef (line 286) | static FuncDef *functionSearch(
  function sqlite3InsertBuiltinFuncs (line 302) | void sqlite3InsertBuiltinFuncs(
  function FuncDef (line 346) | FuncDef *sqlite3FindFunction(
  function sqlite3SchemaClear (line 436) | void sqlite3SchemaClear(void *p){
  function Schema (line 468) | Schema *sqlite3SchemaGet(sqlite3 *db, Btree *pBt){

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/src/complete.c
  function sqlite3_complete (line 104) | int sqlite3_complete(const char *zSql){
  function sqlite3_complete16 (line 269) | int sqlite3_complete16(const void *zSql){

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/src/crypto.c
  function codec_vdbe_return_static_string (line 44) | static void codec_vdbe_return_static_string(Parse *pParse, const char *z...
  function codec_set_btree_to_codec_pagesize (line 52) | static int codec_set_btree_to_codec_pagesize(sqlite3 *db, Db *pDb, codec...
  function codec_set_pass_key (line 70) | static int codec_set_pass_key(sqlite3* db, int nDb, const void *zKey, in...
  function sqlcipher_codec_pragma (line 81) | int sqlcipher_codec_pragma(sqlite3* db, int iDb, Parse *pParse, const ch...
  function sqlite3FreeCodecArg (line 334) | void sqlite3FreeCodecArg(void *pCodecArg) {
  function sqlite3CodecAttach (line 341) | int sqlite3CodecAttach(sqlite3* db, int nDb, const void *zKey, int nKey) {
  function sqlite3_activate_see (line 386) | void sqlite3_activate_see(const char* in) {
  function sqlcipher_find_db_index (line 390) | static int sqlcipher_find_db_index(sqlite3 *db, const char *zDb) {
  function sqlite3_key (line 404) | int sqlite3_key(sqlite3 *db, const void *pKey, int nKey) {
  function sqlite3_key_v2 (line 409) | int sqlite3_key_v2(sqlite3 *db, const char *zDb, const void *pKey, int n...
  function sqlite3_rekey (line 419) | int sqlite3_rekey(sqlite3 *db, const void *pKey, int nKey) {
  function sqlite3_rekey_v2 (line 434) | int sqlite3_rekey_v2(sqlite3 *db, const char *zDb, const void *pKey, int...
  function sqlite3CodecGetKey (line 500) | void sqlite3CodecGetKey(sqlite3* db, int nDb, void **zKey, int *nKey) {
  function cipher_hex2bin (line 520) | void cipher_hex2bin(const unsigned char *hex, int sz, unsigned char *out){
  function cipher_bin2hex (line 529) | void cipher_bin2hex(const unsigned char* in, int sz, char *out) {
  function cipher_isHex (line 538) | int cipher_isHex(const unsigned char *hex, int sz){
  function sqlcipher_finalize (line 575) | static int sqlcipher_finalize(sqlite3 *db, sqlite3_stmt *pStmt, char **p...
  function sqlcipher_execSql (line 589) | static int sqlcipher_execSql(sqlite3 *db, char **pzErrMsg, const char *z...
  function sqlcipher_execExecSql (line 610) | static int sqlcipher_execExecSql(sqlite3 *db, char **pzErrMsg, const cha...
  function sqlcipher_exportFunc (line 633) | void sqlcipher_exportFunc(sqlite3_context *context, int argc, sqlite3_va...

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/src/crypto.h
  function cipher_hex2int (line 155) | static int cipher_hex2int(char c) {
  function cipher_hex2bin (line 164) | static void cipher_hex2bin(const unsigned char *hex, int sz, unsigned ch...
  function cipher_bin2hex (line 175) | static void cipher_bin2hex(const unsigned char* in, int sz, char *out) {
  function cipher_isHex (line 186) | static int cipher_isHex(const unsigned char *hex, int sz){
  type codec_ctx (line 201) | typedef struct codec_ctx codec_ctx;

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/src/crypto_cc.c
  function sqlcipher_cc_add_random (line 40) | static int sqlcipher_cc_add_random(void *ctx, void *buffer, int length) {
  function sqlcipher_cc_random (line 45) | static int sqlcipher_cc_random (void *ctx, void *buffer, int length) {
  function sqlcipher_cc_hmac (line 67) | static int sqlcipher_cc_hmac(void *ctx, unsigned char *hmac_key, int key...
  function sqlcipher_cc_kdf (line 76) | static int sqlcipher_cc_kdf(void *ctx, const unsigned char *pass, int pa...
  function sqlcipher_cc_cipher (line 81) | static int sqlcipher_cc_cipher(void *ctx, int mode, unsigned char *key, ...
  function sqlcipher_cc_set_cipher (line 98) | static int sqlcipher_cc_set_cipher(void *ctx, const char *cipher_name) {
  function sqlcipher_cc_get_key_sz (line 106) | static int sqlcipher_cc_get_key_sz(void *ctx) {
  function sqlcipher_cc_get_iv_sz (line 110) | static int sqlcipher_cc_get_iv_sz(void *ctx) {
  function sqlcipher_cc_get_block_sz (line 114) | static int sqlcipher_cc_get_block_sz(void *ctx) {
  function sqlcipher_cc_get_hmac_sz (line 118) | static int sqlcipher_cc_get_hmac_sz(void *ctx) {
  function sqlcipher_cc_ctx_copy (line 122) | static int sqlcipher_cc_ctx_copy(void *target_ctx, void *source_ctx) {
  function sqlcipher_cc_ctx_cmp (line 126) | static int sqlcipher_cc_ctx_cmp(void *c1, void *c2) {
  function sqlcipher_cc_ctx_init (line 130) | static int sqlcipher_cc_ctx_init(void **ctx) {
  function sqlcipher_cc_ctx_free (line 134) | static int sqlcipher_cc_ctx_free(void **ctx) {
  function sqlcipher_cc_fips_status (line 138) | static int sqlcipher_cc_fips_status(void *ctx) {
  function sqlcipher_cc_setup (line 142) | int sqlcipher_cc_setup(sqlcipher_provider *p) {

FILE: JetChat/Pods/WCDBOptimizedSQLCipher/src/crypto_impl.c
  type cipher_ctx (line 47) | typedef struct {
  type codec_ctx (line 76) | struct codec_ctx {
  function sqlcipher_register_provider (line 89) | int sqlcipher_register_provider(sqlcipher_provider *p) {
  function sqlcipher_provider (line 105) | sqlcipher_provider* sqlcipher_get_provider() {
  function sqlcipher_activate (line 109) | void sqlcipher_activate() {
  function sqlcipher_deactivate (line 147) | void sqlcipher_deactivate() {
  function sqlcipher_ismemset (line 202) | int sqlcipher_ismemset(const void *v, unsigned char value, int len) {
  function sqlcipher_memcmp (line 239) | int sqlcipher_memcmp(const void *v0, const void *v1, int len) {
  function sqlcipher_free (line 270) | void sqlcipher_free(void *ptr, int sz) {
  function sqlcipher_cipher_ctx_init (line 318) | static int sqlcipher_cipher_ctx_init(cipher_ctx **iCtx) {
  function sqlcipher_cipher_ctx_free (line 348) | static void sqlcipher_cipher_ctx_free(cipher_ctx **iCtx) {
  function sqlcipher_cipher_ctx_cmp (line 366) | static int sqlcipher_cipher_ctx_cmp(cipher_ctx *c1, cipher_ctx *c2) {
  function sqlcipher_cipher_ctx_copy (line 428) | static int sqlcipher_cipher_ctx_copy(cipher_ctx *target, cipher_ctx *sou...
  function sqlcipher_cipher_ctx_set_keyspec (line 470) | static int sqlcipher_cipher_ctx_set_keyspec(cipher_ctx *ctx, const unsig...
  function sqlcipher_codec_get_store_pass (line 491) | int sqlcipher_codec_get_store_pass(codec_ctx *ctx) {
  function sqlcipher_codec_set_store_pass (line 495) | void sqlcipher_codec_set_store_pass(codec_ctx *ctx, int value) {
  function sqlcipher_codec_get_pass (line 499) | void sqlcipher_codec_get_pass(codec_ctx *ctx, void **zKey, int *nKey) {
  function sqlcipher_cipher_ctx_set_pass (line 510) | static int sqlcipher_cipher_ctx_set_pass(cipher_ctx *ctx, const void *zK...
  function sqlcipher_codec_ctx_set_pass (line 526) | int sqlcipher_codec_ctx_set_pass(codec_ctx *ctx, const void *zKey, int n...
  function sqlcipher_codec_ctx_set_cipher (line 540) | int sqlcipher_codec_ctx_set_cipher(codec_ctx *ctx, const char *cipher_na...
  function sqlcipher_set_default_kdf_iter (line 568) | void sqlcipher_set_default_kdf_iter(int iter) {
  function sqlcipher_get_default_kdf_iter (line 572) | int sqlcipher_get_default_kdf_iter() {
  function sqlcipher_codec_ctx_set_kdf_iter (line 576) | int sqlcipher_codec_ctx_set_kdf_iter(codec_ctx *ctx, int kdf_iter, int f...
  function sqlcipher_codec_ctx_get_kdf_iter (line 590) | int sqlcipher_codec_ctx_get_kdf_iter(codec_ctx *ctx, int for_ctx) {
  function sqlcipher_codec_ctx_set_fast_kdf_iter (line 595) | int sqlcipher_codec_ctx_set_fast_kdf_iter(codec_ctx *ctx, int fast_kdf_i...
  function sqlcipher_codec_ctx_get_fast_kdf_iter (line 609) | int sqlcipher_codec_ctx_get_fast_kdf_iter(codec_ctx *ctx, int for_ctx) {
  function sqlcipher_set_default_use_hmac (line 615) | void sqlcipher_set_default_use_hmac(int use) {
  function sqlcipher_get_default_use_hmac (line 620) | int sqlcipher_get_default_use_hmac() {
  function sqlcipher_set_hmac_salt_mask (line 624) | void sqlcipher_set_hmac_salt_mask(unsigned char mask) {
  function sqlcipher_get_hmac_salt_mask (line 628) | unsigned char sqlcipher_get_hmac_salt_mask() {
  function sqlcipher_codec_ctx_set_use_hmac (line 633) | int sqlcipher_codec_ctx_set_use_hmac(codec_ctx *ctx, int use) {
  function sqlcipher_codec_ctx_get_use_hmac (line 658) | int sqlcipher_codec_ctx_get_use_hmac(codec_ctx *ctx, int for_ctx) {
  function sqlcipher_codec_ctx_set_flag (line 663) | int sqlcipher_codec_ctx_set_flag(codec_ctx *ctx, unsigned int flag) {
  function sqlcipher_codec_ctx_unset_flag (line 669) | int sqlcipher_codec_ctx_unset_flag(codec_ctx *ctx, unsigned int flag) {
  function sqlcipher_codec_ctx_get_flag (line 675) | int sqlcipher_codec_ctx_get_flag(codec_ctx *ctx, unsigned int flag, int ...
  function sqlcipher_codec_ctx_set_error (line 680) | void sqlcipher_codec_ctx_set_error(codec_ctx *ctx, int error) {
  function sqlcipher_codec_ctx_get_reservesize (line 686) | int sqlcipher_codec_ctx_get_reservesize(codec_ctx *ctx) {
  function sqlcipher_codec_get_keyspec (line 698) | void sqlcipher_codec_get_keyspec(codec_ctx *ctx, void **zKey, int *nKey) {
  function sql
Copy disabled (too large) Download .json
Condensed preview — 2279 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (19,921K chars).
[
  {
    "path": ".gitignore",
    "chars": 1753,
    "preview": "# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 1352,
    "preview": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-Notification@2x.png\",\n"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/MessageVideoDownload.imageset/Contents.json",
    "chars": 370,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/MessageVideoPlay.imageset/Contents.json",
    "chars": 362,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/ReceiverImageNodeBorder.imageset/Contents.json",
    "chars": 376,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/ic_avatar_placeholder.imageset/Contents.json",
    "chars": 420,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"ic_avatar_placeholder.png\",\n      \"scale\" : \"1x\""
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/ic_group_placeholder.imageset/Contents.json",
    "chars": 417,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"ic_group_placeholder.png\",\n      \"scale\" : \"1x\"\n"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/ic_msg_forward_n.imageset/Contents.json",
    "chars": 362,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/ic_msg_forward_s.imageset/Contents.json",
    "chars": 362,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/message_receiver_background_highlight.imageset/Contents.json",
    "chars": 404,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/message_receiver_background_normal.imageset/Contents.json",
    "chars": 398,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/message_receiver_background_reversed.imageset/Contents.json",
    "chars": 402,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/message_sender_background_highlight.imageset/Contents.json",
    "chars": 400,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/message_sender_background_normal.imageset/Contents.json",
    "chars": 394,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/message_sender_background_reversed.imageset/Contents.json",
    "chars": 398,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/message_voice_receiver_normal.imageset/Contents.json",
    "chars": 388,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/message_voice_receiver_playing_1.imageset/Contents.json",
    "chars": 394,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/message_voice_receiver_playing_2.imageset/Contents.json",
    "chars": 394,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/message_voice_receiver_playing_3.imageset/Contents.json",
    "chars": 394,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/message_voice_sender_normal.imageset/Contents.json",
    "chars": 384,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/message_voice_sender_playing_1.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/message_voice_sender_playing_2.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/message_voice_sender_playing_3.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/play_btn_normal.imageset/Contents.json",
    "chars": 312,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"play_btn_normal.png\",\n      \"scale\" : \"1x\"\n    }"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/play_btn_pressed.imageset/Contents.json",
    "chars": 313,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"play_btn_pressed.png\",\n      \"scale\" : \"1x\"\n    "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/player_back_button.imageset/Contents.json",
    "chars": 366,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/ChatView/player_suspend_button.imageset/Contents.json",
    "chars": 372,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/Common/Contents.json",
    "chars": 63,
    "preview": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/Common/ic_list_selection.imageset/Contents.json",
    "chars": 365,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"ic_list_select"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/Common/ic_placeholder.imageset/Contents.json",
    "chars": 359,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"ic_placeholder"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/Contents.json",
    "chars": 63,
    "preview": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/LaunchImage.launchimage/Contents.json",
    "chars": 2240,
    "preview": "{\n  \"images\" : [\n    {\n      \"extent\" : \"full-screen\",\n      \"idiom\" : \"iphone\",\n      \"subtype\" : \"2436h\",\n      \"filen"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/Mine/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/Mine/icon_arrow_right.imageset/Contents.json",
    "chars": 362,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/Moments/Contents.json",
    "chars": 63,
    "preview": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/Moments/ic_album_reflash.imageset/Contents.json",
    "chars": 317,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"ic_album_refla"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/Moments/ic_comment_normal.imageset/Contents.json",
    "chars": 365,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"ic_comment_nor"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/Moments/ic_comment_selected.imageset/Contents.json",
    "chars": 369,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"ic_comment_sel"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/Moments/ic_star_normal.imageset/Contents.json",
    "chars": 359,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"ic_star_normal"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/Moments/ic_star_selected.imageset/Contents.json",
    "chars": 363,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"ic_star_select"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/Moments/nav_camera_black.imageset/Contents.json",
    "chars": 314,
    "preview": "{\n  \"images\" : [\n    {\n      \"filename\" : \"nav_camera_black.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/Moments/nav_camera_white.imageset/Contents.json",
    "chars": 314,
    "preview": "{\n  \"images\" : [\n    {\n      \"filename\" : \"nav_camera_white.png\",\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/Nav/Contents.json",
    "chars": 63,
    "preview": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/Nav/icon_more_add.imageset/Contents.json",
    "chars": 356,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/Nav/nav_back_black.imageset/Contents.json",
    "chars": 359,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"nav_back_black"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/Nav/nav_back_white.imageset/Contents.json",
    "chars": 359,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"filename\" : \"nav_back_white"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/TabBar/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/TabBar/ic_tabbar01_normal.imageset/Contents.json",
    "chars": 366,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/TabBar/ic_tabbar01_selected.imageset/Contents.json",
    "chars": 370,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/TabBar/ic_tabbar02_normal.imageset/Contents.json",
    "chars": 366,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/TabBar/ic_tabbar02_selected.imageset/Contents.json",
    "chars": 370,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/TabBar/ic_tabbar03_normal.imageset/Contents.json",
    "chars": 366,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/TabBar/ic_tabbar03_selected.imageset/Contents.json",
    "chars": 370,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/TabBar/ic_tabbar04_normal.imageset/Contents.json",
    "chars": 366,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Assets.xcassets/TabBar/ic_tabbar04_selected.imageset/Contents.json",
    "chars": 370,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/AppDelegate/AppDelegate+Utils.swift",
    "chars": 5133,
    "preview": "//\n//  AppDelegate+Utils.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/2/28.\n//  Copyright © 2019 Jett. All rig"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/AppDelegate/AppDelegate+Wcdb.swift",
    "chars": 537,
    "preview": "//\n//  AppDelegate+Wcdb.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/9.\n//  Copyright © 2019 Jett. All righ"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/AppDelegate/AppDelegate.swift",
    "chars": 4238,
    "preview": "//\n//  AppDelegate.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/2/27.\n//  Copyright © 2019 Jett. All rights re"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Base/FYBaseIGListViewController.swift",
    "chars": 4919,
    "preview": "//\n//  FYBaseIGListViewController.swift\n//  FY-JetChat\n//\n//  Created by Jett on 2022/4/28.\n//  Copyright © 2022 Jett. A"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Base/FYBaseNavigationController.swift",
    "chars": 4241,
    "preview": "//\n//  FYBaseNavigationController.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/2/28.\n//  Copyright © 2019 Jett"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Base/FYBaseTabBarController.swift",
    "chars": 6039,
    "preview": "//\n//  FYBaseTabBarController.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/2/28.\n//  Copyright © 2019 Jett. Al"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Base/FYBaseViewController.swift",
    "chars": 5730,
    "preview": "//\n//  FYBaseViewController.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/2/28.\n//  Copyright © 2019 Jett. All "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Base/Model/FYCellDataConfig.swift",
    "chars": 675,
    "preview": "//\n//  FYCellDataConfig.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/2.\n//  Copyright © 2019 Jett. All righ"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Base/ViewModel/BaseViewModel.swift",
    "chars": 851,
    "preview": "//\n//  BaseViewModel.swift\n//  FY-JetChat\n//\n//  Created by Jett on 2019/3/15.\n//  Copyright © 2019 Jett. All rights res"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Common/AppCommon.swift",
    "chars": 2619,
    "preview": "//\n//  AppCommon.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/2/27.\n//  Copyright © 2019 Jett. All rights rese"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/Array/Array+Extension.swift",
    "chars": 1030,
    "preview": "//\n//  NSArray+Extension.swift\n//  EmiotAppCode\n//\n//  Created by Jett on 2017/5/27.\n//  Copyright © 2017年 Zehuihong. Al"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/Dictionary/Dictionary+Exted.swift",
    "chars": 897,
    "preview": "//\n//  Dictionary+EXTension.swift\n//  SZBookMall\n//\n//  Created by fisland on 2017/11/20.\n//  Copyright © 2017年 Zehuihon"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/Notification/Notification+Name.swift",
    "chars": 2258,
    "preview": "//\n//  Notification+Name.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/10/10.\n//  Copyright © 2019 Jett. All ri"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/RxSwift/JFButton+Rx.swift",
    "chars": 2096,
    "preview": "//\n//  JFButton+Rx.swift\n//  MK-MChain\n//\n//  Created by Jett on 2019/5/30.\n//  Copyright © 2019 miku. All rights reserv"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/RxSwift/MJRefresh+Rx.swift",
    "chars": 1117,
    "preview": "//\n//  MJRefresh+Rx.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/13.\n//  Copyright © 2019 Jett. All rights "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/RxSwift/Observable+Operators.swift",
    "chars": 6286,
    "preview": "//\n//  Observable+Operators.swift\n//  Cake Builder\n//\n//  Created by Khoren Markosyan on 10/19/16.\n//  Copyright © 2016 "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/SnapKit/ConstraintArray+Extensions.swift",
    "chars": 372,
    "preview": "\nimport SnapKit\n\nextension String {\n    func size(withFont font: UIFont) -> CGSize {\n        let attributes = [NSAttribu"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/SnapKit/ConstraintArrayDSL.swift",
    "chars": 12914,
    "preview": "\nimport SnapKit\n\npublic struct ConstraintArrayDSL {\n    @discardableResult\n    public func prepareConstraints(_ closure:"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/Strings/String+Date.swift",
    "chars": 9694,
    "preview": "//\n//  String+Date.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/2/28.\n//  Copyright © 2019 Jett. All rights re"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/Strings/String+Extension.swift",
    "chars": 22528,
    "preview": "\n//\n//  String+Extension.swift\n//  String+Extension\n//\n//  Created by TAN on 2017/10/18.\n//  Copyright © 2019 Jett. All "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/UIColor/UIColor+Extension.swift",
    "chars": 4375,
    "preview": "//\n//  UIColor+Extend.swift\n//  UIColor\n//\n//  Created by TAN on 2018/8/30.\n//  Copyright © 2018年 iOS. All rights reserv"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/UIKit/UIAlert+Extension.swift",
    "chars": 4438,
    "preview": "//\n//  EasyAlertView.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/2/28.\n//  Copyright © 2019 Jett. All rights "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/UIKit/UIButton+Extension.swift",
    "chars": 11573,
    "preview": "//\n//  UIButton+Extension.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/10/11.\n//  Copyright © 2019 Jett. All r"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/UIKit/UIFont+PingFang.swift",
    "chars": 992,
    "preview": "//\n//  UIFont+PingFang.swift\n//  FY-JetChat\n//\n//  Created by Jett on 2019/3/6.\n//  Copyright © 2019 Jett. All rights re"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/UIKit/UIImage+Extension.swift",
    "chars": 5791,
    "preview": "//\n//  LWUIImage+Extension.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/2/28.\n//  Copyright © 2019 Jett. All r"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/UIKit/UIImageView+Kingfisher.swift",
    "chars": 3210,
    "preview": "//\n//  UIImageView+Kingfisher.swift\n//  MK-MChain\n//\n//  Created by iOS.Jet on 2019/2/28.\n//  Copyright © 2019 miku. All"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/UIKit/UILabel+Extension.swift",
    "chars": 1919,
    "preview": "//\n//  UIlabel+Extension.swift\n//  FY-JetChat\n//\n//  Created by Jett on 2019/3/26.\n//  Copyright © 2019 Jett. All rights"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/UIKit/UINavBarItem+Extension.swift",
    "chars": 5909,
    "preview": "//\n//  NavBarItem+Extension.swift\n//  SwiftStudy\n//\n//  Created by iOS.Jet on 2019/2/20.\n//  Copyright © 2019 Jett. All "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/UIKit/UITableView+Extension.swift",
    "chars": 3076,
    "preview": "//\n//  UITableView+EmptyData.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/6/12.\n//  Copyright © 2019 Jett. All"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/UIView/UIView+Extensions.swift",
    "chars": 10547,
    "preview": "//\n//  UIView+Extend.swift\n//  UIView拓展\n//\n//  Created by Mac on 2018/8/16.\n//  Copyright © 2018年 iOS. All rights reserv"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Extensions/UIView/UIViewController+Extend.swift",
    "chars": 1115,
    "preview": "//\n//  UIViewController+Extend.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/8/18.\n//  Copyright © 2019 Jett. A"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Libraries/ActionSheet/FYActionSheet.swift",
    "chars": 6012,
    "preview": "//\n//  FYActionSheet.swift\n//  FYActionSheet\n//\n//  Created by iOS.Jet on 2019/2/28.\n//  Copyright © 2019年 Jett. All rig"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Libraries/ActionSheet/FYActionSheetCell.swift",
    "chars": 2462,
    "preview": "//\n//  FYActionSheetCell.swift\n//  PGActionSheet\n//\n//  Created by iOS.Jet on 2019/2/28.\n//  Copyright © 2019年 Jett. All"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Libraries/HUDProgress/MBConfiguredHUD.swift",
    "chars": 10224,
    "preview": "//\n//  MBConfiguredHUD.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/2/28.\n//  Copyright © 2019 Jett. All right"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Libraries/NavPopup/Cell/FYNavDropMenuCell.swift",
    "chars": 2670,
    "preview": "//\n//  FYNavDropMenuCell.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/6.\n//  Copyright © 2019 Jett. All rig"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Libraries/NavPopup/FYNavPopuListMenu.swift",
    "chars": 7106,
    "preview": "//\n//  FYNavPopuListMenu.swift\n//  FYNavPopuListMenu\n//\n//  Created by iOS.Jet on 2019/2/20.\n//  Copyright © 2019 Jett. "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Libraries/Refreshing/FYMomentsHeaderRefresh.swift",
    "chars": 2270,
    "preview": "//\n//  FYMomentsHeaderRefresh.swift\n//  FY-JetChat\n//\n//  Created by Jett on 2022/4/28.\n//  Copyright © 2022 Jett. All r"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/ChatRoom/Controller/FYChatBaseViewController.swift",
    "chars": 19149,
    "preview": "//\n//  FYChatBaseViewController.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/13.\n//  Copyright © 2019 Jett."
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/ChatRoom/Controller/FYChatRoomListViewController.swift",
    "chars": 6093,
    "preview": "//\n//  FYChatRoomListViewController.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/8/18.\n//  Copyright © 2019 Je"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/ChatRoom/Controller/FYMessageForwardViewController.swift",
    "chars": 4797,
    "preview": "//\n//  FYMessageForwardViewController.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/12/28.\n//  Copyright © 2019"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/ChatRoom/Model/FYMessageBaseModel.swift",
    "chars": 276,
    "preview": "//\n//  FYMessageBaseModel.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/20.\n//  Copyright © 2019 Jett. All r"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/ChatRoom/Model/FYMessageChatModel.swift",
    "chars": 1308,
    "preview": "//\n//  FYMessageChatModel.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/28.\n//  Copyright © 2019 Jett. All r"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/ChatRoom/Model/FYMessageItem.swift",
    "chars": 1652,
    "preview": "//\n//  FYMessageItem.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/20.\n//  Copyright © 2019 Jett. All rights"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/ChatRoom/View/FYImageMessageCell.swift",
    "chars": 6149,
    "preview": "//\n//  FYImageMessageCell.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/27.\n//  Copyright © 2019 Jett. All r"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/ChatRoom/View/FYMessageBaseCell.swift",
    "chars": 8420,
    "preview": "//\n//  FYMessageBaseCell.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/23.\n//  Copyright © 2019 Jett. All ri"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/ChatRoom/View/FYTextMessageCell.swift",
    "chars": 7542,
    "preview": "//\n//  FYTextMessageCell.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/20.\n//  Copyright © 2019 Jett. All ri"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/ChatRoom/View/FYVideoMessageCell.swift",
    "chars": 6625,
    "preview": "//\n//  FYVideoMessageCell.swift\n//  FY-JetChat\n//\n//  Created by fangyuan on 2019/12/22.\n//  Copyright © 2019 Jett. All "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/ChatRoom/ViewModel/FYMessageViewModel.swift",
    "chars": 13936,
    "preview": "//\n//  FYMessageViewModel.swift\n//  FY-JetChat\n//\n//  Created by fangyuan on 2020/1/3.\n//  Copyright © 2020 iOS.Jet. All"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Contacts/Controller/FYContactsInfoViewController.swift",
    "chars": 4625,
    "preview": "//\n//  FYContactsInfoViewController.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/30.\n//  Copyright © 2019 J"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Contacts/Controller/FYContactsListViewController.swift",
    "chars": 8179,
    "preview": "//\n//  FYContactsListViewController.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/8/18.\n//  Copyright © 2019 Je"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Contacts/Controller/FYEditChatInfoViewController.swift",
    "chars": 4648,
    "preview": "//\n//  FYEditChatInfoViewController.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/30.\n//  Copyright © 2019 J"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Contacts/View/FYContactsInfoView.swift",
    "chars": 2851,
    "preview": "//\n//  FYContactsInfoView.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/30.\n//  Copyright © 2019 Jett. All r"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Contacts/View/FYContactsTableViewCell.swift",
    "chars": 4192,
    "preview": "//\n//  FYContactsTableViewCell.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/28.\n//  Copyright © 2019 Jett. "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Conversation/Controller/FYSesstionListViewController.swift",
    "chars": 8122,
    "preview": "//\n//  FYSesstionListViewController.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/8/18.\n//  Copyright © 2019 Je"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Conversation/View/FYConversationCell.swift",
    "chars": 5124,
    "preview": "//\n//  FYConversationCell.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/28.\n//  Copyright © 2019 Jett. All r"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Mine/Controller/FYMineViewController.swift",
    "chars": 2919,
    "preview": "//\n//  FYMineViewController.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/8/18.\n//  Copyright © 2019 Jett. All "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Mine/Controller/FYSettingViewController.swift",
    "chars": 5005,
    "preview": "//\n//  FYSettingViewController.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/6.\n//  Copyright © 2019 Jett. A"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Mine/Controller/FYThemeSelectionListVC.swift",
    "chars": 4625,
    "preview": "//\n//  FYThemeSelectionListVC.swift\n//  FY-JetChat\n//\n//  Created by Jett on 2022/4/30.\n//  Copyright © 2022 Jett. All r"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Mine/View/FYFastGridListView.swift",
    "chars": 5739,
    "preview": "//\n//  FYFastGridListView.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/8/18.\n//  Copyright © 2019 Jett. All ri"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/FYMomentsViewController.swift",
    "chars": 6331,
    "preview": "//\n//  FYMomentsViewController.swift\n//  FY-JetChat\n//\n//  Created by Jett on 2022/4/28.\n//  Copyright © 2022 Jett. All "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/JSONData/moments1.json",
    "chars": 5835,
    "preview": "[\n  {\n    \"id\": 1,\n    \"userInfo\": {\n      \"user_id\": 1,\n      \"background_url\": \"https://img-pre.ivsky.com/img/tupian/p"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/JSONData/moments2.json",
    "chars": 6311,
    "preview": "[\n  {\n    \"id\": 1,\n    \"limage\": \"http://img2.woyaogexing.com/2022/04/28/a32f8f6c174a4c69af755a14da5ff822!400x400.png\",\n"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/Model/FYCommentInfo.swift",
    "chars": 544,
    "preview": "//\n//  FYFYCommentInfo.swift\n//  FY-JetChat\n//\n//  Created by Jett on 2022/4/28.\n//  Copyright © 2022 Jett. All rights r"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/Model/FYMoUserInfo.swift",
    "chars": 990,
    "preview": "//\n//  FYMoUserInfo.swift\n//  FY-JetChat\n//\n//  Created by Jett on 2022/4/28.\n//  Copyright © 2022 Jett. All rights rese"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/Model/FYMomentInfo.swift",
    "chars": 2866,
    "preview": "//\n//  FYMomentInfo.swift\n//  FY-JetChat\n//\n//  Created by Jett on 2022/4/28.\n//  Copyright © 2022 Jett. All rights rese"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/Sections/FYMomentBindingSection.swift",
    "chars": 8688,
    "preview": "//\n//  FYFYMomentBindingSection.swift\n//  FY-JetChat\n//\n//  Created by Jett on 2022/4/28.\n//  Copyright © 2022 Jett. All"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/View/Cell/CommentContentCell.swift",
    "chars": 4215,
    "preview": "//\n//  CommentContentCell.swift\n//  JetChat\n//\n//  Created by Jett on 2020/6/9.\n//  Copyright © 2022 Jett. All rights re"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/View/Cell/CommentContentView.swift",
    "chars": 3765,
    "preview": "//\n//  CommentContentView.swift\n//  JetChat\n//\n//  Created by Jett on 2020/5/11.\n//  Copyright © 2022 Jett. All rights r"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/View/Cell/CommentInputView.swift",
    "chars": 5622,
    "preview": "//\n//  CommentInputView.swift\n//  JetChat\n//\n//  Created by Jett on 2020/5/12.\n//  Copyright © 2022 Jett. All rights res"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/View/Cell/CommentThumbView.swift",
    "chars": 1214,
    "preview": "//\n//  CommentThumbView.swift\n//  JetChat\n//\n//  Created by Jett on 2020/5/11.\n//  Copyright © 2022 Jett. All rights res"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/View/Cell/MomentBottomCell.swift",
    "chars": 4686,
    "preview": "//\n//  MomentBottomCell.swift\n//  JetChat\n//\n//  Created by Jett on 2020/4/15.\n//  Copyright © 2022 Jett. All rights res"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/View/Cell/MomentCommentCell.swift",
    "chars": 4873,
    "preview": "//\n//  MomentCommentCell.swift\n//  JetChat\n//\n//  Created by Jett on 2020/4/17.\n//  Copyright © 2022 Jett. All rights re"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/View/Cell/MomentHeaderCell.swift",
    "chars": 6006,
    "preview": "//\n//  MomentHeaderCell.swift\n//  JetChat\n//\n//  Created by Jett on 2022/4/14.\n//  Copyright © 2022 Jett. All rights res"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/View/Cell/MomentHeaderImageCell.swift",
    "chars": 6219,
    "preview": "//\n//  MomentHeaderImageCell.swift\n//  JetChat\n//\n//  Created by Jett on 2022/4/16.\n//  Copyright © 2022 Jett. All right"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/View/Cell/MomentLocationCell.swift",
    "chars": 1494,
    "preview": "//\n//  MomentLocationCell.swift\n//  JetChat\n//\n//  Created by Jett on 2020/4/15.\n//  Copyright © 2022 Jett. All rights r"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/View/Cell/MomentTopCell.swift",
    "chars": 2382,
    "preview": "//\n//  MomentTopCell.swift\n//  JetChat\n//\n//  Created by Jett on 2022/4/16.\n//  Copyright © 2022 Jett. All rights reserv"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/View/FYMomentNavBar.swift",
    "chars": 2794,
    "preview": "//\n//  FYMomentNavBar.swift\n//  FY-JetChat\n//\n//  Created by Jett on 2022/4/28.\n//  Copyright © 2022 Jett. All rights re"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/View/MomentLabel/FYLabel.swift",
    "chars": 16431,
    "preview": "//\n//  FYLabel.swift\n//\n//  Created by Jett on 2022/04/28.\n//  Copyright 2022 Jett. All rights reserved.\n//\n\nimport UIKi"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/View/MomentLabel/FYLabelType.swift",
    "chars": 3467,
    "preview": "//\n//  FYLabelType.swift\n//\n//  Created by Jett on 2022/04/28.\n//  Copyright 2022 Jett. All rights reserved.\n//\n\nimport "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/View/NineImageView.swift",
    "chars": 2771,
    "preview": "//\n//  NineImageView.swift\n//  JetChat\n//\n//  Created by Jett on 2022/4/14.\n//  Copyright © 2022 Jett. All rights reserv"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/View/OperateMenuView.swift",
    "chars": 4697,
    "preview": "//\n//  OperateMenuView.swift\n//  JetChat\n//\n//  Created by Jett on 2020/5/11.\n//  Copyright © 2022 Jett. All rights rese"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/Moments/View/TextView/FYTextView.swift",
    "chars": 3539,
    "preview": "//\n//  JXTextView.swift\n//\n//  Created by Jett on 2020/5/9.\n//  Copyright © 2022 Jett. All rights reserved.\n//\n\nimport U"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/MainModule/QrScan/ScanQRCodeViewController.swift",
    "chars": 9157,
    "preview": "//\n//  ScanQRCodeViewController.swift\n//  JChat\n//\n//  Created by JIGUANG on 2017/8/16.\n//  Copyright © 2017年 HXHG. All "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Resource/Languages/en.lproj/InfoPlist.strings",
    "chars": 427,
    "preview": "/* \n  InfoPlist.strings\n  FY-IMChat\n \n  美式英语\n \n  Created by iOS.Jet on 2019/3/4.\n  Copyright © 2019 development. All rig"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Resource/Languages/en.lproj/Localizable.strings",
    "chars": 2053,
    "preview": "\"温馨提示\" = \"Tips\";\n\"确定\" = \"Confirm\";\n\"取消\" = \"Cancel\";\n\"设置\" = \"Settings\";\n\"会话\" = \"Session\";\n\"群组\" = \"Group\";\n\"好友\" = \"Friends"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Resource/Languages/zh-Hans.lproj/InfoPlist.strings",
    "chars": 305,
    "preview": "/* \n  InfoPlist.strings\n  FY-IMChat\n \n  简体中文\n\n  Created by iOS.Jet on 2019/3/4.\n  Copyright © 2019 development. All righ"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Resource/Languages/zh-Hans.lproj/LWLocalizations.strings",
    "chars": 4154,
    "preview": "\"a_launch_title\" = \"\";\n\"a_launch_create\" = \"\";\n\"a_launch_choose\" = \"\";\n\"a_launch_login\" = \"\";\n\"a_launch_current\" = \"\";\n\""
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Resource/Languages/zh-Hans.lproj/Localizable.strings",
    "chars": 1,
    "preview": "\n"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Resource/LaunchScreen.storyboard",
    "chars": 1746,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Resource/R.generated.swift",
    "chars": 125330,
    "preview": "//\n// This is a generated file, do not edit!\n// Generated by R.swift, see https://github.com/mac-cain13/R.swift\n//\n\nimpo"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Thirdparty/BottomPopupController/BottomPopupDismissAnimator.swift",
    "chars": 1196,
    "preview": "//\n//  DraggableDismissAnimator.swift\n//  PresentationController\n//\n//  Created by Emre on 11.09.2018.\n//  Copyright © 2"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Thirdparty/BottomPopupController/BottomPopupDismissInteractionController.swift",
    "chars": 2826,
    "preview": "//\n//  DraggableDismissInteractionController.swift\n//  PresentationController\n//\n//  Created by Emre on 11.09.2018.\n//  "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Thirdparty/BottomPopupController/BottomPopupNavigationController.swift",
    "chars": 3433,
    "preview": "//\n//  BottomPopupNavigationController.swift\n//  BottomPopup\n//\n//  Created by Emre on 11.10.2018.\n//  Copyright © 2018 "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Thirdparty/BottomPopupController/BottomPopupPresentAnimator.swift",
    "chars": 1307,
    "preview": "//\n//  DraggablePresentAnimator.swift\n//  PresentationController\n//\n//  Created by Emre on 11.09.2018.\n//  Copyright © 2"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Thirdparty/BottomPopupController/BottomPopupPresentationController.swift",
    "chars": 3091,
    "preview": "//\n//  BottomPopupPresentationController.swift\n//  PresentationController\n//\n//  Created by Emre on 11.09.2018.\n//  Copy"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Thirdparty/BottomPopupController/BottomPopupTransitionHandler.swift",
    "chars": 2653,
    "preview": "//\n//  DraggableTransitioningDelegate.swift\n//  PresentationController\n//\n//  Created by Emre on 11.09.2018.\n//  Copyrig"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Thirdparty/BottomPopupController/BottomPopupUtils.swift",
    "chars": 1788,
    "preview": "//\n//  BottomPopupUtils.swift\n//  BottomPopup\n//\n//  Created by Emre on 11.10.2018.\n//  Copyright © 2018 Emre. All right"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Thirdparty/BottomPopupController/BottomPopupViewController.swift",
    "chars": 3256,
    "preview": "//\n//  BottomPopupViewController.swift\n//  Trendyol\n//\n//  Created by Emre on 11.09.2018.\n//  Copyright © 2018 Trendyol."
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Thirdparty/BottomPopupController/CSBottomPopupNavigationController.swift",
    "chars": 1230,
    "preview": "//\n//  CSBottomPopupNavigationController.swift\n//  ConsensusStorage\n//\n//  Created by Apple on 2021/10/25.\n//  Copyright"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Thirdparty/NavigationHandy/NSObject+BinAdd.h",
    "chars": 1822,
    "preview": "//\n//  NSObject+BinAdd.h\n//  CommonElement\n//\n//  Created by 熊彬 on 16/6/3.\n//  Copyright © 2016年 熊彬. All rights reserved"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Thirdparty/NavigationHandy/NSObject+BinAdd.m",
    "chars": 20583,
    "preview": "//\n//  NSObject+BinAdd.m\n//  CommonElement\n//\n//  Created by 熊彬 on 16/6/3.\n//  Copyright © 2016年 熊彬. All rights reserved"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Thirdparty/NavigationHandy/UINavigationController+Extensions.h",
    "chars": 1528,
    "preview": "//\n//  UINavigationController+Extensions.h\n//  IDCMWallet\n//\n//  Created by IDCM on 2018/5/21.\n//  Copyright © 2018年 IDC"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Thirdparty/NavigationHandy/UINavigationController+Extensions.m",
    "chars": 4725,
    "preview": "//\n//  UINavigationController+Extensions.m\n//  IDCMWallet\n//\n//  Created by IDCM on 2018/5/21.\n//  Copyright © 2018年 IDC"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Thirdparty/RxActivityIndicator/ActivityIndicator.swift",
    "chars": 2277,
    "preview": "//\n//  ActivityIndicator.swift\n//  RxExample\n//\n//  Created by Krunoslav Zaher on 10/18/15.\n//  Copyright © 2015 Krunosl"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Thirdparty/RxErrorTracker/ErrorTracker.swift",
    "chars": 1016,
    "preview": "//\n// Created by sergdort on 03/02/2017.\n// Copyright (c) 2017 sergdort. All rights reserved.\n//\n\nimport Foundation\nimpo"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/DataBase/WCDBManager/DBQuery/FYDBQueryHelper.swift",
    "chars": 7240,
    "preview": "//\n//  FYDBQueryHelper.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/27.\n//  Copyright © 2019 Jett. All righ"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/DataBase/WCDBManager/DBQuery/FYMessageUserModel.swift",
    "chars": 1094,
    "preview": "//\n//  FYMessageUserModel.swift\n//  FY-JetChat\n//\n//  Created by fangyuan on 2019/12/14.\n//  Copyright © 2019 Jett. All "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/DataBase/WCDataBaseManager.swift",
    "chars": 3718,
    "preview": "//\n//  WCDataBaseManager.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/6.\n//  Copyright © 2019 Jett. All rig"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/DataBase/WCDataBaseTable.swift",
    "chars": 739,
    "preview": "//\n//  WCDataBaseTable.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/6.\n//  Copyright © 2019 Jett. All right"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/FPSLabel/FPSLabel.swift",
    "chars": 1608,
    "preview": "//\n//  FPSLabel.swift\n//  FPSDemo\n//\n//  Created by just so so on 2019/10/7.\n//  Copyright © 2019 bruce yao. All rights "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/FPSLabel/WeakProxy.h",
    "chars": 288,
    "preview": "//\n//  WeakProxy.h\n//  FPSDemo\n//\n//  Created by just so so on 2019/10/7.\n//  Copyright © 2019 bruce yao. All rights res"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/FPSLabel/WeakProxy.m",
    "chars": 793,
    "preview": "//\n//  WeakProxy.m\n//  FPSDemo\n//\n//  Created by just so so on 2019/10/7.\n//  Copyright © 2019 bruce yao. All rights res"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/FileSizeManager/FYFileSizeManager.swift",
    "chars": 4569,
    "preview": "//\n//  FYFileSizeManager.swift\n//  FY-JetChat\n//\n//  Created by Jett on 2022/4/28.\n//  Copyright © 2022 Jett. All rights"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/FileSizeManager/FYUserDefaultManager.swift",
    "chars": 1315,
    "preview": "//\n//  FYUserDefaultManager.swift\n//  FY-IMChat\n//\n//  Created by Jett on 2022/5/7.\n//  Copyright © 2022 Jett. All right"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/Helpers/CountDownHandy.swift",
    "chars": 3537,
    "preview": "//\n//  LWCommonClock.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/3/6.\n//  Copyright © 2019 Jett. All rights r"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/Helpers/LanguageManager.swift",
    "chars": 2511,
    "preview": "//\n//  LWLanguageManager.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/3/4.\n//  Copyright © 2019 Jett. All righ"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/KeyboardCore/Cell/ChatAppleEmojiCell.swift",
    "chars": 1958,
    "preview": "//\n//  ChatAppleEmojiCell.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/18.\n//  Copyright © 2019 Jett. All r"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/KeyboardCore/Cell/ChatKeyboardFlowLayout.swift",
    "chars": 2891,
    "preview": "//\n//  ChatMoreViewFlowLayout.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/16.\n//  Copyright © 2019 Jett. A"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/KeyboardCore/Cell/ChatMoreMenuCell.swift",
    "chars": 1715,
    "preview": "//\n//  FYChatMoreMenuCell.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/16.\n//  Copyright © 2019 Jett. All r"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/KeyboardCore/ChatEmojiListView.swift",
    "chars": 11912,
    "preview": "//\n//  ChatEmojiListView.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/14.\n//  Copyright © 2019 Jett. All ri"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/KeyboardCore/ChatGrowingTextView.swift",
    "chars": 4681,
    "preview": "//\n//  ChatGrowingTextView.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/14.\n//  Copyright © 2019 Jett. All "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/KeyboardCore/ChatKeyboard+Extensions.swift",
    "chars": 2938,
    "preview": "//\n//  ChatKeyboardView+Exted.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/14.\n//  Copyright © 2019 Jett. A"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/KeyboardCore/ChatKeyboardView.swift",
    "chars": 16983,
    "preview": "//\n//  ChatKeyboardView.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/14.\n//  Copyright © 2019 Jett. All rig"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/KeyboardCore/ChatMoreMenuView.swift",
    "chars": 6531,
    "preview": "//\n//  ChatMoreMenuView.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/14.\n//  Copyright © 2019 Jett. All rig"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/KeyboardCore/Helper/ChatEmotionAttachment.swift",
    "chars": 229,
    "preview": "//\n//  ChatEmotionAttachment.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/22.\n//  Copyright © 2019 Jett. Al"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/KeyboardCore/Helper/ChatEmotionHelper.swift",
    "chars": 2253,
    "preview": "//\n//  ChatEmotionHelper.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/21.\n//  Copyright © 2019 Jett. All ri"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/KeyboardCore/Helper/ChatFindEmotion.swift",
    "chars": 1795,
    "preview": "//\n//  ChatFindEmotion.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/22.\n//  Copyright © 2019 Jett. All righ"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/KeyboardCore/Model/ChatEmoticon.swift",
    "chars": 1487,
    "preview": "//\n//  ChatEmoticon.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/18.\n//  Copyright © 2019 Jett. All rights "
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/KeyboardCore/Model/ChatMoreMnueConfig.swift",
    "chars": 762,
    "preview": "//\n//  ChatMoreMnueConfig.swift\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/11/18.\n//  Copyright © 2019 Jett. All r"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/KeyboardCore/Resource/Emoji/Emoticons.bundle/com.apple.emoji/info.plist",
    "chars": 9107,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/KeyboardCore/Resource/Emotion/Expression.plist",
    "chars": 11273,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/Theme/FYDarkTheme.swift",
    "chars": 4667,
    "preview": "//\n//  FYDarkTheme.swift\n//  FY-JetChat\n//\n//  Created by Jett on 2022/4/30.\n//  Copyright © 2022 Jett. All rights reser"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/Theme/FYLightTheme.swift",
    "chars": 4639,
    "preview": "//\n//  FYLightTheme.swift\n//  FY-JetChat\n//\n//  Created by Jett on 2022/4/30.\n//  Copyright © 2022 Jett. All rights rese"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/Theme/FYThemeCenter.swift",
    "chars": 5821,
    "preview": "//\n//  FYThemeCenter.swift\n//  FY-JetChat\n//\n//  Created by Jett on 2022/4/30.\n//  Copyright © 2022 Jett. All rights res"
  },
  {
    "path": "JetChat/FY-IMChat/Classes/Utilites/Theme/FYThemeColors.swift",
    "chars": 11830,
    "preview": "//\n//  FYThemeColor.swift\n//  FY-JetChat\n//\n//  Created by Jett on 2022/4/30.\n//  Copyright © 2022 Jett. All rights rese"
  },
  {
    "path": "JetChat/FY-IMChat/FY-IMChat.entitlements",
    "chars": 313,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "JetChat/FY-IMChat/FYObjcBridge.h",
    "chars": 661,
    "preview": "//\n//  FYObjcBridge.h\n//  FY-JetChat\n//\n//  Created by iOS.Jet on 2019/3/1.\n//  Copyright © 2019 Jett. All rights reserv"
  },
  {
    "path": "JetChat/FY-IMChat/Info.plist",
    "chars": 1921,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "JetChat/FY-IMChat.xcodeproj/project.pbxproj",
    "chars": 135572,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 50;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "JetChat/FY-IMChat.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 135,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef"
  },
  {
    "path": "JetChat/FY-IMChat.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "chars": 238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "JetChat/FY-IMChat.xcodeproj/xcshareddata/xcschemes/FY-IMChat.xcscheme",
    "chars": 4502,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1020\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "JetChat/FY-IMChat.xcworkspace/contents.xcworkspacedata",
    "chars": 227,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:FY-IMChat.xcod"
  },
  {
    "path": "JetChat/FY-IMChat.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "chars": 238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  }
]

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

About this extraction

This page contains the full source code of the developerjet/JetChat GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2279 files (18.0 MB), approximately 4.8M tokens, and a symbol index with 4426 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!