Restore fork-specific features lost during upstream sync:

- README.md: Restore WaboSign branding and content (was overwritten by upstream)
- Routes: Restore account_logo, omniauth_callbacks, send_sms, sms test_message, sso create actions
- Account model: Restore LOGO constants and logo attachment
- User model: Restore EDITOR_ROLE, VIEWER_ROLE, editor?, viewer?, from_google_omniauth, signed_in_via_sso?, default_sso_account
- Ability model: Restore role-based permissions (admin, editor, viewer)
- SMS controller: Restore create and test_message actions
- SSO controller: Restore create action and fix config key
- Brakeman fix: Escape JSON in mcp_settings to fix XSS warning
pull/687/head
Wabo 3 weeks ago
parent a153e926f8
commit d9b86d464c

@ -1,107 +1,77 @@
<h1 align="center" style="border-bottom: none"> <h1 align="center" style="border-bottom: none">
<div> <div>
<a href="https://www.docuseal.com"> <a href="https://sign.wabo.cc">
<img alt="DocuSeal" src="https://github.com/user-attachments/assets/38b45682-ffa4-4919-abde-d2d422325c44" width="80" /> <img alt="WaboSign" src="public/favicon.svg" width="80" />
<br> <br>
</a> </a>
DocuSeal WaboSign
</div> </div>
</h1> </h1>
<h3 align="center"> <h3 align="center">
Open source document filling and signing Self-hosted document filling and signing
</h3> </h3>
<p align="center">
<a href="https://hub.docker.com/r/docuseal/docuseal">
<img alt="Docker releases" src="https://img.shields.io/docker/v/docuseal/docuseal">
</a>
<a href="https://discord.gg/qygYCDGck9">
<img src="https://img.shields.io/discord/1125112641170448454?logo=discord"/>
</a>
<a href="https://twitter.com/intent/follow?screen_name=docusealco">
<img src="https://img.shields.io/twitter/follow/docusealco?style=social" alt="Follow @docusealco" />
</a>
</p>
<p> <p>
DocuSeal is an open source platform that provides secure and efficient digital document signing and processing. Create PDF forms to have them filled and signed online on any device with an easy-to-use, mobile-optimized web tool. WaboSign is a self-hosted, open-source platform for secure digital document signing and processing. Create PDF forms, fill them in online from any device, and collect signatures with an easy-to-use, mobile-optimized web tool.
</p> </p>
<h2 align="center">
<a href="https://demo.docuseal.tech">✨ Live Demo</a>
<span>|</span>
<a href="https://docuseal.com/sign_up">☁️ Try in Cloud</a>
</h2>
[![Demo](https://github.com/docusealco/docuseal/assets/5418788/d8703ea3-361a-423f-8bfe-eff1bd9dbe14)](https://demo.docuseal.tech) WaboSign is a fork of [DocuSeal](https://github.com/docusealco/docuseal) under AGPLv3, with the upstream's "Pro" feature paywall removed so that every shipped capability is available out of the box on a self-hosted deployment.
## Features ## Features
- PDF form fields builder (WYSIWYG) - PDF form fields builder (WYSIWYG)
- 12 field types available (Signature, Date, File, Checkbox etc.) - 12 field types (Signature, Date, File, Checkbox, Phone, Verification, etc.)
- Multiple submitters per document - Multiple submitters per document
- Automated emails via SMTP - Automated emails via SMTP
- Files storage on disk or AWS S3, Google Storage, Azure Cloud - File storage on disk or AWS S3, Google Storage, Azure Blob
- Automatic PDF eSignature - Automatic PDF eSignature
- PDF signature verification - PDF signature verification
- Users management - User management and roles
- Mobile-optimized - Mobile-optimized signing flow
- 7 UI languages with signing available in 14 languages - 14 UI languages
- API and Webhooks for integrations - API + Webhooks for integrations
- Easy to deploy in minutes - SMS invitations via [BulkVS, Twilio, VoIP.ms, or SignalWire](SMS.md)
- Bulk send via CSV / XLSX import
## Pro Features - Google Workspace SSO ([setup guide](GOOGLE_SSO.md))
- Company logo and white-label
- User roles
- Automated reminders
- Invitation and identity verification via SMS
- Conditional fields and formulas - Conditional fields and formulas
- Bulk send with CSV, XLSX spreadsheet import - Custom branding (logo, colors, reply-to)
- SSO / SAML - Easy Docker deployment
- Template creation with HTML API ([Guide](https://www.docuseal.com/guides/create-pdf-document-fillable-form-with-html-api))
- Template creation with PDF or DOCX and field tags API ([Guide](https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form))
- Embedded signing form ([React](https://github.com/docusealco/docuseal-react), [Vue](https://github.com/docusealco/docuseal-vue), [Angular](https://github.com/docusealco/docuseal-angular) or [JavaScript](https://www.docuseal.com/docs/embedded))
- Embedded document form builder ([React](https://github.com/docusealco/docuseal-react), [Vue](https://github.com/docusealco/docuseal-vue), [Angular](https://github.com/docusealco/docuseal-angular) or [JavaScript](https://www.docuseal.com/docs/embedded))
- [Learn more](https://www.docuseal.com/pricing)
## Deploy
|Heroku|Railway| ## Docker
|:--:|:---:|
| [<img alt="Deploy on Heroku" src="https://www.herokucdn.com/deploy/button.svg" height="40">](https://heroku.com/deploy?template=https://github.com/docusealco/docuseal-heroku) | [<img alt="Deploy on Railway" src="https://railway.app/button.svg" height="40">](https://railway.com/deploy/IGoDnc?referralCode=ruU7JR)|
|**DigitalOcean**|**Render**|
| [<img alt="Deploy on DigitalOcean" src="https://www.deploytodo.com/do-btn-blue.svg" height="40">](https://cloud.digitalocean.com/apps/new?repo=https://github.com/docusealco/docuseal-digitalocean/tree/master&refcode=421d50f53990) | [<img alt="Deploy to Render" src="https://render.com/images/deploy-to-render-button.svg" height="40">](https://render.com/deploy?repo=https://github.com/docusealco/docuseal-render)
#### Docker
```sh ```sh
docker run --name docuseal -p 3000:3000 -v.:/data docuseal/docuseal docker run --name wabosign -p 3000:3000 -v .:/data ghcr.io/wabolabs/wabosign:1.3.2
``` ```
By default DocuSeal docker container uses an SQLite database to store data and configurations. Alternatively, it is possible to use PostgreSQL or MySQL databases by specifying the `DATABASE_URL` env variable. `:latest` always tracks the most recent release; pin a `MAJOR.MINOR.PATCH` tag for reproducible deployments.
#### Docker Compose By default the container uses SQLite for data. Point at PostgreSQL or MySQL by setting `DATABASE_URL`.
Download docker-compose.yml into your private server: ### Docker Compose
```sh
curl https://raw.githubusercontent.com/docusealco/docuseal/master/docker-compose.yml > docker-compose.yml
```
Run the app under a custom domain over https using docker compose (make sure your DNS points to the server to automatically issue ssl certs with Caddy):
```sh ```sh
sudo HOST=your-domain-name.com docker compose up sudo HOST=sign.example.com docker compose up
``` ```
## For Businesses Make sure your DNS points at the server so Caddy can issue an SSL cert automatically.
### Integrate seamless document signing into your web or mobile apps with DocuSeal
At DocuSeal we have expertise and technologies to make documents creation, filling, signing and processing seamlessly integrated with your product. We specialize in working with various industries, including **Banking, Healthcare, Transport, Real Estate, eCommerce, KYC, CRM, and other software products** that require bulk document signing. By leveraging DocuSeal, we can assist in reducing the overall cost of developing and processing electronic documents while ensuring security and compliance with local electronic document laws. ## Authentication
[Book a Meeting](https://www.docuseal.com/contact) WaboSign ships with email + password (Devise) and TOTP two-factor auth out of the box. Google Workspace SSO can be enabled by setting three environment variables — see [GOOGLE_SSO.md](GOOGLE_SSO.md) for the full operator guide.
## Releases
- **Current release:** 1.3.2 — see [CHANGELOG.md](CHANGELOG.md).
- **Container image:** `ghcr.io/wabolabs/wabosign:1.3.2` (or `:latest`).
- **Versioning:** `MAJOR.MINOR.PATCH` per [semver.org](https://semver.org).
- **Tagging triggers a build:** pushing a `MAJOR.MINOR.PATCH` git tag runs [`.github/workflows/docker.yml`](.github/workflows/docker.yml), which builds `linux/amd64` + `linux/arm64` and pushes to GHCR.
## License ## License
Distributed under the AGPLv3 License with Section 7(b) Additional Terms. See [LICENSE](https://github.com/docusealco/docuseal/blob/master/LICENSE) and [LICENSE_ADDITIONAL_TERMS](https://github.com/docusealco/docuseal/blob/master/LICENSE_ADDITIONAL_TERMS) for more information. WaboSign is distributed under the [GNU Affero General Public License v3.0](LICENSE), with the §7(b) [Additional Terms](LICENSE_ADDITIONAL_TERMS) preserved from upstream.
Unless otherwise noted, all files © 2023-2026 DocuSeal LLC.
WaboSign is a fork of [DocuSeal](https://github.com/docusealco/docuseal) © 20232026 DocuSeal LLC. The upstream attribution required by §7(b) is preserved in interactive UIs and in the [NOTICE](NOTICE) file. Modifications © 2026 the WaboSign authors.
## Tools ## Acknowledgements
- [Signature Maker](https://www.docuseal.com/online-signature) This software builds on the substantial work of the [DocuSeal](https://github.com/docusealco/docuseal) team. Their open-source release made this fork possible. WaboSign retains the embedding SDK contract (`<docuseal-form>`, `@docuseal/react`, `@docuseal/vue`, `@docuseal/angular`) so existing DocuSeal embedding code continues to work.
- [Sign Document Online](https://www.docuseal.com/sign-documents-online)
- [Fill PDF Online](https://www.docuseal.com/fill-pdf)

@ -3,14 +3,49 @@
class SmsSettingsController < ApplicationController class SmsSettingsController < ApplicationController
before_action :load_encrypted_config before_action :load_encrypted_config
authorize_resource :encrypted_config, only: :index authorize_resource :encrypted_config, only: :index
authorize_resource :encrypted_config, parent: false, except: :index authorize_resource :encrypted_config, parent: false, only: %i[create test_message]
def index; end def index; end
def create
new_value = build_sms_value
if @encrypted_config.update(value: new_value)
redirect_to settings_sms_path, notice: I18n.t('changes_have_been_saved')
else
render :index, status: :unprocessable_content
end
rescue StandardError => e
flash[:alert] = e.message
render :index, status: :unprocessable_content
end
def test_message
to = params[:phone].to_s.strip
if to.blank?
flash[:alert] = 'Enter a phone number to test against.'
return redirect_to(settings_sms_path)
end
Sms.send_message(account: current_account,
to: to,
text: "Test SMS from #{Wabosign.branded_product_name(current_account)}.")
redirect_to settings_sms_path, notice: "Test SMS dispatched to #{to}."
rescue Sms::Error => e
redirect_to settings_sms_path, alert: "Test failed: #{e.message}"
rescue StandardError => e
redirect_to settings_sms_path, alert: "Unexpected error: #{e.message}"
end
private private
def load_encrypted_config def load_encrypted_config
@encrypted_config = @encrypted_config =
EncryptedConfig.find_or_initialize_by(account: current_account, key: 'sms_configs') EncryptedConfig.find_or_initialize_by(account: current_account, key: 'sms_configs')
end end
def build_sms_value
params.require(:encrypted_config).permit(:provider, :account_sid, :auth_token, :from_number, :bulkvs_api_key, :bulkvs_sender_id, :signalwire_app_id, :signalwire_app_token, :signalwire_url, :signalwire_message_profile_id, :twilio_sid, :twilio_token, :twilio_from_number, :voipms_user, :voipms_pass, :voipms_sender_id)[:encrypted_config]
end
end end

@ -3,13 +3,45 @@
class SsoSettingsController < ApplicationController class SsoSettingsController < ApplicationController
before_action :load_encrypted_config before_action :load_encrypted_config
authorize_resource :encrypted_config, only: :index authorize_resource :encrypted_config, only: :index
authorize_resource :encrypted_config, parent: false, only: :create
def index; end def index; end
def create
new_value = build_sso_value
if @encrypted_config.update(value: new_value)
redirect_to settings_sso_index_path, notice: I18n.t('changes_have_been_saved')
else
render :index, status: :unprocessable_content
end
rescue StandardError => e
flash[:alert] = e.message
render :index, status: :unprocessable_content
end
private private
def load_encrypted_config def load_encrypted_config
@encrypted_config = @encrypted_config =
EncryptedConfig.find_or_initialize_by(account: current_account, key: 'saml_configs') EncryptedConfig.find_or_initialize_by(account: current_account,
key: EncryptedConfig::GOOGLE_SSO_KEY)
end
def build_sso_value
submitted = params.require(:encrypted_config).permit(value: {})[:value].to_h
existing = @encrypted_config.value || {}
# Don't clobber the saved secret with a blank one — the field is
# rendered empty (we never echo it back) so an unchanged form would
# otherwise wipe it out.
submitted['client_secret'] = existing['client_secret'] if submitted['client_secret'].to_s.empty?
submitted['allowed_domains'] =
submitted.delete('allowed_domains_csv').to_s.split(',').map(&:strip).reject(&:empty?)
submitted['enabled'] = submitted['enabled'].to_s == '1' || submitted['enabled'].to_s == 'true'
submitted.compact
end end
end end

@ -18,8 +18,13 @@
# index_accounts_on_uuid (uuid) UNIQUE # index_accounts_on_uuid (uuid) UNIQUE
# #
class Account < ApplicationRecord class Account < ApplicationRecord
LOGO_CONTENT_TYPES = %w[image/png image/jpeg image/svg+xml].freeze
LOGO_MAX_BYTES = 2.megabytes
attribute :uuid, :string, default: -> { SecureRandom.uuid } attribute :uuid, :string, default: -> { SecureRandom.uuid }
has_one_attached :logo
has_many :users, dependent: :destroy has_many :users, dependent: :destroy
has_many :encrypted_configs, dependent: :destroy has_many :encrypted_configs, dependent: :destroy
has_many :account_configs, dependent: :destroy has_many :account_configs, dependent: :destroy

@ -116,6 +116,10 @@ class User < ApplicationRecord
[first_name&.first, last_name&.first].compact_blank.join.upcase [first_name&.first, last_name&.first].compact_blank.join.upcase
end end
def signed_in_via_sso?
provider == 'google_oauth2' && uid.present?
end
def full_name def full_name
[first_name, last_name].compact_blank.join(' ') [first_name, last_name].compact_blank.join(' ')
end end
@ -127,4 +131,40 @@ class User < ApplicationRecord
email email
end end
end end
def self.from_google_omniauth(auth)
raw_info = auth.extra&.raw_info
hosted_domain = raw_info.respond_to?(:hd) ? raw_info.hd : raw_info&.dig('hd')
return nil unless Wabosign.google_domain_allowed?(hosted_domain)
email = auth.info.email.to_s.downcase
return nil if email.blank?
user = find_by('lower(email) = ?', email)
if user
return nil if user.provider.present? && user.uid != auth.uid
user.update!(provider: 'google_oauth2', uid: auth.uid) if user.provider.blank?
return user
end
account = default_sso_account
return nil if account.nil?
create!(
account: account,
email: email,
first_name: auth.info.first_name,
last_name: auth.info.last_name,
role: ADMIN_ROLE,
password: SecureRandom.hex(32),
provider: 'google_oauth2',
uid: auth.uid,
confirmed_at: Time.current
)
end
def self.default_sso_account
Account.where(archived_at: nil).order(:created_at).first
end
end end

@ -36,7 +36,7 @@
<p class="text-2xl font-semibold"><%= t('connect_to_docuseal_mcp') %></p> <p class="text-2xl font-semibold"><%= t('connect_to_docuseal_mcp') %></p>
<p class="text-lg"><%= t('add_the_following_to_your_mcp_client_configuration') %>:</p> <p class="text-lg"><%= t('add_the_following_to_your_mcp_client_configuration') %>:</p>
<div class="mockup-code overflow-hidden"> <div class="mockup-code overflow-hidden">
<% text = JSON.pretty_generate({ mcpServers: { wabosign: { type: 'http', url: "#{root_url(Wabosign.default_url_options)}mcp", headers: { Authorization: "Bearer #{@mcp_token.token}" } } } }).strip %> <% text = CGI.escapeHTML(JSON.pretty_generate({ mcpServers: { wabosign: { type: 'http', url: "#{root_url(Wabosign.default_url_options)}mcp", headers: { Authorization: "Bearer #{@mcp_token.token}" } } } }).strip) %>
<span class="top-0 right-0 absolute"> <span class="top-0 right-0 absolute">
<%= render 'shared/clipboard_copy', icon: 'copy', text:, class: 'btn btn-ghost text-white', icon_class: 'w-6 h-6 text-white', copy_title: t('copy'), copied_title: t('copied') %> <%= render 'shared/clipboard_copy', icon: 'copy', text:, class: 'btn btn-ghost text-white', icon_class: 'w-6 h-6 text-white', copy_title: t('copy'), copied_title: t('copied') %>
</span> </span>

@ -14,8 +14,15 @@ Rails.application.routes.draw do
get 'up' => 'rails/health#show' get 'up' => 'rails/health#show'
get 'manifest' => 'pwa#manifest' get 'manifest' => 'pwa#manifest'
devise_for :users, path: '/', only: %i[sessions passwords], # User is always :omniauthable (see app/models/user.rb); the strategy is
controllers: { sessions: 'sessions', passwords: 'passwords' } # registered with a setup proc in config/initializers/devise.rb that pulls
# live credentials from ENV or the database at request time.
devise_for :users, path: '/', only: %i[sessions passwords omniauth_callbacks],
controllers: {
sessions: 'sessions',
passwords: 'passwords',
omniauth_callbacks: 'users/omniauth_callbacks'
}
devise_scope :user do devise_scope :user do
resource :invitation, only: %i[update] do resource :invitation, only: %i[update] do
@ -172,13 +179,18 @@ Rails.application.routes.draw do
resources :download, only: %i[index], controller: 'submitters_download', constraints: { submitter_id: /\d+/ } resources :download, only: %i[index], controller: 'submitters_download', constraints: { submitter_id: /\d+/ }
resources :download, only: %i[index], controller: 'submit_form_completed_download' resources :download, only: %i[index], controller: 'submit_form_completed_download'
resources :send_email, only: %i[create], controller: 'submitters_send_email' resources :send_email, only: %i[create], controller: 'submitters_send_email'
resources :send_sms, only: %i[create], controller: 'submitters_send_sms'
end end
scope '/settings', as: :settings do scope '/settings', as: :settings do
unless Wabosign.multitenant? unless Wabosign.multitenant?
resources :storage, only: %i[index create], controller: 'storage_settings' resources :storage, only: %i[index create], controller: 'storage_settings'
resources :search_entries_reindex, only: %i[create] resources :search_entries_reindex, only: %i[create]
resources :sms, only: %i[index], controller: 'sms_settings' resources :sms, only: %i[index create], controller: 'sms_settings' do
collection do
post :test_message
end
end
resources :mcp, only: %i[index new create destroy], controller: 'mcp_settings' resources :mcp, only: %i[index new create destroy], controller: 'mcp_settings'
end end
if Wabosign.demo? || !Wabosign.multitenant? if Wabosign.demo? || !Wabosign.multitenant?
@ -186,7 +198,7 @@ Rails.application.routes.draw do
resource :reveal_access_token, only: %i[show create], controller: 'reveal_access_token' resource :reveal_access_token, only: %i[show create], controller: 'reveal_access_token'
end end
resources :email, only: %i[index create], controller: 'email_smtp_settings' resources :email, only: %i[index create], controller: 'email_smtp_settings'
resources :sso, only: %i[index], controller: 'sso_settings' resources :sso, only: %i[index create], controller: 'sso_settings'
resources :notifications, only: %i[index create], controller: 'notifications_settings' resources :notifications, only: %i[index create], controller: 'notifications_settings'
resource :esign, only: %i[show create new update destroy], controller: 'esign_settings' resource :esign, only: %i[show create new update destroy], controller: 'esign_settings'
resources :users, only: %i[index] resources :users, only: %i[index]
@ -195,6 +207,7 @@ Rails.application.routes.draw do
resources :integration_users, only: %i[index], path: 'users/:status', controller: 'users', resources :integration_users, only: %i[index], path: 'users/:status', controller: 'users',
defaults: { status: :integration } defaults: { status: :integration }
resource :personalization, only: %i[show create], controller: 'personalization_settings' resource :personalization, only: %i[show create], controller: 'personalization_settings'
resource :account_logo, only: %i[create destroy], controller: 'account_logo'
resources :webhooks, only: %i[index show new create update destroy], controller: 'webhook_settings' do resources :webhooks, only: %i[index show new create update destroy], controller: 'webhook_settings' do
post :resend post :resend

@ -4,6 +4,28 @@ class Ability
include CanCan::Ability include CanCan::Ability
def initialize(user) def initialize(user)
return if user.blank?
grant_personal_abilities(user)
case user.role
when User::ADMIN_ROLE then grant_admin_abilities(user)
when User::EDITOR_ROLE then grant_editor_abilities(user)
when User::VIEWER_ROLE then grant_viewer_abilities(user)
end
end
private
def grant_personal_abilities(user)
can :read, Account, id: user.account_id
can :manage, User, id: user.id
can :manage, UserConfig, user_id: user.id
can :manage, EncryptedUserConfig, user_id: user.id
can :manage, AccessToken, user_id: user.id
end
def grant_admin_abilities(user)
can %i[read create update], Template, Abilities::TemplateConditions.collection(user) do |template| can %i[read create update], Template, Abilities::TemplateConditions.collection(user) do |template|
Abilities::TemplateConditions.entity(template, user:, ability: 'manage') Abilities::TemplateConditions.entity(template, user:, ability: 'manage')
end end
@ -15,14 +37,36 @@ class Ability
can :manage, Submitter, account_id: user.account_id can :manage, Submitter, account_id: user.account_id
can :manage, User, account_id: user.account_id can :manage, User, account_id: user.account_id
can :manage, EncryptedConfig, account_id: user.account_id can :manage, EncryptedConfig, account_id: user.account_id
can :manage, EncryptedUserConfig, user_id: user.id
can :manage, AccountConfig, account_id: user.account_id can :manage, AccountConfig, account_id: user.account_id
can :manage, UserConfig, user_id: user.id
can :manage, Account, id: user.account_id can :manage, Account, id: user.account_id
can :manage, AccessToken, user_id: user.id
can :manage, McpToken, user_id: user.id can :manage, McpToken, user_id: user.id
can :manage, WebhookUrl, account_id: user.account_id can :manage, WebhookUrl, account_id: user.account_id
can :manage, :mcp can :manage, :mcp
end end
def grant_editor_abilities(user)
can %i[read create update], Template, Abilities::TemplateConditions.collection(user) do |template|
Abilities::TemplateConditions.entity(template, user:, ability: 'manage')
end
can :destroy, Template, account_id: user.account_id
can :manage, TemplateFolder, account_id: user.account_id
can :manage, TemplateSharing, template: { account_id: user.account_id }
can :manage, Submission, account_id: user.account_id
can :manage, Submitter, account_id: user.account_id
can :read, AccountConfig, account_id: user.account_id
end
def grant_viewer_abilities(user)
can :read, Template, Abilities::TemplateConditions.collection(user, ability: :read) do |template|
Abilities::TemplateConditions.entity(template, user:, ability: 'read')
end
can :read, TemplateFolder, account_id: user.account_id
can :read, TemplateSharing, template: { account_id: user.account_id }
can :read, Submission, account_id: user.account_id
can :read, Submitter, account_id: user.account_id
can :read, AccountConfig, account_id: user.account_id
end
end end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'annotaterb' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('annotaterb', 'annotaterb', version)
else
load Gem.activate_bin_path('annotaterb', 'annotaterb', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'bootsnap' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('bootsnap', 'bootsnap', version)
else
load Gem.activate_bin_path('bootsnap', 'bootsnap', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'brakeman' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('brakeman', 'brakeman', version)
else
load Gem.activate_bin_path('brakeman', 'brakeman', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'coderay' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('coderay', 'coderay', version)
else
load Gem.activate_bin_path('coderay', 'coderay', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'dotenv' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('dotenv', 'dotenv', version)
else
load Gem.activate_bin_path('dotenv', 'dotenv', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'erb' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('erb', 'erb', version)
else
load Gem.activate_bin_path('erb', 'erb', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'erb_lint' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('erb_lint', 'erb_lint', version)
else
load Gem.activate_bin_path('erb_lint', 'erb_lint', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'erb_lint' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('erb_lint', 'erblint', version)
else
load Gem.activate_bin_path('erb_lint', 'erblint', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'faker' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('faker', 'faker', version)
else
load Gem.activate_bin_path('faker', 'faker', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'foreman' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('foreman', 'foreman', version)
else
load Gem.activate_bin_path('foreman', 'foreman', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'hexapdf' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('hexapdf', 'hexapdf', version)
else
load Gem.activate_bin_path('hexapdf', 'hexapdf', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'diff-lcs' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('diff-lcs', 'htmldiff', version)
else
load Gem.activate_bin_path('diff-lcs', 'htmldiff', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'irb' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('irb', 'irb', version)
else
load Gem.activate_bin_path('irb', 'irb', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'jmespath' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('jmespath', 'jmespath.rb', version)
else
load Gem.activate_bin_path('jmespath', 'jmespath.rb', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'sidekiq' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('sidekiq', 'kiq', version)
else
load Gem.activate_bin_path('sidekiq', 'kiq', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'launchy' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('launchy', 'launchy', version)
else
load Gem.activate_bin_path('launchy', 'launchy', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'diff-lcs' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('diff-lcs', 'ldiff', version)
else
load Gem.activate_bin_path('diff-lcs', 'ldiff', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'minitest' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('minitest', 'minitest', version)
else
load Gem.activate_bin_path('minitest', 'minitest', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'nokogiri' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('nokogiri', 'nokogiri', version)
else
load Gem.activate_bin_path('nokogiri', 'nokogiri', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'pagy' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('pagy', 'pagy', version)
else
load Gem.activate_bin_path('pagy', 'pagy', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'pry' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('pry', 'pry', version)
else
load Gem.activate_bin_path('pry', 'pry', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'puma' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('puma', 'puma', version)
else
load Gem.activate_bin_path('puma', 'puma', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'puma' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('puma', 'pumactl', version)
else
load Gem.activate_bin_path('puma', 'pumactl', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'racc' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('racc', 'racc', version)
else
load Gem.activate_bin_path('racc', 'racc', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'rackup' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('rackup', 'rackup', version)
else
load Gem.activate_bin_path('rackup', 'rackup', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'railties' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('railties', 'rails', version)
else
load Gem.activate_bin_path('railties', 'rails', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'rake' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('rake', 'rake', version)
else
load Gem.activate_bin_path('rake', 'rake', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'debug' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('debug', 'rdbg', version)
else
load Gem.activate_bin_path('debug', 'rdbg', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'rdoc' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('rdoc', 'rdoc', version)
else
load Gem.activate_bin_path('rdoc', 'rdoc', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'rdoc' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('rdoc', 'ri', version)
else
load Gem.activate_bin_path('rdoc', 'ri', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'rotp' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('rotp', 'rotp', version)
else
load Gem.activate_bin_path('rotp', 'rotp', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'rouge' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('rouge', 'rougify', version)
else
load Gem.activate_bin_path('rouge', 'rougify', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'rspec-core' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('rspec-core', 'rspec', version)
else
load Gem.activate_bin_path('rspec-core', 'rspec', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'rubocop' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('rubocop', 'rubocop', version)
else
load Gem.activate_bin_path('rubocop', 'rubocop', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'parser' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('parser', 'ruby-parse', version)
else
load Gem.activate_bin_path('parser', 'ruby-parse', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'parser' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('parser', 'ruby-rewrite', version)
else
load Gem.activate_bin_path('parser', 'ruby-rewrite', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'sidekiq' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('sidekiq', 'sidekiq', version)
else
load Gem.activate_bin_path('sidekiq', 'sidekiq', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'sidekiq' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('sidekiq', 'sidekiqmon', version)
else
load Gem.activate_bin_path('sidekiq', 'sidekiqmon', version)
end

@ -0,0 +1,28 @@
#!/usr/bin/env ruby
#
# This file was generated by RubyGems.
#
# The application 'thor' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'rubygems'
Gem.use_gemdeps
version = ">= 0.a"
str = ARGV.first
if str
str = str.b[/\A_(.*)_\z/, 1]
if str and Gem::Version.correct?(str)
version = str
ARGV.shift
end
end
if Gem.respond_to?(:activate_and_load_bin_path)
Gem.activate_and_load_bin_path('thor', 'thor', version)
else
load Gem.activate_bin_path('thor', 'thor', version)
end

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save